Administración de cuentas de usuario en Linux con useradd, usermod y userdel

CompTIABeginner
Practicar Ahora

Introducción

En esta práctica de laboratorio, adquirirás los conocimientos fundamentales para gestionar cuentas de usuario en un entorno Linux. Practicarás el ciclo de vida completo de la administración de usuarios: desde la creación y protección de nuevas cuentas, pasando por la modificación de sus propiedades, hasta su eliminación segura. Esta experiencia práctica es indispensable para cualquier administrador de sistemas responsable del mantenimiento de un entorno Linux multiusuario.

Comenzarás utilizando el comando useradd para crear un nuevo usuario y su directorio personal, y luego protegerás la cuenta con passwd. A continuación, explorarás las diferencias entre su y su - al cambiar de usuario y aprenderás a bloquear y desbloquear cuentas. También modificarás atributos de usuario, como las políticas de caducidad de contraseñas con chage y la pertenencia a grupos con usermod. La práctica concluye demostrando cómo eliminar correctamente a un usuario y sus datos asociados mediante el comando userdel.

Esta es una Práctica Guiada, que proporciona instrucciones paso a paso para ayudarte a aprender y practicar. Sigue las instrucciones cuidadosamente para completar cada paso y ganar experiencia práctica. Los datos históricos muestran que esta es una práctica de nivel principiante con una tasa de finalización del 82%. Ha recibido una tasa de valoraciones positivas del 100% por parte de los alumnos.

Crear y proteger un usuario con useradd y passwd

En este paso, aprenderás a crear una nueva cuenta de usuario utilizando el comando useradd y a protegerla estableciendo una contraseña con el comando passwd. Estas son tareas administrativas básicas para la gestión de un sistema Linux.

Primero, vamos a crear un nuevo usuario llamado student1. El comando useradd requiere privilegios de superusuario (root) para crear usuarios, por lo que deberás anteponer sudo al comando.

Ejecuta el siguiente comando en tu terminal:

sudo useradd -m student1

La opción -m es fundamental; le indica a useradd que cree el directorio personal del usuario, que por defecto será /home/student1. Si no utilizas -m, el usuario se creará, pero no tendrá un directorio personal para almacenar sus archivos.

Tras ejecutar el comando, el sistema crea entradas para el nuevo usuario en varios archivos críticos del sistema. Puedes verificarlo utilizando el comando grep para buscar líneas que comiencen con student1 en los archivos /etc/passwd, /etc/shadow y /etc/group. Dado que /etc/shadow requiere privilegios de root para ser leído, es necesario usar sudo:

sudo grep ^student1 /etc/passwd /etc/shadow /etc/group

Tu salida debería ser similar a esta. Los números de ID de usuario (UID) e ID de grupo (GID) pueden variar, pero la estructura será la misma:

/etc/passwd:student1:x:5001:5001::/home/student1:/bin/sh
/etc/shadow:student1:!:20265:0:99999:7:::
/etc/group:student1:x:5001:

Analicemos esta salida:

  • /etc/passwd: Este archivo contiene información básica de la cuenta de usuario. La x en el segundo campo indica que la contraseña cifrada no se almacena aquí, sino en el archivo /etc/shadow por motivos de seguridad.
  • /etc/shadow: Este archivo contiene información segura de la cuenta. El segundo campo contendrá inicialmente ! o *, lo que indica que aún no se ha establecido una contraseña y la cuenta no puede usarse para iniciar sesión.
  • /etc/group: Se ha creado automáticamente un nuevo grupo, también llamado student1, para que sea el grupo primario de este usuario.

Ahora que el usuario existe, necesitas establecer una contraseña para que la cuenta sea utilizable y segura. Usaremos el comando passwd para esto. Al igual que useradd, requiere sudo cuando se cambia la contraseña de otro usuario.

sudo passwd student1

El sistema te pedirá que introduzcas y luego confirmes una nueva contraseña para student1. Para esta práctica, utiliza student1pass como contraseña. Ten en cuenta que, por razones de seguridad, lo que escribas no se mostrará en la pantalla.

New password:
Retype new password:
passwd: password updated successfully

Con la contraseña establecida, revisemos de nuevo el archivo /etc/shadow para ver qué ha cambiado. Recuerda usar sudo:

sudo grep ^student1 /etc/shadow

La salida será ahora diferente. El marcador ... representa una cadena de caracteres larga y única.

student1:$y$j9T$lUM1RtLPQdrCOHmaFf1po/$xqNw.5dz54yR9whxsID9teI28/BOyvKocK5dA9X7GoD:20265:0:99999:7:::

Observa que el segundo campo contiene ahora una cadena larga y compleja. Esta es la versión hash (cifrada) de la contraseña que acabas de configurar. La cuenta ya está activa y puede utilizarse para iniciar sesión.

Cambiar de usuario y entender las diferencias de entorno con su frente a su -

En este paso, explorarás cómo cambiar a otra cuenta de usuario dentro de tu sesión de terminal actual utilizando el comando su (substitute user). También aprenderás la diferencia crítica entre usar su con y sin el guion - (o --login), lo cual afecta significativamente al entorno del usuario.

Primero, examinemos tu entorno actual como usuario labex. Ejecuta estos comandos para ver tu usuario actual, tu directorio personal y tu directorio de trabajo:

whoami
echo $HOME
pwd

Verás la siguiente salida, confirmando que eres el usuario labex en el directorio de tu proyecto:

labex
/home/labex
/home/labex/project

Ahora, cambiemos al usuario student1 que creaste anteriormente. Usa el comando su seguido del nombre de usuario. Se te pedirá la contraseña de student1, que configuraste como student1pass.

su student1

Tras introducir la contraseña, tu sesión operará bajo la identidad de student1. Sin embargo, el entorno no se ha cargado por completo. Ejecutemos los mismos comandos de nuevo para ver qué ha cambiado y qué no.

whoami
echo $HOME
pwd

Observa el resultado:

student1
/home/student1
/home/labex/project

Esto es lo que nos indica:

  • whoami: Ahora eres efectivamente student1.
  • echo $HOME: La variable de entorno HOME apunta ahora al directorio personal del nuevo usuario (student1).
  • pwd: Sigues en el mismo directorio en el que estabas antes de cambiar de usuario (/home/labex/project).

Este comportamiento puede ser problemático porque los scripts y aplicaciones suelen depender de la variable HOME para encontrar archivos de configuración, lo que podría causar errores inesperados.

Ahora, escribe exit para volver a la shell de tu usuario labex.

exit

A continuación, intentemos cambiar de usuario de nuevo, pero esta vez con el parámetro -. Este indicador le dice a su que inicie una "login shell" (sesión de inicio), lo que simula un inicio de sesión completo. Esto significa que cargará todo el entorno de student1, incluyendo su directorio personal y su perfil de shell.

su - student1

Introduce la contraseña (student1pass) de nuevo. Ahora, ejecuta el mismo conjunto de comandos de diagnóstico:

whoami
echo $HOME
pwd

Compara la salida con el intento anterior:

student1
/home/student1
/home/student1

Las diferencias son notables:

  • whoami: Sigues siendo student1.
  • echo $HOME: La variable HOME apunta a /home/student1.
  • pwd: Tu directorio de trabajo actual ha cambiado automáticamente al directorio personal de student1.

Esto demuestra que su - <usuario> es la forma recomendada de cambiar de usuario en la línea de comandos, ya que proporciona un entorno limpio y predecible, evitando problemas con rutas y permisos incorrectos.

Para terminar este paso, escribe exit para regresar a tu sesión original de labex.

exit

Bloquear y desbloquear cuentas de usuario con passwd -l y passwd -u

En este paso, aprenderás a deshabilitar temporalmente una cuenta de usuario bloqueándola y luego a rehabilitarla desbloqueándola. Esta es una práctica administrativa común cuando necesitas impedir que un usuario inicie sesión sin necesidad de eliminar su cuenta ni sus archivos.

Primero, bloqueemos la cuenta student1. Para ello, utilizamos el comando passwd con la opción -l (lock). Esta acción requiere privilegios administrativos, por lo que debes usar sudo.

sudo passwd -l student1

El comando confirmará que la contraseña ha sido bloqueada. El mensaje de salida puede variar ligeramente pero indicará éxito.

passwd: password for user student1 changed.

¿Pero qué hace realmente el "bloqueo"? Inspeccionemos el archivo /etc/shadow de nuevo para ver el efecto.

sudo grep ^student1 /etc/shadow

Notarás un cambio sutil pero importante. La cadena de la contraseña cifrada ahora tiene como prefijo uno o dos signos de exclamación (!). El marcador ... representa el resto de tu hash único.

student1:!$y$j9T$...:20265:0:99999:7:::

Este prefijo ! invalida el hash de la contraseña almacenada, haciendo imposible que el sistema coincida con cualquier contraseña que el usuario proporcione. Como resultado, el usuario no puede iniciar sesión. Probémoslo intentando cambiar al usuario student1:

su - student1

Se te pedirá la contraseña, pero incluso si introduces la correcta (student1pass), el inicio de sesión fallará.

Password:
su: Authentication failure

Esto confirma que la cuenta está bloqueada correctamente. Ahora, vamos a desbloquearla. Para rehabilitar la cuenta, simplemente inviertes el proceso usando la opción -u (unlock) con el comando passwd.

sudo passwd -u student1

Nuevamente, el comando confirmará el cambio.

passwd: password for user student1 changed.

Revisemos el archivo /etc/shadow una última vez para verificar que la cuenta esté desbloqueada.

sudo grep ^student1 /etc/shadow

La salida muestra que el prefijo ! ha sido eliminado, restaurando el hash de la contraseña original.

student1:$y$j9T$...:20265:0:99999:7:::

La cuenta está activa de nuevo. Puedes confirmarlo cambiando con éxito al usuario student1. Introduce la contraseña student1pass cuando se te solicite.

su - student1

Ahora deberías haber iniciado sesión como student1. Finalmente, escribe exit para volver a tu sesión de labex.

exit

Modificar la caducidad de contraseñas y la pertenencia a grupos con chage y usermod

En este paso, gestionarás propiedades de usuario más avanzadas. Aprenderás a aplicar políticas de seguridad de contraseñas usando chage para controlar la expiración, y a gestionar la pertenencia a grupos de un usuario con usermod para controlar sus permisos y derechos de acceso.

Primero, examinemos la información de caducidad de la contraseña para la cuenta student1. El comando chage (change age) con el indicador -l (list) muestra estos detalles.

sudo chage -l student1

La salida mostrará la configuración por defecto de la cuenta. Las fechas corresponderán al momento en que creaste el usuario.

Last password change     : Dec 08, 2024
Password expires     : never
Password inactive     : never
Account expires      : never
Minimum number of days between password change  : 0
Maximum number of days between password change  : 99999
Number of days of warning before password expires : 7

Por seguridad, es una buena práctica exigir que los usuarios cambien sus contraseñas periódicamente. Vamos a establecer una política donde la contraseña deba cambiarse cada 90 días (-M 90), solo pueda cambiarse una vez cada 7 días (-m 7), y el usuario reciba una advertencia 14 días antes de que caduque (-W 14).

sudo chage -M 90 -m 7 -W 14 student1

Ahora, visualiza la configuración de nuevo para confirmar los cambios:

sudo chage -l student1

La salida reflejará la nueva política:

Last password change     : Dec 08, 2024
Password expires     : Mar 08, 2025
Password inactive     : never
Account expires      : never
Minimum number of days between password change  : 7
Maximum number of days between password change  : 90
Number of days of warning before password expires : 14

A continuación, modifiquemos la pertenencia a grupos. Un usuario pertenece a un grupo primario y puede pertenecer a múltiples grupos secundarios (o suplementarios). Puedes ver los grupos de un usuario con el comando id.

id student1
uid=5001(student1) gid=5001(student1) groups=5001(student1)

Esto muestra que el grupo primario de student1 es student1 (gid=5001) y que aún no pertenece a ningún grupo secundario.

Vamos a crear un nuevo grupo llamado developers y añadir a student1 a él. Primero, crea el grupo:

sudo groupadd developers

Ahora, añade a student1 a este nuevo grupo usando usermod. Los parámetros -aG son cruciales: -G especifica los grupos secundarios y -a (append) añade al usuario al grupo sin eliminarlo de sus otros grupos actuales.

sudo usermod -aG developers student1

Verifica de nuevo los grupos del usuario:

id student1

La salida incluye ahora el grupo developers:

uid=5001(student1) gid=5001(student1) groups=5001(student1),1002(developers)

¿Qué sucede si olvidas el parámetro -a? Vamos a crear otro grupo, testers, y añadiremos a student1 usando solo -G.

sudo groupadd testers
sudo usermod -G testers student1

Comprueba los grupos una vez más:

id student1
uid=5001(student1) gid=5001(student1) groups=5001(student1),1003(testers)

Observa que student1 ya no está en el grupo developers. Usar usermod -G sin -a reemplaza todos los grupos secundarios existentes por la nueva lista. Para que el usuario esté en ambos grupos, deberías listar todos los grupos (-G developers,testers) o usar el parámetro de anexar. Corrijamos esto volviendo a añadir a student1 al grupo developers correctamente.

sudo usermod -aG developers student1

Verifica el estado final. El usuario debería ser ahora miembro de ambos grupos.

id student1
uid=5001(student1) gid=5001(student1) groups=5001(student1),1003(testers),1002(developers)

Eliminar usuarios y sus datos con userdel y userdel -r

En este paso, aprenderás a eliminar permanentemente cuentas de usuario del sistema mediante el comando userdel. Verás la importante distinción entre simplemente borrar la información de la cuenta y borrar la cuenta junto con todos sus archivos asociados, como el directorio personal.

Primero, para demostrar ambos métodos de eliminación, vamos a crear un segundo usuario llamado student2.

sudo useradd -m student2

Ahora tienes dos usuarios con los que trabajar: student1 (de los pasos anteriores) y el nuevo student2.

Empecemos eliminando al usuario student1 sin ninguna opción especial. El comando userdel por defecto elimina las entradas del usuario de los archivos de cuentas del sistema como /etc/passwd y /etc/shadow, pero no elimina su directorio personal. Esto puede ser útil si necesitas archivar los datos del usuario antes de borrarlos por completo.

sudo userdel student1

Para confirmar que la cuenta de usuario ha desaparecido, intenta buscarla con grep en /etc/passwd.

grep ^student1 /etc/passwd

Este comando no producirá ninguna salida, lo que confirma que la entrada de la cuenta ha sido eliminada. Sin embargo, ¿qué pasa con su directorio personal? Comprobemos si /home/student1 todavía existe.

ls -ld /home/student1

Verás que el directorio sigue ahí, aunque el propietario se muestra ahora como un número (el antiguo UID del usuario) porque el sistema ya no puede asociar ese ID con un nombre de usuario.

drwxr-x--- 2 5001 5001 78 Jun 26 08:18 /home/student1

Ahora, eliminemos al usuario student2, pero esta vez usaremos el parámetro -r (remove). Esta opción le indica a userdel que elimine el directorio personal del usuario y su buzón de correo (mail spool), además de las entradas de su cuenta. Esta es una eliminación completa e irreversible.

sudo userdel -r student2

Es posible que veas un mensaje de advertencia indicando que no se encontró el buzón de correo, lo cual es normal ya que el usuario nunca recibió correos:

userdel: student2 mail spool (/var/mail/student2) not found

Esta advertencia no indica un error; simplemente significa que no había ningún archivo de buzón que borrar, lo cual es de esperar en un usuario recién creado.

Primero, verifica que la entrada de la cuenta haya desaparecido de /etc/passwd. Como antes, este comando no debería devolver nada.

grep ^student2 /etc/passwd

A continuación, y lo más importante, comprueba la existencia del directorio personal /home/student2.

ls -ld /home/student2

Esta vez, el comando fallará con un mensaje de error, demostrando que el directorio ha sido completamente eliminado junto con la cuenta de usuario.

ls: cannot access '/home/student2': No such file or directory

Has practicado con éxito ambos métodos para eliminar usuarios, lo que te otorga la flexibilidad de conservar o borrar permanentemente los datos de un usuario según sea necesario.

Resumen

En esta práctica de laboratorio, has aprendido los comandos fundamentales para administrar cuentas de usuario en un sistema Linux. Comenzaste creando un nuevo usuario con useradd -m, asegurando la creación de su directorio personal, y protegiste la cuenta estableciendo una contraseña con passwd. Practicaste el cambio entre usuarios usando tanto su como su -, comprendiendo la diferencia crítica entre un entorno de shell estándar y uno de inicio de sesión. También aprendiste a gestionar el acceso a las cuentas bloqueándolas y desbloqueándolas con las opciones -l y -u del comando passwd.

La práctica continuó con la modificación de atributos de usuarios existentes. Utilizaste chage para gestionar las políticas de caducidad de contraseñas y usermod para alterar la pertenencia a grupos de un usuario. Finalmente, exploraste el proceso de eliminación de usuarios del sistema, distinguiendo entre el comando userdel, que elimina la cuenta, y el comando userdel -r, que también borra el directorio personal y el buzón de correo para una limpieza total.