-->

Administración de usuarios, grupos y privilegios

Objetivo:

Comprender y aplicar la gestión de usuarios, grupos y permisos en sistemas Linux, utilizando comandos nativos para la creación de cuentas, asignación de pertenencia a grupos suplementarios y control de privilegios administrativos mediante sudo.

Escenario:

  • Herramientas: Terminal Linux, comandos useradd, groupadd, usermod, passwd, chown, chmod y edición del fichero /etc/sudoers.
  • Conceptos analizados: Usuarios locales, grupos primarios y secundarios, ficheros de cuentas (/etc/passwd, /etc/group, /etc/shadow), y delegación de privilegios mediante el archivo de configuración sudoers.
  • Proceso clave: Creación de una estructura organizativa de usuarios y grupos para un entorno departamental, asignación de permisos sobre directorios compartidos y configuración segura de permisos administrativos.

Escenario Real: Organización departamental y control de accesos

Una pyme de desarrollo de software necesita estructurar los accesos de sus nuevos trabajadores. Se requiere crear un grupo para el departamento de desarrollo, dar de alta a dos empleados asignándoles sus carpetas personales y un espacio de trabajo compartido, y delegar privilegios de administración específicos al jefe de proyecto sin concederle acceso total como root.

Por defecto, la correcta segmentación de usuarios y la asignación restrictiva de permisos evitan brechas de seguridad accidentales o maliciosas en el sistema. Administrar adecuadamente los ficheros de identidad del sistema y utilizar herramientas de control de acceso basadas en roles (RBAC) mediante grupos es fundamental para cualquier técnico en administración de sistemas.

NOTA: Para realizar esta práctica de forma segura, trabajaremos en tu propia máquina de prácticas o entorno virtual, utilizando nombres de usuario y grupos de prueba específicos para no alterar las cuentas críticas del sistema operativo.

Instrucciones:

Fase 1: Creación de grupos y estructuración organizativa:

  • Crear un grupo específico para el departamento de desarrollo: sudo groupadd desarrollo
  • Crear un grupo para el equipo de sistemas o soporte: sudo groupadd soporte
  • Verificar la correcta creación de los grupos consultando el fichero correspondiente: tail -n 3 /etc/group

Fase 2: Creación de usuarios y asignación de grupos (primario y secundarios):

  • Crear el usuario dev1 con su directorio personal y el shell por defecto bash, asignándolo directamente al grupo primario desarrollo: sudo useradd -m -g desarrollo -s /bin/bash dev1
  • Establecer una contraseña segura para el nuevo usuario: sudo passwd dev1
  • Crear el usuario soporte1 asegurando la creación de su directorio personal: sudo useradd -m -s /bin/bash soporte1 y asignarle su contraseña: sudo passwd soporte1
  • Añadir al usuario soporte1 como miembro suplementario al grupo desarrollo (acceso cruzado): sudo usermod -aG desarrollo soporte1
  • Verificar las pertenencias de los usuarios ejecutando: groups dev1 y groups soporte1

Fase 3: Gestión de directorios compartidos y permisos:

  • Crear un directorio físico compartido en la ruta /var/www/proyecto_compartido: sudo mkdir -p /var/www/proyecto_compartido
  • Cambiar el grupo propietario del directorio para que pertenezca a desarrollo: sudo chown :desarrollo /var/www/proyecto_compartido
  • Establecer permisos restrictivos para que los miembros del grupo puedan leer, escribir y ejecutar, bloqueando el acceso al resto de usuarios del sistema: sudo chmod 770 /var/www/proyecto_compartido
  • Comprobar los permisos finales mediante: ls -ld /var/www/proyecto_compartido

Fase 4: Delegación segura de privilegios administrativos con sudo:

  • Crear un usuario jefe de proyecto: sudo useradd -m -s /bin/bash jefa_proyectos y asignarle contraseña: sudo passwd jefa_proyectos
  • Abrir de forma segura el editor de configuración de privilegios con la herramienta recomendada: sudo visudo
  • Añadir una regla específica al final del fichero para permitir que la usuaria ejecute únicamente comandos de gestión de red o servicios (por ejemplo, systemctl) sin contraseña o con validación:
    jefa_proyectos ALL=(ALL) /bin/systemctl restart nginx, /bin/systemctl status nginx
    
  • Guardar los cambios y salir del editor seguro.

Verificación:

  • Comprobar la correcta estructura e integridad de las cuentas creadas inspeccionando las últimas líneas del fichero de contraseñas encriptadas: sudo tail -n 4 /etc/passwd
  • Iniciar sesión temporalmente como el usuario dev1 (su - dev1) y comprobar que puede crear ficheros dentro del directorio compartido /var/www/proyecto_compartido.

Posibles errores y resolución de problemas:

Si al añadir un usuario a un grupo suplementario mediante el comando usermod -G olvidas incluir el modificador -a (append), el sistema sobrescribirá la lista completa de grupos secundarios del usuario, eliminándolo de los demás grupos a los que pertenecía.

  • Solución: Utiliza siempre la combinación conjunta -aG para añadir grupos de forma segura sin perder las asociaciones previas, o verifica la membresía actual con el comando id nombre_usuario.

Alternativa directa: Auditoría rápida de permisos de sudo

Si necesitas comprobar rápidamente qué privilegios administrativos específicos tiene concedidos una cuenta de usuario concreta en el sistema sin tener que leer manualmente todo el fichero sudoers, puedes ejecutar la siguiente instrucción:

sudo -l -U jefa_proyectos

Preguntas de reflexión:

  1. ¿Qué diferencia fundamental existe entre el grupo primario de un usuario y un grupo suplementario (secundario)?
  2. ¿Por qué se recomienda utilizar siempre el comando visudo en lugar de editar directamente el fichero /etc/sudoers con un editor de textos convencional como nano?
  3. ¿Qué representan los dígitos numéricos en una máscara de permisos restrictiva como 770 aplicada a un directorio compartido?
  4. ¿Qué implicaciones de seguridad tiene otorgar permisos del tipo (ALL : ALL) ALL a un usuario estándar frente a acotar comandos específicos?
Haz clic aquí para ver las soluciones y explicaciones

1. ¿Qué diferencia fundamental existe entre el grupo primario de un usuario y un grupo suplementario (secundario)?

El grupo primario es aquel que se asigna por defecto a todos los ficheros y directorios nuevos que crea el usuario en el sistema (aparece reflejado en /etc/passwd). Los grupos suplementarios son asociaciones adicionales que permiten al usuario heredar permisos de acceso a recursos compartidos de otros departamentos sin cambiar su identidad principal de trabajo.


2. ¿Por qué se recomienda utilizar siempre el comando visudo en lugar de editar directamente el fichero /etc/sudoers con un editor de textos convencional como nano?

El comando visudo realiza una comprobación de sintaxis estricta antes de guardar y cerrar el fichero. Si se comete un error tipográfico editando directamente /etc/sudoers, se puede bloquear el acceso administrativo por completo (rompiendo el comando sudo), mientras que visudo previene que se guarden configuraciones con errores fatales.


3. ¿Qué representan los dígitos numéricos en una máscara de permisos restrictiva como 770 aplicada a un directorio compartido?

El primer dígito (7) otorga permisos totales de lectura, escritura y ejecución al propietario del fichero. El segundo dígito (7) otorga idénticos privilegios completos a todos los miembros del grupo asignado al directorio. El tercer dígito (0) deniega absolutamente cualquier tipo de acceso (lectura, escritura o ejecución) a los usuarios ajenos al propietario y al grupo (otros).


4. ¿Qué implicaciones de seguridad tiene otorgar permisos del tipo (ALL : ALL) ALL a un usuario estándar frente a acotar comandos específicos?

Otorgar ALL equivale a convertir al usuario en un administrador total con capacidad de suplantar a cualquier usuario (incluso root) y ejecutar cualquier orden en el sistema. Si la cuenta de ese usuario se ve comprometida mediante un ataque de phishing o malware, el atacante obtendrá el control absoluto de la máquina, mientras que acotar comandos limita el radio de acción y cumple con el principio de mínimo privilegio.