En Linux todo gira alrededor de los usuarios y los grupos. Cada proceso, cada archivo, cada recurso pertenece a un usuario y a un grupo. La correcta administración de estas entidades es esencial para la seguridad y la organización del sistema.
En este capítulo aprenderás a crear, modificar y eliminar usuarios y grupos, a gestionar sus contraseñas y políticas de envejecimiento, y a conceder privilegios administrativos mediante sudo, la herramienta que permite delegar tareas de superusuario de forma controlada.
Para el examen LFCS debes dominar estos comandos y archivos, así como entender el significado de cada campo en /etc/passwd, /etc/shadow, /etc/group y la sintaxis del archivo /etc/sudoers.
8.2. Los archivos de configuración de usuarios y grupos
8.2.1. /etc/passwd
Contiene la información de las cuentas de usuario. Cada línea tiene 7 campos separados por :
nombre:x:UID:GID:comentario:directorio_home:shell
| Campo | Significado |
|---|---|
| 1 | Nombre de usuario (login) |
| 2 | Contraseña encriptada (hoy aparece x; la real está en /etc/shadow) |
| 3 | UID (User ID). 0 para root, 1-999 para usuarios del sistema, 1000+ para usuarios normales |
| 4 | GID (Group ID) del grupo primario |
| 5 | Campo GECOS: comentario o nombre completo |
| 6 | Directorio home absoluto |
| 7 | Shell de inicio (ej. /bin/bash) |
Ejemplo:
juan:x:1001:1001:Juan Pérez:/home/juan:/bin/bash
8.2.2. /etc/shadow
Almacena las contraseñas cifradas y datos de caducidad. Solo root puede leerlo. Formato:
nombre:contraseña:último_cambio:min_días:max_días:aviso:inactividad:caducidad:reservado
contraseña: hash (si empieza con!o!!, la cuenta está bloqueada).último_cambio: días desde el 1/1/1970 en que se cambió la contraseña.min_días: días mínimos entre cambios.max_días: días máximos hasta que caduca la contraseña.aviso: días de antelación para avisar de caducidad.inactividad: días tras caducidad en que se bloquea la cuenta.caducidad: fecha absoluta (en días desde epoch) en que la cuenta expira.reservado: campo reservado.
Ejemplo:
juan:$6$sal...hash:19000:0:99999:7:::
8.2.3. /etc/group
Define los grupos del sistema:
nombre_grupo:x:GID:miembros
miembros: lista de nombres de usuario separados por comas (usuarios que pertenecen a este grupo como grupo secundario).
Ejemplo:
staff:x:1001:juan,ana
8.2.4. /etc/gshadow (opcional)
Similar a shadow pero para grupos: almacena contraseña de grupo (si se usa) y administradores. Generalmente no se edita a mano.
8.3. Comandos para gestionar usuarios
8.3.1. Crear usuarios: useradd
Sintaxis básica:
useradd [opciones] nombre_usuario
Opciones más utilizadas:
-m: crear directorio home (y copiar esqueleto desde/etc/skel).-d directorio: especificar directorio home (si no existe, no lo crea a menos que se añada-m).-s shell: shell de inicio (ej./bin/bash).-u UID: forzar un UID concreto.-g grupo: grupo primario (debe existir).-G grupos: grupos secundarios (separados por comas).-c "comentario": campo GECOS.-e fecha: fecha de expiración de la cuenta (YYYY-MM-DD).-f días: días de inactividad tras caducidad de contraseña.-k directorio_esqueleto: usar otro esqueleto distinto de/etc/skel.-r: crear usuario del sistema (UID bajo, sin home, etc.).
Ejemplos:
Crear un usuario normal con home y bash:
sudo useradd -m -s /bin/bash -c "María García" maria
Crear un usuario con grupo primario desarrolladores y secundario docker:
sudo useradd -m -g desarrolladores -G docker -s /bin/bash carlos
Crear un usuario de sistema (sin home, sin login):
sudo useradd -r -s /usr/sbin/nologin mi_servicio
Valores por defecto: se definen en /etc/default/useradd y /etc/login.defs. Puedes verlos con useradd -D.
Después de crear el usuario, es obligatorio asignar una contraseña:
sudo passwd maria
8.3.2. Modificar usuarios: usermod
Sintaxis similar a useradd pero para modificar cuentas existentes.
-l nuevo_nombre: cambiar nombre de login.-L: bloquear cuenta (añade!al inicio del hash de contraseña).-U: desbloquear.-aG grupo: añadir a grupo(s) secundario(s) sin eliminarlo de otros (importante usar-a).-d directorio -m: cambiar el home y mover el contenido.
Ejemplos:
Cambiar el shell de maria a zsh:
sudo usermod -s /usr/bin/zsh maria
Añadir a maria al grupo sudo (sin quitarla de otros grupos):
sudo usermod -aG sudo maria
Bloquear la cuenta de carlos:
sudo usermod -L carlos
Cambiar el nombre de usuario:
sudo usermod -l maria2 maria # ahora el login es maria2
8.3.3. Eliminar usuarios: userdel
sudo userdel nombre_usuario
-r: elimina también el directorio home y el buzón de correo.
Precaución: si el usuario es propietario de archivos fuera de su home, quedarán con UID huérfano.
8.3.4. Gestión de contraseñas: passwd
- Cambiar contraseña propia:
passwd(sin argumentos). - Cambiar contraseña de otro (root):
sudo passwd usuario. - Bloquear contraseña:
sudo passwd -l usuario(equivale ausermod -L). - Desbloquear:
sudo passwd -u usuario. - Forzar caducidad inmediata (obliga a cambiar en próximo login):
sudo passwd -e usuario. - Estado de la contraseña:
sudo passwd -S usuario(muestra LK si bloqueada, PS si tiene contraseña, NP si no tiene).
8.3.5. Políticas de envejecimiento: chage
Controla la caducidad y el ciclo de vida de las contraseñas.
-l usuario: mostrar información de caducidad.-M días: días máximos de vigencia de la contraseña.-m días: días mínimos entre cambios.-W días: días de aviso antes de caducidad.-I días: días de inactividad tras caducidad antes de bloquear cuenta.-E fecha: fecha de expiración de la cuenta (YYYY-MM-DD).-d 0: forzar cambio de contraseña en el siguiente login (similar apasswd -e).
Ejemplo: hacer que la contraseña de maria caduque a los 30 días y avisar con 7 días de antelación:
sudo chage -M 30 -W 7 maria
8.4. Gestión de grupos
8.4.1. Crear grupos: groupadd
sudo groupadd nombre_grupo
Opciones:
-g GID: especificar GID.-r: crear grupo de sistema (GID bajo).
8.4.2. Modificar grupos: groupmod
-g nuevo_GID: cambiar GID.-n nuevo_nombre: renombrar grupo.
sudo groupmod -n desarrolladores dev
8.4.3. Eliminar grupos: groupdel
sudo groupdel nombre_grupo
No se puede eliminar si es el grupo primario de algún usuario. Primero hay que reasignar a esos usuarios con usermod -g nuevo_grupo.
8.4.4. Añadir y quitar miembros de grupo: gpasswd
-a usuario: añadir usuario al grupo.-d usuario: eliminar usuario del grupo.-M usuario1,usuario2: establecer la lista exacta de miembros (sobrescribe).-A usuario_admin: asignar administrador del grupo.
sudo gpasswd -a maria staff
sudo gpasswd -d maria staff
También se puede editar directamente /etc/group o usar usermod -aG, pero gpasswd es la herramienta específica para grupos.
8.5. Cambio de identidad: su y sudo
8.5.1. su (switch user)
Permite cambiar a otro usuario. Si no se especifica, intenta cambiar a root.
su - usuario: inicia un shell de login (carga entorno completo).su usuario: inicia shell no interactivo (mantiene el entorno actual, peligroso).su -: cambiar a root con entorno.- Salir:
exitoCtrl+d.
su - maria
8.5.2. sudo (do as superuser)
Ejecuta un comando con privilegios de otro usuario (por defecto root). Es más seguro que compartir la contraseña de root.
Sintaxis:
sudo [opciones] comando
Ejemplos:
sudo apt update
sudo -u maria whoami # ejecutar como maria
La configuración de sudo se detalla a continuación.
8.6. Configuración de sudo: /etc/sudoers y visudo
El archivo /etc/sudoers define quién puede ejecutar qué comandos como qué usuario. Nunca se edita directamente, sino a través de visudo, que bloquea el archivo y verifica sintaxis antes de guardar.
sudo visudo
Por defecto usa vi (o nano si la distribución lo configuró). Para cambiar el editor: sudo EDITOR=nano visudo.
8.6.1. Sintaxis básica
usuario host = (usuario_destino) comandos
usuario: nombre de usuario,%grupopara un grupo, oALLpara todos.host: normalmenteALL(se refiere al nombre de la máquina donde aplica la regla).usuario_destino: entre paréntesis, el usuario al que se puede cambiar (opcional; si se omite, root). Puede serALL.comandos: lista de comandos separados por comas, con rutas absolutas. Se pueden usar alias (Cmnd_Alias).
Ejemplos:
Permitir a maria ejecutar cualquier comando como root:
maria ALL=(ALL:ALL) ALL
Permitir al grupo admin ejecutar cualquier comando:
%admin ALL=(ALL:ALL) ALL
Permitir a carlos reiniciar el sistema sin contraseña:
carlos ALL=(root) NOPASSWD: /sbin/reboot, /sbin/shutdown -r now
Usar alias de comandos:
Cmnd_Alias REINICIAR = /sbin/reboot, /sbin/shutdown -r now
carlos ALL=(root) NOPASSWD: REINICIAR
Permitir a juan ejecutar cualquier comando como el usuario www-data:
juan ALL=(www-data) ALL
Denegar comandos específicos (se evalúa en orden, la última regla gana):
juan ALL=(ALL) ALL
juan ALL=(ALL) !/usr/bin/passwd
8.6.2. Incluir archivos adicionales
En la mayoría de distribuciones, /etc/sudoers incluye el directorio /etc/sudoers.d/, donde se pueden colocar archivos de configuración adicionales. Esto es preferible para no modificar el archivo principal.
Ejemplo de archivo /etc/sudoers.d/maria:
maria ALL=(ALL:ALL) NOPASSWD:ALL
Se deben crear con permisos 0440 y propietario root:root.
8.6.3. Registro de uso
Los comandos ejecutados con sudo se registran en /var/log/auth.log (Debian/Ubuntu) o /var/log/secure (RHEL/CentOS). Pueden consultarse con journalctl _COMM=sudo.
8.7. Comandos de verificación y diagnóstico
id [usuario]: muestra UID, GID y grupos a los que pertenece el usuario.id maria uid=1001(maria) gid=1001(maria) groups=1001(maria),27(sudo)whoami: muestra el nombre del usuario actual.groups [usuario]: muestra los grupos a los que pertenece el usuario.getent passwd [usuario]: muestra la línea de/etc/passwdcorrespondiente.getent group [grupo]: muestra la línea de/etc/group.wowho: usuarios conectados.last: últimos logins.
8.8. Ejercicios prácticos
Creación y modificación de usuarios:
- Crea el usuario
pedrocon home/home/pedro, shell/bin/bashy grupo primariopedro. Asígnale una contraseña. - Añade a
pedroa los gruposstaffysudosin sacarlo de otros grupos. - Cambia el shell de
pedroa/bin/zsh. - Bloquea y desbloquea la cuenta de
pedro. - Haz que la contraseña de
pedroexpire en 15 días y avise con 3 días de antelación.
- Crea el usuario
Gestión de grupos:
- Crea el grupo
proyecto_xcon GID 1500. - Añade a
mariaypedroa ese grupo. - Cambia el nombre del grupo a
proyecto_alpha. - Elimina el grupo (si no es primario de nadie).
- Crea el grupo
Eliminar usuarios:
- Elimina a
pedroincluyendo su home y buzón.
- Elimina a
Configuración de sudo:
- Mediante
visudo, permite que el grupoproyecto_alphapueda ejecutarsystemctl restart nginxsin contraseña. - Crea un archivo en
/etc/sudoers.d/que conceda amariapermisos para ejecutar cualquier comando como el usuariobackup. - Verifica la sintaxis y prueba con
sudo -llos permisos demaria.
- Mediante
Comprobación y resolución de problemas:
- Usa
idygroupspara verificar los grupos de un usuario tras modificaciones. - Encuentra los archivos que pertenecen a un usuario eliminado (UID huérfano) con
find / -nouser.
- Usa
8.9. Resumen y consejos para LFCS
- Memoriza los campos de
/etc/passwdy/etc/shadow; suelen preguntar su significado. - Conoce las opciones clave de
useradd,usermodyuserdel. La diferencia entre-Gy-aGes un clásico. visudoes obligatorio; editar/etc/sudoersa mano puede romper el sistema.- Entiende la sintaxis de sudo:
(usuario),NOPASSWD:, alias (User_Alias,Cmnd_Alias). No es necesario ser experto en alias complejos, pero sí saber leer y escribir reglas simples. chageypasswd -eson útiles para forzar cambios de contraseña.- Recuerda que los usuarios del sistema (UID < 1000) se crean con
useradd -ry normalmente no tienen acceso interactivo. - La gestión de usuarios es la puerta de entrada a la seguridad. Practica hasta sentirte cómodo con la asignación de permisos mínimos necesarios.
Con estos conocimientos estarás preparado para manejar la base de usuarios y permisos sudo en cualquier sistema Linux. En el siguiente capítulo nos sumergiremos en la gestión de paquetes con las principales herramientas: Yum, RPM, Apt, Dpkg, Aptitude y Zypper.
Descubre más desde CIBERED
Suscríbete y recibe las últimas entradas en tu correo electrónico.
