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

  1. 🎯 Objetivos
  2. 📁 Estructura del proyecto
  3. 👥 Gestión de grupos y usuarios
  4. 🔐 Configuración de sudoers
  5. 🧱 Control de accesos con ACLs
  6. 🕵️ Auditoría de accesos
  7. ⚙️ Automatización con script
  8. 🔒 Buenas prácticas aplicadas
  9. 🧠 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

👥 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

GrupoRol funcionalUsuarios
admins Administradores con acceso privilegiado adminserver
developersDesarrolladores sin acceso rootjuan
operadoresTécnicos u operadores con permisos limitadosmaria
sysopsEquipo de sysopsesama_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.

🔒 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.

Gestión de usuarios, sudoers, control de accesos con ACLs y auditoría en RHEL

Post navigation