Saltar al contenido principal

Capítulo 9.2 - Configuración de sudo

Objetivos de Aprendizaje​

Al final de este capítulo, usted será capaz de:

  • Comprender sudo y su función
  • Configurar sudo de manera segura
  • Crear alias y grupos
  • Limitar los comandos permitidos
  • Registrar las acciones de sudo
  • Comprender las buenas prácticas

¿Qué es sudo?​

sudo (Super User DO) permite ejecutar comandos con los privilegios de otro usuario (generalmente root).

Ventajas:

  • No requiere cuenta root
  • Registro de acciones
  • Control granular
  • Más seguro que su

Archivo /etc/sudoers​

Edición Segura​

# ¡NUNCA editar directamente!
# Usar visudo (verifica sintaxis)
sudo visudo

# O editar con verificación
sudo visudo -f /etc/sudoers

visudo:

  • Verifica la sintaxis antes de guardar
  • Evita errores de configuración
  • Bloquea el archivo durante la edición

Formato Básico​

# /etc/sudoers
# Formato: usuario host=(runas) comandos

# Ejemplo simple
user1 ALL=(ALL:ALL) ALL

# Con NOPASSWD
user1 ALL=(ALL:ALL) NOPASSWD: ALL

# Comandos específicos
user1 ALL=(ALL:ALL) /usr/bin/systemctl, /usr/bin/docker

Sintaxis Detallada​

Usuarios​

# Usuario específico
user1 ALL=(ALL:ALL) ALL

# Grupo (prefijo %)
%developers ALL=(ALL:ALL) ALL

# Alias de usuarios
User_Alias ADMINS = user1, user2, user3
ADMINS ALL=(ALL:ALL) ALL

Hosts​

# Todos los hosts
user1 ALL=(ALL:ALL) ALL

# Host específico
user1 server1=(ALL:ALL) ALL

# Alias de hosts
Host_Alias SERVERS = server1, server2, server3
user1 SERVERS=(ALL:ALL) ALL

Runas (Ejecutar como)​

# Como root
user1 ALL=(ALL:ALL) ALL

# Como usuario específico
user1 ALL=(www-data:ALL) ALL

# Como cualquier usuario
user1 ALL=(ALL:ALL) ALL

# Alias runas
Runas_Alias WEBSERVERS = www-data, nginx
user1 ALL=(WEBSERVERS:ALL) ALL

Comandos​

# Todos los comandos
user1 ALL=(ALL:ALL) ALL

# Comandos específicos
user1 ALL=(ALL:ALL) /usr/bin/systemctl, /usr/bin/docker

# Directorio (todos los comandos dentro)
user1 ALL=(ALL:ALL) /usr/local/bin/

# Con o sin contraseña
user1 ALL=(ALL:ALL) NOPASSWD: /usr/bin/systemctl
user1 ALL=(ALL:ALL) PASSWD: /usr/bin/docker

Alias​

User_Alias​

# Agrupar usuarios
User_Alias ADMINS = user1, user2
User_Alias DEVELOPERS = dev1, dev2, dev3
User_Alias DEVOPS = ops1, ops2

# Uso
ADMINS ALL=(ALL:ALL) ALL
DEVELOPERS ALL=(ALL:ALL) /usr/bin/git, /usr/bin/docker

Host_Alias​

# Agrupar hosts
Host_Alias SERVERS = server1, server2, 192.168.1.0/24
Host_Alias WORKSTATIONS = ws1, ws2

# Uso
user1 SERVERS=(ALL:ALL) ALL

Cmnd_Alias​

# Agrupar comandos
Cmnd_Alias NETWORKING = /sbin/ifconfig, /sbin/route, /sbin/ip
Cmnd_Alias SERVICES = /usr/bin/systemctl start, /usr/bin/systemctl stop
Cmnd_Alias SOFTWARE = /usr/bin/apt, /usr/bin/yum

# Uso
user1 ALL=(ALL:ALL) NETWORKING, SERVICES

Runas_Alias​

# Agrupar usuarios runas
Runas_Alias WEBSERVERS = www-data, nginx
Runas_Alias DATABASES = mysql, postgres

# Uso
user1 ALL=(WEBSERVERS:ALL) /usr/bin/systemctl

Ejemplos Prácticos​

Administrador Completo​

# Acceso completo
User_Alias ADMINS = admin1, admin2
ADMINS ALL=(ALL:ALL) ALL

Desarrollador Restringido​

# Solo comandos de desarrollo
User_Alias DEVS = dev1, dev2
DEVS ALL=(ALL:ALL) /usr/bin/git, /usr/bin/docker, /usr/bin/npm

Webmaster​

# Solo gestión web
user1 ALL=(www-data:ALL) /usr/bin/systemctl restart apache2, \
/usr/bin/systemctl reload nginx

Operador de Sistema​

# Comandos de sistema sin contraseña
User_Alias OPS = ops1, ops2
Cmnd_Alias SYSTEM = /usr/bin/systemctl, /usr/bin/journalctl
OPS ALL=(ALL:ALL) NOPASSWD: SYSTEM

Registro​

Configuración​

# /etc/sudoers
# Registrar todos los comandos
Defaults logfile=/var/log/sudo.log
Defaults log_input, log_output

# O con syslog
Defaults syslog=auth

Ver los Logs​

# Logs del sistema
sudo grep sudo /var/log/auth.log # Ubuntu/Debian
sudo grep sudo /var/log/secure # Red Hat/CentOS

# Archivo personalizado
sudo tail -f /var/log/sudo.log

# Ver comandos de un usuario
sudo grep "user1" /var/log/auth.log | grep sudo

Buenas Prácticas​

Seguridad​

# 1. Limitar los comandos
user1 ALL=(ALL:ALL) /usr/bin/systemctl, /usr/bin/docker

# 2. Evitar NOPASSWD salvo que sea necesario
user1 ALL=(ALL:ALL) NOPASSWD: /usr/bin/systemctl status

# 3. Usar alias
User_Alias ADMINS = user1, user2
ADMINS ALL=(ALL:ALL) ALL

# 4. Registrar
Defaults logfile=/var/log/sudo.log

# 5. Timeout apropiado
Defaults timestamp_timeout=15 # 15 minutos

Mantenimiento​

# Verificar configuración
sudo visudo -c

# Probar permisos
sudo -l # Ver permisos actuales

# Ver historial
sudo grep sudo /var/log/auth.log

Archivos Incluidos​

/etc/sudoers.d/​

# Crear archivo separado
sudo visudo -f /etc/sudoers.d/user1

# Contenido
user1 ALL=(ALL:ALL) /usr/bin/systemctl

# Ventajas:
# - Organización
# - Fácil de gestionar
# - Sin conflicto con el sudoers principal

Nota: Los archivos en /etc/sudoers.d/ se incluyen automáticamente.


Resumen​

En este capítulo, usted ha aprendido:

sudo: Ejecución de comandos con privilegios elevados
visudo: Editor seguro con verificación de sintaxis
Sintaxis: usuario host=(runas) comandos
Alias: User_Alias, Host_Alias, Cmnd_Alias, Runas_Alias
Registro: Logs de acciones de sudo
Práctica: Limitar comandos, usar alias, registrar


Próximos Pasos​

Capítulo 9.3: Firewall (iptables, firewalld, ufw)
Capítulo 9.4: Auditoría y Monitoreo de Seguridad


Capítulo creado el: Diciembre 2024