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