Usuarios y grupos (RSA-09)

La ruta del SysAdmin 15 de jul. de 2025

Aquí aprenderás cómo crear, modificar y gestionar usuarios en el sistema, definir grupos, asignar permisos y mantener el control sobre quién puede hacer qué.


Comando: useradd

Sintaxis Básica

Crea un nuevo usuario en el sistema.

Ejemplos:

# useradd juan
# useradd -m luisgulo     # Crea carpeta personal

Sintaxis Avanzada

Permite definir shell, grupos, carpeta personalizada o UID específico.

Ejemplos:

# useradd -m -s /bin/bash -G sudo luisgulo
# useradd -d /srv/usuarios/julio julio
# useradd -u 1501 pedro

Comando: passwd

Sintaxis Básica

Asigna o cambia la contraseña de un usuario.

Ejemplos:

# passwd luisgulo

Sintaxis Avanzada

Puede usarse para bloquear usuarios o forzar cambio en el próximo inicio de sesión.

Ejemplos:

# passwd -l luisgulo       # Bloquear usuario
# passwd -e juan       # Expira la contraseña (forzar cambio)

Comando: usermod

Sintaxis Básica

Modifica propiedades de un usuario existente.

Ejemplos:

# usermod -aG audio luisgulo     # Añadir usuario a grupo
# usermod -s /bin/zsh luisgulo   # Cambiar shell

Sintaxis Avanzada

Permite mover carpeta personal, cambiar UID o redefinir grupo principal.

Ejemplos:

# usermod -d /mnt/perfiles/luisgulo -m luisgulo
# usermod -u 2001 luisgulo
# usermod -g admin luisgulo

Comando: groupadd / groupmod / groupdel

Sintaxis Básica

Gestiona grupos de usuarios.

Ejemplos:

# groupadd desarrolladores
# groupmod -n devs desarrolladores     # Cambia nombre de grupo
# groupdel testers

Sintaxis Avanzada

Puede usarse con GID específico o gestionar múltiples grupos.

Ejemplos:

# groupadd -g 1050 auditores
# usermod -G sudo,auditores luisgulo

Comando: id / groups / whoami

Sintaxis Básica

Consulta la información de grupos y usuario actual.

Ejemplos:

$ id
$ groups luisgulo
$ whoami

Sintaxis Avanzada

Puede usarse en scripts para verificar permisos o filtrar por UID.

Ejemplos:

$ id -u
$ id -Gn | grep admins

Comando: deluser / userdel

Sintaxis Básica

Elimina usuarios del sistema.

Ejemplos:

# userdel juan

Sintaxis Avanzada

Permite eliminar carpeta personal y asociaciones con grupos.

Ejemplos:

# userdel -r pedro     # Elimina usuario y su home
# deluser luisgulo sudo    # Elimina usuario de un grupo

Comando: chage

Controla la vigencia de contraseñas y políticas de caducidad para cada usuario.

Sintaxis Básica

Muestra la información de caducidad actual:

# chage -l luisgulo

Sintaxis Avanzada

Permite forzar cambios, establecer fechas de expiración o modificar ciclos de cambio obligatorio:

# chage -E 2025-12-31 luisgulo        # Expira la cuenta en esa fecha
# chage -M 90 luisgulo                # Máximo de 90 días antes de cambiar contraseña
# chage -d 0 luisgulo                 # Forzar cambio al próximo inicio de sesión

Comando: loginctl

Permite consultar sesiones activas de usuarios en sistemas con systemd.

Sintaxis Básica

Ver qué sesiones están activas en el sistema:

$ loginctl list-users
$ loginctl list-sessions

Sintaxis Avanzada

Puedes inspeccionar detalles de una sesión, controlar permisos y habilitar servicios persistentes:

$ loginctl show-user luisgulo
$ loginctl session-status <ID>
# loginctl enable-linger luisgulo      # Permite que los servicios del usuario se ejecuten sin iniciar sesión gráfica

Comando: faillog

Muestra y gestiona bloqueos por múltiples intentos fallidos de inicio de sesión.

Sintaxis Básica

Consulta registros por usuario:

# faillog -u luisgulo
# faillog -a         # Muestra todos los usuarios

Sintaxis Avanzada

Puedes bloquear cuentas después de intentos fallidos o eliminar registros:

# faillog -m 3 -t 900 -u luisgulo      # Bloquea después de 3 intentos fallidos en 15 min
# faillog -r -u luisgulo              # Reinicia el contador de intentos
Importante: algunas configuraciones requieren que pam_tally o pam_faillock estén habilitados en tu archivo de PAM.

Vamos a ver dos temas adicionales:

  • Cómo combinar faillog con políticas del archivo login.defs
  • Cómo funcionan los archivos de configuración PAM y qué papel cumplen en el sistema

Integrar faillog con políticas del sistema: login.defs

El archivo /etc/login.defs define parámetros globales relacionados con el comportamiento de usuarios, contraseñas y sesiones.

Ejemplos relevantes:

FAILLOG_ENAB yes            # Habilita registro de intentos fallidos
FAIL_MAX 3                  # Número máximo de intentos antes de bloquear
FAIL_MIN 600                # Tiempo mínimo entre bloqueos (en segundos)
LOGIN_RETRIES 5             # Intentos permitidos antes de desconexión automática
LOGIN_TIMEOUT 60            # Tiempo para ingresar credenciales antes de cancelar login
PASS_MAX_DAYS 90            # Vida útil máxima de una contraseña
PASS_MIN_DAYS 0             # Días mínimos antes de permitir cambio
PASS_WARN_AGE 7             # Aviso de caducidad con anticipación

¿Cómo funciona junto a faillog?

Cuando estas políticas están activadas, el sistema registra intentos erróneos en /var/log/faillog. Puedes gestionarlos con:

# faillog -u luisgulo
# faillog -r -u luisgulo     # Reinicia el contador de fallos
# faillog -m 3 -t 900 -u luisgulo   # 3 fallos → bloqueo durante 15 minutos

El sistema se apoya en estas configuraciones, siempre que estén acompañadas por módulos PAM que gestionen los accesos correctamente.


Entender PAM de forma sencilla

PAM significa Pluggable Authentication Modules. Es el sistema que regula cómo se autentican los usuarios en Linux. Se compone de múltiples archivos en /etc/pam.d/ y cada programa (login, sudo, ssh…) tiene su propio archivo de configuración.

¿Cómo funciona PAM?

Cada archivo PAM contiene módulos organizados por tipo. Los tipos más comunes son:

TipoFunción
authAutenticación del usuario (contraseña, huella, etc.)
accountVerifica si el usuario puede acceder según restricciones
passwordRegula el cambio de contraseña
sessionEjecuta acciones al iniciar/cerrar sesión

Cada línea en estos archivos sigue este formato:

tipo  control  módulo  [opciones]

Ejemplo básico en /etc/pam.d/login:

auth    required    pam_unix.so
auth    optional    pam_faildelay.so delay=400000
account required    pam_unix.so
session required    pam_lastlog.so
  • pam_unix.so: autentica con el sistema local (usuarios y contraseñas)
  • pam_faildelay.so: aplica retraso ante fallos (protege de fuerza bruta)
  • pam_lastlog.so: muestra última conexión al usuario

Integración con bloqueos (faillog / pam_tally2 / pam_faillock)

Para que los bloqueos por intentos fallidos funcionen, debes tener módulos como:

auth required pam_faillock.so preauth
auth [success=1 default=bad] pam_unix.so
auth required pam_faillock.so authfail

También puedes usar pam_tally2:

auth required pam_tally2.so onerr=fail deny=3 unlock_time=900
Estos módulos pueden bloquear el acceso tras varios intentos erróneos y desbloquear automáticamente tras cierto tiempo.

Recomendaciones generales:

  • Usa login.defs para definir políticas globales de seguridad.
  • Complementa con faillog y módulos PAM si quieres endurecer el sistema.
  • Verifica que los archivos en /etc/pam.d/ estén configurados con sentido y no contradigan tus políticas.
  • Siempre prueba los cambios con sesiones alternativas antes de cerrar la principal (para evitar bloqueos).

Autenticación mediante lector de huellas dactilares

En sistemas Linux modernos, se puede configurar un lector de huellas digitales para iniciar sesión, ejecutar comandos con sudo, desbloquear la pantalla o iniciar sesión gráfica (GDM, LightDM, etc.). Esta autenticación biométrica puede convivir con métodos tradicionales de contraseña.

1. Requisitos previos

Hardware compatible

  • Lector USB o embebido reconocido por el kernel

Verifica con:

$ lsusb | grep -i fingerprint

Software necesario

  • Paquete principal: fprintd (daemon para huellas)
  • Backend: libpam-fprintd (para integración con PAM)
  • Herramientas: fprintd-enrollfprintd-verify

En sistemas Debian/Ubuntu:

# apt install fprintd libpam-fprintd

2. Registrar huella digital

Cada usuario debe registrar su propia huella:

$ fprintd-enroll

→ El sistema pedirá repetir el gesto de lectura varias veces.

Para verificarla manualmente:

$ fprintd-verify

3. Integración en consola (sudo, login, su)

Edita el archivo PAM correspondiente para incluir el módulo de huellas, pero conservando como método alternativo la contraseña.

Ejemplo en /etc/pam.d/sudo:

auth       sufficient   pam_fprintd.so
auth       required     pam_unix.so
  • sufficient: si la huella es válida, permite acceso
  • required: si la huella falla, solicita contraseña

Este orden garantiza que si no hay lector o falla la lectura, se ofrece el método clásico sin bloquear al usuario.

También puedes configurar en:

  • /etc/pam.d/login → para consola
  • /etc/pam.d/su → para cambios de usuario

4. Integración en entorno gráfico

Los principales gestores de sesión como GDM (GNOME)SDDM (KDE) y LightDM pueden usar PAM para autenticación biométrica.

Ejemplo para GDM:

Edita /etc/pam.d/gdm-password:

auth       sufficient   pam_fprintd.so
auth       required     pam_unix.so

Esto permitirá desbloquear la sesión con huella digital, pero solicitará contraseña si hay error o no se detecta el lector.


5. Comportamiento ante errores

Si el lector falla (huella mal colocada, lector desconectado, etc.), el módulo pam_fprintd.so puede configurarse para registrar fallos, aplicar retrasos o mostrar mensajes. El sistema seguirá con pam_unix.so como respaldo, garantizando acceso por contraseña tradicional.

Algunas opciones avanzadas:

auth   sufficient   pam_fprintd.so timeout=10 retry=3
  • timeout: segundos máximos para lectura
  • retry: número de intentos de huella antes de pasar a contraseña

6. Desbloqueo de pantalla

En sistemas que usan gnome-screensaver o gdm, la huella también puede desbloquear sesiones suspendidas si se configura correctamente en PAM.


Recomendaciones

  • Registra la huella desde el mismo usuario que la utilizará.
  • Asegúrate de tener acceso por contraseña en todo momento.
  • No dependas exclusivamente de la huella en sistemas remotos (no suelen transmitir datos biométricos).
  • Verifica la compatibilidad del lector (algunos modelos propietarios requieren drivers específicos).

Veamos una configuración sencilla y segura de PAM que habilita autenticación mediante huella digital con fallback a contraseña tradicional en tres contextos clave: consola (login), comandos privilegiados (sudo) y entorno gráfico (gdm-password).

El objetivo es que si la huella falla, el sistema permita seguir autenticando con la contraseña sin bloquear al usuario.

Configuración PAM para autenticación biométrica con respaldo por contraseña

Los siguientes ejemplos deben aplicarse cuidadosamente, siempre realizando pruebas en sesiones separadas o TTY paralelas. Se recomienda conservar métodos clásicos en todos los casos.


1. /etc/pam.d/login

Aplicación: inicio de sesión por consola (tty o login directo)

auth        sufficient    pam_fprintd.so
auth        required      pam_unix.so
account     required      pam_unix.so
password    required      pam_unix.so
session     required      pam_unix.so
session     optional      pam_lastlog.so
  • pam_fprintd.so: permite autenticación por huella.
  • Si falla la lectura o no se detecta lector, pam_unix.so solicita contraseña.
  • pam_lastlog.so: muestra la última conexión.

2. /etc/pam.d/sudo

Aplicación: ejecución de comandos privilegiados con sudo

auth        sufficient    pam_fprintd.so
auth        required      pam_unix.so
account     required      pam_unix.so
  • El usuario podrá autenticar mediante huella en sudo, y si no es posible, se solicita contraseña de forma tradicional.

3. /etc/pam.d/gdm-password

Aplicación: inicio de sesión en entorno gráfico (GNOME Display Manager)

auth        sufficient    pam_fprintd.so
auth        required      pam_unix.so
account     required      pam_unix.so
password    required      pam_unix.so
session     required      pam_unix.so
session     optional      pam_systemd.so
  • Garantiza que el inicio gráfico se pueda hacer con huella.
  • Si no es posible por error, el entorno ofrece entrada de contraseña.
  • pam_systemd.so: inicia correctamente el entorno gráfico vinculado al usuario.

Recomendaciones generales

  • Siempre prueba los cambios desde otra sesión (por ejemplo TTY2 con Ctrl+Alt+F2) antes de cerrar tu sesión principal.
  • Si tu sistema usa sudoers por grupos (ej. wheel o sudo), asegúrate de que los usuarios biométricos pertenezcan a ellos.
  • Verifica que el lector esté activo y visible en lsusb o fprintd-list.

Siempre pueden producirse imprevistos, con lo que debemos de disponer de un copia de seguridad de las configuraciones PAM antes de aplicar modificaciones.

Es fundamental tener esta copia por si ocurre algún error en autenticación (lo que podría bloquear el acceso al sistema).

Plantilla para respaldo y restauración de archivos PAM

Antes de modificar cualquier archivo en /etc/pam.d/, realiza una copia de seguridad como superusuario.

Crear respaldos

# cd /etc/pam.d/
# cp login login.bak
# cp sudo sudo.bak
# cp gdm-password gdm-password.bak

Puedes guardar estas copias en una ruta segura como /etc/pam-backup/ o tu carpeta de administrador.

Restaurar archivos PAM en caso de fallo

Si pierdes acceso por consola gráfica o por TTY, puedes recuperar la configuración desde una sesión root o desde un entorno de rescate:

# cp login.bak login
# cp sudo.bak sudo
# cp gdm-password.bak gdm-password

Comprobación rápida tras restaurar

# pam-auth-update --force
# systemctl restart gdm       # En sistemas con GNOME

Recomendaciones

  • Haz los cambios en sesiones paralelas (ejemplo: TTY2 con Ctrl+Alt+F2)
  • Verifica después de cada edición que puedas iniciar sesión normalmente
  • Mantén una cuenta alternativa con contraseña local (sin biometría)
  • Evita usar editores como nano o vim en remoto sin conexión persistente

Esto te asegura que cualquier error en el módulo biométrico (huella mal configurada, lector dañado, etc.) no impida tu acceso al sistema.

Etiquetas

Luis GuLo

🐧 SysAdmin GNU/Linux - 🐳 Docker - 🖥️ Bash Scripting - 🐪 Perl - 🐬 MySQL - 👥 Formador de TI - 👥 Formador de SysAdmin's - 💢 Ansible - ☁️ Cloud Computing - ❤️ Debian GNU/Linux