Objetivo:
Aprender a automatizar el aprovisionamiento masivo y la gestión del ciclo de vida de los usuarios en sistemas operativos Linux, combinando comandos nativos de gestión de cuentas (useradd, groupadd), la personalización de estructuras mediante esqueletos de usuario (/etc/skel) y el desarrollo de scripts de automatización en Bash.
Escenario:
- Herramientas: Terminal Linux,
useradd,groupadd,chpasswd, directorio/etc/skel, intérprete Bash, editores de texto (Nano). - Conceptos analizados: Gestión de identidades locales, bases de datos de usuarios (
/etc/passwd,/etc/shadow,/etc/group), automatización de altas/bajas y herencia de ficheros de configuración mediante plantillas iniciales. - Proceso clave: Diseño de un script de aprovisionamiento automatizado que lea listas de usuarios, cree grupos departamentales, asigne contraseñas de forma segura y personalice el entorno inicial de cada cuenta.
Escenario Real: Alta masiva de nuevos alumnos en el centro educativo
Al comienzo de curso, el departamento de sistemas recibe un listado con los nombres de 50 nuevos alumnos que necesitan disponer de una cuenta de usuario en los servidores del aula de prácticas. Crear las cuentas una a una de forma manual mediante comandos individuales es un proceso lento, repetitivo y propenso a errores humanos. Como administrador de sistemas, debes automatizar este proceso mediante un script en Bash capaz de procesar un archivo de datos, crear las carpetas personales con configuraciones predeterminadas (*plantillas*) y asignar credenciales seguras de manera desatendida.
useradd permiten configurar múltiples parámetros (como el directorio personal, el shell por defecto o la pertenencia a grupos suplementarios), mientras que el directorio /etc/skel actúa como una plantilla maestra cuyos ficheros se copian automáticamente al directorio /home de cada nuevo usuario en el momento de su creación.NOTA: Esta práctica se realizará de forma controlada sobre nuestro entorno de prácticas habitual, utilizando un script de prueba para simular el alta y baja de cuentas de usuario.
Instrucciones:
Fase 1: Preparación de la plantilla predeterminada en /etc/skel:
- El directorio
/etc/skelcontiene los archivos de configuración inicial que heredarán todos los nuevos usuarios. Vamos a añadir un archivo de bienvenida personalizado a la plantilla:sudo nano /etc/skel/bienvenida.txt
- Escribir un texto informativo dentro del archivo (ej. "Bienvenido al sistema corporativo. Por favor, respeta las normas de uso.") y guardar los cambios.
- Cualquier archivo o carpeta que coloquemos en
/etc/skelaparecerá automáticamente en el directorio personal de cada usuario que creemos a partir de ahora.
Fase 2: Creación manual avanzada y estructuración de grupos:
- Crear un grupo departamental específico para organizar a los nuevos usuarios:
sudo groupadd alumnos_fp
- Crear un usuario de prueba asociándolo al grupo creado, asignándole un shell bash y especificando su directorio personal:
sudo useradd -m -g alumnos_fp -s /bin/bash alumno01
- Asignar una contraseña inicial segura al usuario recién creado de forma automatizada mediante
chpasswd:echo "alumno01:PasswordSecreto123" | sudo chpasswd
Fase 3: Desarrollo de un Script de Aprovisionamiento Automatizado:
- Crear un archivo de script en Bash para automatizar el alta de múltiples usuarios:
nano aprovisionar.sh
- Añadir el código del script que lea un nombre de usuario por parámetro, verifique si existe, cree su cuenta, asigne contraseña y configure sus permisos:
#!/bin/bash # Script de aprovisionamiento automatizado de usuarios USUARIO=$1 PASSWORD=$2 if [ -z "$USUARIO" ] || [ -z "$PASSWORD" ]; then echo "Uso: sudo ./aprovisionar.sh [nombre_usuario] [contraseña]" exit 1 fi # Crear usuario con directorio personal y grupo por defecto sudo useradd -m -s /bin/bash "$USUARIO" echo "$USUARIO:$PASSWORD" | sudo chpasswd echo "¡Usuario $USUARIO creado y aprovisionado correctamente con la plantilla de skel!" - Dar permisos de ejecución al script creado:
chmod +x aprovisionar.sh
Fase 4: Ciclo de baja y depuración de cuentas de usuario:
- Cuando un usuario deja la organización, es necesario eliminar su cuenta de forma limpia. Para borrar el usuario y eliminar simultáneamente su directorio personal y sus archivos asociados en el disco:
sudo userdel -r alumno01
- Para eliminar el grupo departamental creado previamente si ya no contiene ningún miembro activo:
sudo groupdel alumnos_fp
Verificación:
- Ejecutar el script de aprovisionamiento creado pasando un usuario de prueba (ej.
sudo ./aprovisionar.sh testuser TempPass2026). - Verificar que la cuenta se ha creado consultando la base de datos de usuarios:
grep testuser /etc/passwd - Comprobar que el archivo de plantilla ubicado en
/etc/skel/bienvenida.txtse ha copiado correctamente dentro de la carpeta personal del nuevo usuario (/home/testuser/bienvenida.txt). - Realizar la baja limpia de la cuenta de prueba mediante
sudo userdel -r testusery comprobar que su directorio personal ha desaparecido por completo.
Posibles errores y resolución de problemas:
Si al ejecutar un script de automatización que crea usuarios aparece un error crítico indicando que el comando useradd ha fallado porque el usuario ya existe (useradd: user '...' already exists), se debe a que el script carece de una validación previa que compruebe la existencia de la cuenta en el sistema antes de intentar crearla de nuevo.
Solución: Modifica el script añadiendo una comprobación mediante el comando
id $USUARIOo consultando el archivo/etc/passwdpara verificar si el usuario ya está registrado antes de invocar auseradd.
Preguntas de reflexión:
- ¿Qué función cumple exactamente el directorio
/etc/skelen el proceso de alta de un nuevo usuario y qué ventajas aporta frente a configurar los archivos de entorno manualmente uno a uno? - ¿Por qué es un riesgo de seguridad crítico almacenar contraseñas en texto plano dentro de un script de Bash destinado al aprovisionamiento masivo de usuarios?
- ¿Qué diferencia fundamental existe entre ejecutar el comando
userdel alumnofrente auserdel -r alumnoen lo referente a la limpieza de recursos en el almacenamiento del servidor? - ¿Cómo garantizan las bases de datos de autenticación del sistema (como
/etc/passwdy/etc/shadow) la separación segura entre la información pública de las cuentas y las credenciales cifradas?
Haz clic aquí para ver las soluciones y explicaciones
1. ¿Qué función cumple exactamente el directorio /etc/skel en el proceso de alta de un nuevo usuario y qué ventajas aporta frente a configurar los archivos de entorno manualmente uno a uno?
/etc/skel (esqueleto) actúa como una plantilla maestra que contiene los archivos de configuración predeterminados (como perfiles de shell, carpetas de documentos iniciales o configuraciones de entorno). Su ventaja radica en que automatiza la estandarización del entorno de trabajo para cualquier cuenta nueva que se cree en el sistema, evitando tener que copiar y configurar manualmente ficheros de inicio para cada usuario.
2. ¿Por qué es un riesgo de seguridad crítico almacenar contraseñas en texto plano dentro de un script de Bash destinado al aprovisionamiento masivo de usuarios?
Porque cualquier usuario con privilegios estándar que logre leer el archivo del script (si los permisos no son estrictos) o analice el historial de comandos e interpretaciones en ejecución podrá ver las credenciales en texto claro, permitiendo el robo de acceso a las cuentas creadas. Las contraseñas deben gestionarse mediante métodos seguros, lectura interactiva cifrada o generación de tokens temporales de primer acceso.
3. ¿Qué diferencia fundamental existe entre ejecutar el comando userdel alumno frente a userdel -r alumno en lo referente a la limpieza de recursos en el almacenamiento del servidor?
userdel elimina únicamente la entrada del usuario en las bases de datos de sistema (/etc/passwd, /etc/shadow), pero deja intacto el directorio personal y los archivos del usuario en /home/alumno. En cambio, el parámetro -r (remove) borra de forma simultánea tanto la cuenta como todo su directorio personal y buzón de correo asociado, evitando la acumulación de datos huérfanos que ocupan espacio innecesariamente.
4. ¿Cómo garantizan las bases de datos de autenticación del sistema (como /etc/passwd y /etc/shadow) la separación segura entre la información pública de las cuentas y las credenciales cifradas?
Mediante la separación en dos archivos distintos con permisos diferentes: /etc/passwd almacena información de identificación pública (nombre de usuario, UID, directorio personal, shell) y puede ser leído por cualquier usuario del sistema. Por el contrario, /etc/shadow almacena las contraseñas cifradas y los parámetros de caducidad, y tiene permisos estrictos de lectura reservados exclusivamente para el usuario root, protegiendo las credenciales frente a ataques de extracción o fuerza bruta.