107.1 - Teoria: Gestionar cuentas de usuario y grupo

1. Archivos de base de datos de usuarios y grupos

/etc/passwd - Informacion de cuentas de usuario

Contiene la informacion basica de cada cuenta de usuario. Es legible por todos los usuarios.

Formato: 7 campos separados por :

usuario:x:UID:GID:GECOS:home:shell
CampoDescripcionEjemplo
1. usuarioNombre de loginsandra
2. passwordx indica que la contrasena esta en /etc/shadowx
3. UIDUser ID (identificador numerico)1000
4. GIDGroup ID del grupo primario1000
5. GECOSComentario (nombre completo, info contacto)Sandra Garcia
6. homeDirectorio home/home/sandra
7. shellShell de login/bin/bash

Ejemplo:

sandra:x:1000:1000:Sandra Garcia:/home/sandra:/bin/bash
root:x:0:0:root:/root:/bin/bash
nobody:x:65534:65534:nobody:/nonexistent:/usr/sbin/nologin

UIDs importantes:

  • 0 = root (superusuario)
  • 1-999 = usuarios del sistema (servicios, daemons)
  • 1000+ = usuarios regulares (en la mayoria de distribuciones)

/etc/shadow - Contrasenas cifradas y politicas de envejecimiento

Contiene las contrasenas cifradas y la informacion de envejecimiento. Solo legible por root.

Formato: 9 campos separados por :

usuario:password_hash:lastchg:min:max:warn:inactive:expire:reserved
CampoDescripcionEjemplo
1. usuarioNombre de loginsandra
2. password_hashContrasena cifrada$6$salt$hash...
3. lastchgDias desde 01/01/1970 del ultimo cambio19503
4. minDias minimos entre cambios de contrasena0
5. maxDias maximos de validez de la contrasena99999
6. warnDias de aviso antes de expirar7
7. inactiveDias de gracia tras expirar (cuenta inactiva)30
8. expireFecha de expiracion de la cuenta (dias desde epoch)19900
9. reservedReservado para uso futuro(vacio)

Valores especiales del campo password:

  • $6$... = Contrasena cifrada con SHA-512 (lo mas comun)
  • $5$... = SHA-256
  • $y$... = yescrypt (moderno)
  • $1$... = MD5 (obsoleto, inseguro)
  • ! o !! = Cuenta bloqueada (no se puede iniciar sesion con contrasena)
  • * = Cuenta deshabilitada
  • (vacio) = Sin contrasena (acceso sin contrasena)

/etc/group - Informacion de grupos

Contiene la informacion de los grupos del sistema.

Formato: 4 campos separados por :

grupo:password:GID:miembros
CampoDescripcionEjemplo
1. grupoNombre del grupodevelopers
2. passwordx o vacio (raramente usado)x
3. GIDGroup ID1001
4. miembrosLista de usuarios separados por comasandra,carlos,ana

Ejemplo:

root:x:0:
sandra:x:1000:
developers:x:1001:sandra,carlos
sudo:x:27:sandra

NOTA: El campo miembros NO lista a los usuarios cuyo grupo primario es este grupo (eso se define en /etc/passwd). Solo lista los miembros adicionales (grupo secundario).


/etc/gshadow - Contrasenas de grupos

Contiene contrasenas cifradas de grupos y administradores de grupo. Solo legible por root.

Formato: 4 campos separados por :

grupo:password:admins:miembros
CampoDescripcion
1. grupoNombre del grupo
2. passwordContrasena cifrada del grupo
3. adminsAdministradores del grupo (pueden agregar/eliminar miembros)
4. miembrosMiembros del grupo

2. Archivos de configuracion

/etc/login.defs

Archivo de configuracion que define los valores por defecto para la creacion de usuarios y politicas de contrasenas.

# Rango de UIDs para usuarios regulares
UID_MIN         1000
UID_MAX         60000
 
# Rango de GIDs para grupos regulares
GID_MIN         1000
GID_MAX         60000
 
# Politica de contrasenas por defecto
PASS_MAX_DAYS   99999    # Dias maximos de validez
PASS_MIN_DAYS   0        # Dias minimos entre cambios
PASS_WARN_AGE   7        # Dias de aviso antes de expirar
PASS_MIN_LEN    5        # Longitud minima (no siempre respetado)
 
# Mascara de permisos por defecto para nuevos archivos
UMASK           077
 
# Crear directorio home automaticamente
CREATE_HOME     yes
 
# Algoritmo de cifrado de contrasenas
ENCRYPT_METHOD  SHA512
 
# Crear grupo privado del usuario (User Private Group)
USERGROUPS_ENAB yes
 
# Directorio con archivos plantilla
SKEL            /etc/skel

/etc/skel/

Directorio que contiene los archivos plantilla que se copian al home de cada nuevo usuario creado con useradd -m.

ls -la /etc/skel/
.bash_logout
.bashrc
.profile

3. Gestion de usuarios

useradd - Crear usuarios

# Crear usuario con opciones comunes
useradd -m -d /home/sandra -s /bin/bash -c "Sandra Garcia" -g users -G sudo,developers sandra
 
# Opciones principales:
useradd [opciones] usuario
OpcionDescripcionEjemplo
-mCrear directorio home (copia /etc/skel/)useradd -m sandra
-d /rutaEspecificar directorio home-d /home/sandra
-s /shellShell de login-s /bin/bash
-g grupoGrupo primario-g users
-G grupo1,grupo2Grupos secundarios-G sudo,docker
-u UIDEspecificar UID-u 1500
-c "comentario"Campo GECOS (nombre completo)-c "Sandra Garcia"
-e YYYY-MM-DDFecha de expiracion de la cuenta-e 2026-12-31
-MNO crear directorio homeuseradd -M servicio
-rCrear usuario del sistema (UID < 1000)useradd -r daemon1

IMPORTANTE: useradd sin opciones no crea directorio home ni establece contrasena. Hay que usar -m para crear el home y luego passwd usuario para establecer la contrasena.

usermod - Modificar usuarios

usermod [opciones] usuario
OpcionDescripcionEjemplo
-l nuevo_nombreCambiar nombre de loginusermod -l nuevo_sandra sandra
-d /nueva/rutaCambiar directorio homeusermod -d /home/nuevo sandra
-d /nueva/ruta -mCambiar home Y mover contenidousermod -d /home/nuevo -m sandra
-s /shellCambiar shellusermod -s /bin/zsh sandra
-g grupoCambiar grupo primariousermod -g developers sandra
-G grupo1,grupo2Establecer grupos secundarios (REEMPLAZA)usermod -G sudo sandra
-aG grupoAGREGAR a grupo secundario (sin perder los otros)usermod -aG docker sandra
-LBloquear cuenta (agrega ! al password en shadow)usermod -L sandra
-UDesbloquear cuentausermod -U sandra
-e YYYY-MM-DDEstablecer fecha de expiracionusermod -e 2026-12-31 sandra
-c "comentario"Cambiar campo GECOSusermod -c "Sandra G." sandra
-u UIDCambiar UIDusermod -u 2000 sandra

CRITICO para el examen:

  • usermod -G grupo usuario —> REEMPLAZA todos los grupos secundarios
  • usermod -aG grupo usuario —> AGREGA al grupo sin perder los existentes
  • Siempre usar -aG (con a) para agregar a un grupo adicional

userdel - Eliminar usuarios

userdel sandra          # Elimina usuario pero CONSERVA su directorio home
userdel -r sandra       # Elimina usuario Y su directorio home y mail spool
OpcionDescripcion
(sin opciones)Elimina el usuario pero conserva /home/usuario
-rElimina usuario, directorio home y mail spool

4. Gestion de grupos

groupadd - Crear grupos

groupadd developers                # Crear grupo con GID automatico
groupadd -g 2000 proyecto          # Crear grupo con GID especifico
groupadd -r sistema                # Crear grupo del sistema (GID < 1000)

groupmod - Modificar grupos

groupmod -n nuevo_nombre viejo_nombre    # Renombrar grupo
groupmod -g 3000 grupo                   # Cambiar GID

groupdel - Eliminar grupos

groupdel developers    # Eliminar grupo

NOTA: No se puede eliminar un grupo que sea el grupo primario de algun usuario. Primero se debe cambiar el grupo primario de esos usuarios.


5. Gestion de contrasenas

passwd - Cambiar contrasena y opciones

passwd                    # Cambiar contrasena propia
passwd sandra             # Cambiar contrasena de otro usuario (solo root)
OpcionDescripcionEjemplo
-lBloquear cuenta (lock)passwd -l sandra
-uDesbloquear cuenta (unlock)passwd -u sandra
-eForzar cambio de contrasena en el proximo loginpasswd -e sandra
-dEliminar contrasena (cuenta sin contrasena)passwd -d sandra
-SMostrar estado de la contrasenapasswd -S sandra
-n diasDias minimos entre cambiospasswd -n 7 sandra
-x diasDias maximos de validezpasswd -x 90 sandra
-w diasDias de avisopasswd -w 14 sandra

Salida de passwd -S:

sandra P 05/26/2026 0 99999 7 -1
  • P = tiene contrasena, L = bloqueada, NP = sin contrasena

chage - Gestionar envejecimiento de contrasenas

chage (change age) gestiona las politicas de envejecimiento de contrasenas.

chage sandra              # Modo interactivo (pide cada campo)
OpcionDescripcionEjemplo
-lListar informacion de envejecimientochage -l sandra
-E YYYY-MM-DDFecha de expiracion de la cuentachage -E 2026-12-31 sandra
-E -1Eliminar expiracion de cuentachage -E -1 sandra
-M diasDias maximos de validez de contrasenachage -M 90 sandra
-m diasDias minimos entre cambioschage -m 7 sandra
-W diasDias de aviso antes de expirarchage -W 14 sandra
-I diasDias de inactividad tras expirarchage -I 30 sandra
-d YYYY-MM-DDFecha del ultimo cambio de contrasenachage -d 0 sandra

TRUCO: chage -d 0 sandra fuerza al usuario a cambiar la contrasena en el proximo inicio de sesion (establece la fecha del ultimo cambio en epoch 0).

Ejemplo de chage -l sandra:

Ultimo cambio de contrasena                     : may 26, 2026
La contrasena caduca                            : ago 24, 2026
Contrasena inactiva                             : sep 23, 2026
La cuenta caduca                                : dic 31, 2026
Numero minimo de dias entre cambios             : 7
Numero maximo de dias entre cambios             : 90
Dias de aviso antes de caducidad                : 14

6. Comandos para modificar informacion del usuario

chfn - Cambiar informacion GECOS (finger)

chfn (change finger) permite modificar el campo GECOS (campo 5) de /etc/passwd, que contiene informacion personal del usuario.

# Modo interactivo (pide cada campo)
chfn sandra
 
# Cambiar el nombre completo
chfn -f "Sandra Garcia Lopez" sandra
 
# Cambiar la oficina
chfn -o "Oficina 301" sandra
 
# Cambiar telefono de oficina
chfn -p "555-1234" sandra
 
# Cambiar telefono de casa
chfn -h "555-5678" sandra
 
# Un usuario normal puede cambiar su propia informacion
chfn

Formato del campo GECOS (subcampos separados por coma):

Nombre completo,Oficina,Telefono oficina,Telefono casa
Sandra Garcia Lopez,Oficina 301,555-1234,555-5678

chsh - Cambiar shell de login

chsh (change shell) permite cambiar el shell de login del usuario (campo 7 de /etc/passwd).

# Cambiar el shell de un usuario (como root)
chsh -s /bin/zsh sandra
 
# Cambiar el shell propio (usuario normal)
chsh -s /bin/bash
 
# Ver los shells validos disponibles
chsh -l
cat /etc/shells

/etc/shells - Lista de shells validos que se pueden asignar a un usuario. chsh solo permite asignar shells listados en este archivo.

# Contenido tipico de /etc/shells
/bin/sh
/bin/bash
/bin/zsh
/usr/bin/zsh
/usr/bin/fish

7. Comandos de consulta

id - Informacion de usuario y grupos

id                    # Informacion del usuario actual
id sandra             # Informacion de un usuario especifico
id -u sandra          # Solo el UID
id -g sandra          # Solo el GID primario
id -G sandra          # Todos los GIDs (primario + secundarios)
id -Gn sandra         # Todos los nombres de grupos

Ejemplo:

$ id sandra
uid=1000(sandra) gid=1000(sandra) groups=1000(sandra),27(sudo),999(docker)

getent - Consultar bases de datos del sistema

getent consulta las bases de datos NSS (Name Service Switch), incluyendo archivos locales, LDAP, NIS, etc.

getent passwd sandra       # Buscar usuario en passwd
getent passwd              # Listar todos los usuarios
getent group developers    # Buscar grupo
getent group               # Listar todos los grupos
getent shadow sandra       # Buscar en shadow (requiere permisos)

Ventaja sobre cat /etc/passwd: getent consulta todas las fuentes configuradas en /etc/nsswitch.conf, incluyendo LDAP, NIS/NIS+ y otras bases de datos remotas. Por ello es la forma recomendada de consultar usuarios y grupos en entornos empresariales.

newgrp - Cambiar grupo primario temporalmente

newgrp developers     # Cambia el grupo primario actual a "developers"
  • Inicia un nuevo shell con el grupo primario cambiado
  • El usuario debe pertenecer al grupo o conocer la contrasena del grupo
  • Al salir del shell (exit), se vuelve al grupo primario original

gpasswd - Administrar grupos

gpasswd grupo                    # Establecer contrasena del grupo
gpasswd -a usuario grupo         # Agregar usuario al grupo
gpasswd -d usuario grupo         # Eliminar usuario del grupo
gpasswd -A usuario grupo         # Hacer a usuario administrador del grupo
gpasswd -r grupo                 # Eliminar contrasena del grupo
gpasswd -M user1,user2 grupo     # Establecer la lista de miembros

8. Flujo completo: crear un usuario

# 1. Crear usuario con home directory
useradd -m -s /bin/bash -c "Sandra Garcia" -G sudo,developers sandra
 
# 2. Establecer contrasena
passwd sandra
 
# 3. Configurar politicas de contrasena
chage -M 90 -m 7 -W 14 sandra
 
# 4. Verificar
id sandra
getent passwd sandra
chage -l sandra

Resumen para el examen

  1. /etc/passwd tiene 7 campos: usuario:x:UID:GID:GECOS:home:shell
  2. /etc/shadow tiene 9 campos con contrasena cifrada y politicas de envejecimiento
  3. /etc/group tiene 4 campos: grupo:x:GID:miembros
  4. usermod -aG grupo usuario agrega a grupo; -G sin -a REEMPLAZA grupos
  5. userdel -r elimina usuario Y su home; sin -r conserva el home
  6. passwd -l bloquea cuenta; passwd -e fuerza cambio de contrasena
  7. chage -l lista info de envejecimiento; chage -d 0 fuerza cambio al proximo login
  8. getent consulta bases de datos NSS (incluye LDAP, NIS via /etc/nsswitch.conf)
  9. /etc/login.defs define UID_MIN/MAX, PASS_MAX_DAYS, PASS_MIN_DAYS, PASS_WARN_AGE, UMASK, CREATE_HOME, USERGROUPS_ENAB
  10. chfn cambia la informacion GECOS (finger); chsh cambia el shell de login
  11. newgrp cambia grupo primario temporalmente
  12. UID 0 = root; 1-999 = sistema; 1000+ = usuarios regulares

Trampas del examen

Errores comunes y distinciones criticas que LPI suele evaluar en este subtema:

  • usermod -G vs usermod -aGusermod -G grupo usuario REEMPLAZA todos los grupos secundarios (el usuario pierde los anteriores); usermod -aG grupo usuario AGREGA al grupo sin perder los existentes. Olvidar la -a es una de las trampas mas clasicas del examen
  • El campo 4 de /etc/group NO lista a los usuarios con ese grupo primario — El campo miembros de /etc/group solo lista miembros secundarios. Los usuarios cuyo grupo primario es ese grupo se definen en /etc/passwd (campo GID). El examen explota esta confusion
  • useradd sin -m NO crea directorio home — A diferencia de adduser (interactivo en Debian), useradd es el comando de bajo nivel que requiere -m explicitamente para crear el home. Sin -m, la cuenta se crea sin directorio home
  • userdel sin -r CONSERVA el directorio homeuserdel usuario elimina la cuenta pero deja /home/usuario intacto. Solo userdel -r elimina tambien el home y el mail spool
  • passwd -l vs passwd -d-l (lock) bloquea la cuenta agregando ! al hash; -d (delete) ELIMINA la contrasena permitiendo acceso SIN contrasena. Son opuestos en terminos de seguridad
  • chage -d 0 vs passwd -e — Ambos fuerzan el cambio de contrasena en el proximo login, pero chage -d 0 establece la fecha del ultimo cambio en epoch 0, mientras que passwd -e expira la contrasena inmediatamente. El efecto practico es el mismo
  • 7 campos en /etc/passwd, 9 en /etc/shadow, 4 en /etc/group — El examen puede preguntar el numero exacto de campos de cada archivo o pedir que identifiques un campo por su posicion. Memorizar los formatos es critico
  • ! y !! en /etc/shadow significan cuenta bloqueada — Un ! delante del hash (como !$6$...) indica bloqueo con passwd -l. Un !! significa que la cuenta nunca tuvo contrasena establecida. * significa login deshabilitado permanentemente
  • getent consulta TODAS las fuentes NSS, no solo archivos localesgetent passwd usuario busca en /etc/passwd, LDAP, NIS y cualquier fuente configurada en /etc/nsswitch.conf. Es la forma correcta de consultar usuarios en entornos empresariales, no grep /etc/passwd
  • /etc/login.defs define valores POR DEFECTO, no limites absolutos — Los valores como UID_MIN, PASS_MAX_DAYS o UMASK en /etc/login.defs se aplican solo cuando no se especifican explicitamente en el comando. useradd -u 500 ignora UID_MIN