Gestión de usuarios, sudoers, control de accesos con ACLs y auditoría en RHEL
Este proyecto tiene como objetivo diseñar y documentar un sistema de gestión de usuarios y control de accesos en un entorno RHEL (Red Hat Enterprise Linux), aplicando buenas prácticas de administración de sistemas y seguridad.
A través de scripts, configuración de grupos, uso de sudoers, control de accesos mediante ACLs (Access Control Lists) y mecanismos básicos de auditoría, se busca demostrar un enfoque estructurado, automatizable y seguro para la administración de usuarios en entornos empresariales o de producción.
Este proyecto refleja experiencia práctica real y está pensado tanto para formar parte de un porfolio profesional como para servir de referencia o base reutilizable.
📚 Índice
- 🎯 Objetivos
- 📁 Estructura del proyecto
- 👥 Gestión de grupos y usuarios
- 🔐 Configuración de sudoers
- 🧱 Control de accesos con ACLs
- 🕵️ Auditoría de accesos
- ⚙️ Automatización con script
- 🔒 Buenas prácticas aplicadas
- 🧠 Conocimientos y herramientas aplicadas
🎯 Objetivos
El objetivo principal de este proyecto es implementar un sistema completo y seguro de gestión de usuarios y control de privilegios en un entorno RHEL, integrando herramientas y configuraciones habituales en entornos profesionales.
De forma más específica, se busca:
- ✅ Definir y crear grupos de usuarios según roles funcionales (administradores, desarrolladores, operadores).
- ✅ Crear usuarios con configuración estandarizada y asignarlos a sus grupos correspondientes.
- ✅ Configurar de forma segura el acceso a comandos privilegiados mediante el archivo sudoers, garantizando el principio de mínimo privilegio.
- ✅ Aplicar ACLs (Access Control Lists) sobre directorios críticos para otorgar accesos específicos a ciertos usuarios sin modificar permisos base.
- ✅ Implementar una auditoría básica de accesos, incluyendo historial de logins, intentos fallidos y sesiones activas.
- ✅ Automatizar tareas repetitivas con un script reutilizable y documentado.
- ✅ Documentar cada parte del proceso siguiendo buenas prácticas para facilitar el mantenimiento y la reutilización.
📁 Estructura del proyecto
proyecto-gestion-usuarios/
├── scripts/
│ └── gestion_usuarios.sh # Script principal para automatizar la creación de grupos y usuarios
├── documentacion/
│ └── README.md # Documentación completa del proyecto
Podéis visualizar y descargar este repositorio directamente pulsando en este enlace.
👥 Gestión de grupos y usuarios
En este proyecto se establecen roles funcionales para organizar a los usuarios del sistema según su nivel de privilegio o responsabilidad. Para ello, se crean grupos y se asignan usuarios a cada uno de forma estructurada.
🔸 Grupos creados
Grupo | Rol funcional | Usuarios |
admins | Administradores con acceso privilegiado | adminserver |
developers | Desarrolladores sin acceso root | juan |
operadores | Técnicos u operadores con permisos limitados | maria |
sysops | Equipo de sysops | esama_ops |
🔒 Se crea un directorio home para cada usuario con -m y se asignan directamente a su grupo correspondiente con -G.
useradd -m -G [GRUPO] [USUARIO]
passwd [USUARIO]

🔐 Configuración de sudoers
La configuración del archivo sudoers permite definir qué usuarios o grupos pueden ejecutar comandos con privilegios de superusuario (root) sin necesidad de acceder directamente a la cuenta root. Con ello buscamos dar privilegios administrativos únicamente al grupo admins, siguiendo el principio de mínimo privilegio.
✏️ Edición segura del archivo sudoers
Para evitar errores que puedan bloquear el acceso al sistema, se debe usar siempre el comando visudo, que valida la sintaxis antes de guardar:
visudo
Busca la sección donde se definen los grupos y revisa o declara esta línea:
%admins ALL=(ALL) ALL
Esto permite a cualquier usuario del grupo admins ejecutar cualquier comando como cualquier usuario (incluido root) con sudo.
🔒 Configuración personalizada
También se pueden definir permisos más restrictivos por usuario o grupo. Ejemplo:
Supongamos que queremos un usuario para administrar los servicios y los logs de estos pero que no sea administrador del equipo, podemos asignarle esta configuracion:
esama_ops ALL=(ALL) /usr/bin/systemctl, /usr/bin/journalctl
Esto permite a esama_ops ejecutar únicamente los comandos systemctl y journalctl con privilegios sin ser sudoer ni tener permisos de administracion
🛠️ Validar permisos sudo
Después de configurar podemos confirmar los permisos ejecutando:
sudo -l
Este comando muestra los comandos que el usuario actual puede ejecutar con sudo.



🧱 Control de accesos con ACLs
En esta sección documentaremos cómo aplicar Access Control Lists (ACLs) para otorgar permisos más finos y específicos sobre archivos y carpetas, sin modificar los permisos tradicionales (propietario, grupo, otros).
🔸 ¿Por qué usar ACLs?
- Permiten asignar permisos a usuarios o grupos específicos sin alterar el propietario o grupo base.
- Útiles cuando varios usuarios necesitan diferentes niveles de acceso a un mismo recurso.
- Más flexibles que los permisos tradicionales de Linux.
🔸 Comandos básicos para ACLs en RHEL
Para gestionar ACLs, se usan principalmente estos comandos:
- setfacl: asigna permisos ACL
- getfacl: consulta permisos ACL actuales
# Asignar permiso de escritura a maria en /proyecto
setfacl -m u:maria:rwx /proyecto
# Para verificar los permisos ACL actuales
getfacl /directorio
# Eliminar un permiso ACL
setfacl -x u:maria /proyecto
🔸 Ejemplo práctico
Supongamos que hay un directorio /proyecto con propietario eric y grupo admins.
Quieres que el usuario maria (que no es del grupo admins) tenga permiso de lectura, escritura y ejecución en ese directorio:

Otros ejemplos avanzados de ACLs en RHEL
1. Aplicar permisos recursivos a un directorio y su contenido
Si quieres que un usuario tenga permisos específicos en un directorio y en todos sus archivos y subdirectorios:
setfacl -R -m u:maria:rwx /proyecto
- -R: Recursivo
- -m: Modificar ACL
Esto asigna permisos de lectura, escritura y ejecución para maria en /proyecto y todo lo que contiene.
2. Establecer permisos por defecto para nuevos archivos y directorios
Para que todos los archivos y carpetas nuevas creados dentro de un directorio hereden automáticamente permisos ACL:
setfacl -d -m u:maria:rwx /proyecto
- -d: Define permisos por defecto (default ACL)
- Esto evita tener que asignar ACL manualmente cada vez que se crea un archivo o carpeta nueva dentro.
3. Asignar permisos a un grupo específico con ACL
setfacl -m g:operadores:rx /proyecto/scripts
- Da permisos de lectura y ejecución a todos los usuarios del grupo operadores en /proyecto/scripts.
4. Consultar ACL incluyendo permisos por defecto
getfacl -R /proyecto
Muestra las ACL de todos los archivos y carpetas dentro de /proyecto, incluyendo las ACL por defecto.
5. Copiar ACLs de un directorio a otro
Para replicar los permisos ACL de un directorio a otro:
getfacl -R /origen | setfacl –set-file=- -R /destino
Esto es útil para migraciones o para mantener permisos sincronizados.
6. Quitar todas las ACLs de un archivo o carpeta
setfacl -b /proyecto/archivo.txt
Elimina todas las ACLs, dejando solo los permisos tradicionales.
📋 Auditoría de accesos y acciones con auditd
La auditoría permite registrar eventos importantes del sistema, como accesos a archivos sensibles o uso de comandos privilegiados, para cumplir con normativas y mejorar la seguridad.
🔸 Instalación y activación
sudo yum install audit
sudo systemctl enable –now auditd
🔸 Reglas básicas de auditoría
Ejemplo: auditar accesos de lectura, escritura y ejecución al archivo /etc/sudoers
sudo auditctl -w /etc/sudoers -p rwa -k sudoers_changes
- -w: vigila el archivo o directorio
- -p: permisos auditados (read, write, attribute change)
- -k: etiqueta para filtrar eventos fácilmente
# Consultar logs de auditoría
sudo ausearch -k sudoers_changes

🔸Auditoría de comandos sudo usados por un usuario
Se puede auditar el uso de sudo para ver qué comandos ejecutan los usuarios con privilegios.
sudo auditctl -w /usr/bin/sudo -p x -k sudo_usage

⚙️ Automatización con script
Para facilitar la gestión y despliegue de usuarios, grupos, permisos y configuración básica de auditoría, se ha creado un script Bash que automatiza los pasos principales de este proyecto.
📌 Funcionalidades de los scripts
- ✅ Crea grupos usuarios.
- ✅ Crea usuarios y asigna al grupo correspondiente.
- ✅ Establece contraseñas iniciales.
- ✅ Asigna acceso sudo.
- ✅ Aplica permisos ACL sobre directorios específicos.
⚠️ Requisitos previos
- Ejecutar como usuario con privilegios root.
- Tener instalado el paquete acl y audit.
Podéis visualizar y descargar este repositorio directamente pulsando en este enlace.
🔒 Buenas prácticas aplicadas
Durante el desarrollo del script y la gestión de usuarios en RHEL, se han seguido una serie de buenas prácticas de administración de sistemas que refuerzan la seguridad, la trazabilidad y la organización:
- Principio de mínimo privilegio: solo el grupo de administradores tiene acceso a sudo, y se restringen comandos específicos cuando es necesario.
- Separación de funciones: el script permite gestionar usuarios, permisos y auditorías de forma modular y escalable.
- Control de accesos finos: mediante el uso de ACLs (setfacl) se aplica control granular sin alterar los permisos básicos del sistema.
- Auditoría de acciones sensibles: se monitoriza el acceso a ficheros críticos y se auditan eventos importantes mediante auditd.
- Automatización segura: los pasos son interactivos, lo que evita automatismos peligrosos en entornos reales. Requiere confirmaciones y contraseñas.
🧠 Conocimientos y herramientas aplicadas
Este proyecto refleja la aplicación real de conocimientos fundamentales para cualquier administrador de sistemas Linux, especialmente en entornos RHEL o empresariales:
🛠️ Herramientas y tecnologías usadas:
- Bash scripting: programación estructurada con funciones, control de errores y menú interactivo.
- Gestión de usuarios y grupos: useradd, groupadd, passwd, usermod.
- Privilegios sudo: edición segura de /etc/sudoers, uso de %grupo para control en bloque.
- Permisos ACL: setfacl, getfacl para permisos detallados en carpetas compartidas.
- Auditoría: instalación y uso de auditd, reglas con auditctl.
💡 Conocimientos prácticos:
- Seguridad de acceso en sistemas multiusuario.
- Gestión estructurada de roles.
- Aplicación de políticas de auditoría en entornos Linux.
- Preparación de scripts reutilizables para despliegues.
- Buenas prácticas de documentación y estructura de proyectos.