1. Concepto y arquitectura modular

El PAM (Pluggable Authentication Modules) es un mecanismo flexible y modular que permite integrar diferentes métodos de autenticación en GNU/Linux sin necesidad de modificar las aplicaciones.

Actúa como una capa intermedia entre las aplicaciones que requieren autenticación (login, sudo, sshd, passwd, etc.) y los módulos de autenticación que se pueden integrar dinámicamente.

1.1. Ventajas principales

  • Centraliza la autenticación de todos los servicios.

  • Evita modificar el código de las aplicaciones.

  • Permite usar distintos métodos (LDAP, biometría, tokens, 2FA…).

  • Facilita políticas de seguridad y control de acceso más detalladas.

1.2. Arquitectura general

images/pam_linuxjournal

Figura 1. Imagen de Linux Journal

Descripción del flujo general:

  1. La aplicación llama a la biblioteca libpam.

  2. PAM lee la configuración del servicio (por ejemplo /etc/pam.d/login).

  3. Carga los módulos definidos, en el orden especificado.

  4. Cada módulo devuelve éxito o error, y PAM decide el resultado final.

  5. La aplicación recibe una respuesta global (acceso concedido o denegado).

2. Tipos de módulos

Existen cuatro tipos principales de módulos PAM, cada uno correspondiente a una fase del proceso de autenticación: auth, account, password y session.

Tipo Cuándo se ejecuta Función principal Ejemplos de módulos

auth

Al iniciar sesión

Comprueba la identidad del usuario (contraseña, token, huella, etc.)

pam_unix.so, pam_faillock.so, pam_google_authenticator.so

account

Después de autenticar

Verifica si la cuenta puede usarse (vigencia, horario, terminal, etc.)

pam_unix.so, pam_access.so, pam_time.so

password

Al cambiar contraseñas

Controla la actualización y complejidad de contraseñas

pam_pwquality.so, pam_cracklib.so

session

Al iniciar/cerrar sesión

Ejecuta acciones al abrir o cerrar sesión (montar recursos, registrar accesos, aplicar límites)

pam_limits.so, pam_env.so, pam_lastlog.so

Cada tipo tiene su propia pila de módulos que se ejecuta de forma independiente.

3. Fases de ejecución del proceso PAM

Cuando un usuario intenta iniciar sesión en un sistema Linux, el mecanismo PAM (Pluggable Authentication Modules) se encarga de gestionar todo el proceso de autenticación.

PAM no realiza la autenticación por sí mismo, sino que coordina distintos módulos que verifican la identidad del usuario, comprueban el estado de su cuenta y preparan su sesión.

PAM evalúa las reglas en orden y por fases, pasando por cuatro etapas principales. Cada fase utiliza módulos específicos (auth, account, password, session) que cumplen funciones diferentes.

3.1. Ejemplo del proceso PAM cuando un usuario inicia sesión

Supongamos que un usuario llamado maria inicia sesión desde la terminal:

  1. auth. PAM verifica su nombre de usuario y contraseña (pam_unix.so). También comprueba si el sistema está en mantenimiento (pam_nologin.so).

  2. account. Revisa si la cuenta de maria está activa y no ha caducado (pam_unix.so). Si la contraseña está expirada, se pedirá un cambio.

  3. password. Si maria decide cambiar su contraseña, este módulo aplica las reglas de complejidad (pam_pwquality.so).

  4. session. Si la autenticación fue correcta, PAM crea la sesión, carga las variables de entorno (pam_env.so), muestra el mensaje del día (pam_motd.so) y registra el acceso (pam_lastlog.so).

4. Archivos de configuración de PAM

El funcionamiento de PAM se define mediante archivos de configuración que especifican qué módulos se ejecutan, en qué orden y cómo debe actuar el sistema ante el éxito o el fallo de cada uno.

Hay dos formatos principales para estos archivos:

  • /etc/pam.conf: Archivo de configuración global. Actualmente está en desuso.

  • /etc/pam.d/: Directorio que contiene un archivo de configuración por cada servicio. Es la forma utilizada en la mayoría de distribuciones modernas.

Ejemplo:

$ ls /etc/pam.d/
chfn      chsh            common-auth      common-session                 cron   newusers  passwd   runuser-l  su    sudo    vmtoolsd
chpasswd  common-account  common-password  common-session-noninteractive  login  other     runuser  sshd       su-l  sudo-i

Cada archivo contiene una serie de reglas, una por línea, con la siguiente estructura general:

tipo   control   módulo   [argumentos]

4.1. Elementos principales de una regla

Campo Descripción

tipo

Indica la fase del proceso de autenticación en la que se aplica la regla. Puede ser auth, account, password o session.

control

Determina la acción que realizará PAM según el resultado del módulo (éxito o fallo).

módulo

Especifica el nombre o la ruta del módulo que se ejecutará (por ejemplo, pam_unix.so, pam_nologin.so).

argumentos

Define los parámetros adicionales que modifican el comportamiento del módulo (por ejemplo, retry=3, use_authtok, debug).


4.2. El campo control. Cómo se evalúan las reglas

El campo control define cómo afecta el resultado de cada módulo al resultado final de la pila:

Control Significado Comportamiento

required

Obligatorio

Si falla, se sigue ejecutando el resto, pero el resultado global será fallo.

requisite

Obligatorio e inmediato

Si falla, se detiene la ejecución inmediatamente y se devuelve error.

sufficient

Suficiente

Si tiene éxito y no hay fallos previos, PAM considera la pila exitosa y no ejecuta los módulos siguientes.

optional

Opcional

Su éxito o fallo no afecta el resultado global, salvo que sea el único módulo del tipo.

5. Ejemplo de evaluación de reglas

5.1. Versión simplificada del archivo /etc/pam.d/login

A continuación se muestra un ejemplo simplificado del archivo de configuración de PAM utilizado por el servicio login. Este archivo define los módulos que se ejecutarán durante el proceso de autenticación local del sistema:

auth required   pam_securetty.so
auth requisite  pam_nologin.so
auth sufficient pam_unix.so
auth required   pam_deny.so

5.1.1. Evaluación paso a paso

  1. pam_securetty.so

    • Comprueba si el usuario root intenta iniciar sesión desde una terminal segura (definida en /etc/securetty).

    • Si la verificación falla, el acceso no será finalmente concedido, pero PAM seguirá evaluando el resto de las reglas, ya que el control es de tipo required.

  2. pam_nologin.so

    • Verifica si existe el archivo /etc/nologin.

    • Si el archivo está presente, el acceso se bloquea inmediatamente para todos los usuarios excepto root y el proceso de autenticación se detiene, porque el control es requisite.

    • Si el archivo no existe, la evaluación continúa con la siguiente regla.

  3. pam_unix.so

    • Valida el nombre de usuario y la contraseña frente a los datos almacenados en /etc/passwd y /etc/shadow.

    • Si la autenticación tiene éxito y no se han producido fallos previos en módulos required, el control sufficient hace que PAM detenga la pila con éxito (ya no se evalúan más módulos).

    • Si la autenticación falla, el proceso continúa hacia la siguiente regla.

  4. pam_deny.so

    • Este módulo falla siempre, y su propósito es denegar el acceso en caso de que todos los módulos anteriores no hayan autenticado correctamente al usuario.

    • Actúa como una medida de seguridad final para garantizar que no se conceda acceso de manera accidental.

6. Módulos más comunes

A continuación, se presentan dos tablas con algunos de los módulos PAM más utilizados. La primera tabla muestra módulos para realizar autenticación y administración general, mientras que la segunda tabla muestra módulos más avanzados para realizar hardening del sistema.

6.1. Nivel Básico: Módulos para autenticación y administración general

Módulo Tipo Función principal / Propósito de seguridad Archivo o contexto habitual

pam_unix.so

auth / account / password / session

Implementa la autenticación clásica UNIX validando contraseñas en /etc/passwd y /etc/shadow.

/etc/pam.d/common-auth, /etc/pam.d/common-password

pam_pwquality.so

password

Refuerza la fortaleza de contraseñas (longitud, complejidad, diccionarios). Sustituye a pam_cracklib.so.

/etc/security/pwquality.conf

pam_nologin.so

auth / account

Bloquea el acceso a usuarios normales si existe /etc/nologin (modo mantenimiento).

/etc/pam.d/login, /etc/nologin

pam_securetty.so

auth

Restringe el acceso de root solo a terminales seguras definidas en /etc/securetty.

/etc/pam.d/login, /etc/securetty

pam_limits.so

session

Aplica límites de uso de recursos (CPU, procesos, memoria) según /etc/security/limits.conf.

/etc/pam.d/common-session

pam_env.so

session

Carga variables de entorno del usuario desde /etc/environment o /etc/security/pam_env.conf.

/etc/pam.d/common-session

pam_lastlog.so

session

Muestra el último inicio de sesión y actualiza el registro lastlog.

/etc/pam.d/login

pam_motd.so

session

Muestra el “mensaje del día” (MOTD) al iniciar sesión.

/etc/pam.d/login, /etc/pam.d/sshd

pam_deny.so

auth / account / password / session

Deniega siempre el acceso; se usa al final de las pilas como medida de seguridad.

Al final de cualquier pila de reglas

pam_permit.so

auth / account / password / session

Siempre concede acceso; se usa solo para pruebas o configuraciones por defecto.

Configuraciones básicas del sistema


6.2. Nivel Avanzado: Módulos para hardening del sistema

Módulo Tipo Función principal / Propósito de seguridad Archivo o contexto habitual

pam_faillock.so

auth / account

Previene ataques de fuerza bruta bloqueando cuentas tras varios intentos fallidos.

/etc/pam.d/common-auth, /etc/security/faillock.conf

pam_google_authenticator.so

auth

Implementa autenticación multifactor (2FA) basada en códigos TOTP.

/etc/pam.d/sshd

pam_access.so

account

Controla el acceso según usuario, grupo, TTY o dirección IP (según /etc/security/access.conf).

/etc/pam.d/login, /etc/security/access.conf

pam_time.so

account

Restringe el acceso de usuarios en función del horario o día de la semana.

/etc/pam.d/login, /etc/security/time.conf

pam_selinux.so

session

Configura el contexto de seguridad de SELinux al iniciar sesión.

/etc/pam.d/login, /etc/pam.d/sshd

pam_mkhomedir.so

session

Crea automáticamente el directorio /home/usuario si no existe (útil con LDAP/NIS).

/etc/pam.d/common-session

pam_loginuid.so

session

Asigna un identificador único de sesión, útil para auditoría y trazabilidad.

/etc/pam.d/login, /etc/pam.d/sshd

pam_systemd.so

session

Integra la sesión del usuario con systemd-logind para una gestión moderna de sesiones.

/etc/pam.d/common-session

pam_keyinit.so

session

Crea un nuevo keyring de sesión del kernel para almacenamiento seguro de claves o tokens.

/etc/pam.d/common-session

pam_access.so

account

Refuerza las políticas de acceso combinando restricciones por IP, grupo o usuario.

/etc/security/access.conf

7. Depuración y análisis

La depuración en PAM permite analizar el flujo de ejecución de los módulos y detectar posibles errores de autenticación o configuración.

Es una herramienta muy útil durante tareas de auditoría o bastionado de sistemas.

Para ver cómo se ejecutan los módulos, se puede activar el modo debug en la línea correspondiente del archivo PAM.

Ejemplo:

auth required pam_unix.so debug

Con esta opción, el módulo registrará información adicional sobre cada paso del proceso de autenticación (inicio, verificación, resultado, errores, etc.).

Los mensajes generados por PAM se almacenan en los registros del sistema, que pueden consultarse con el comando:

sudo tail -f /var/log/auth.log

o con el comando:

sudo journalctl -xe | grep pam

Las opciones -xe en journalctl permiten ver mensajes detallados y de error relacionados con PAM.

-x: Muestra explicaciones adicionales para los mensajes.

-e: Salta al final del registro para ver los mensajes más recientes.

8. Integración de PAM con políticas de seguridad

PAM permite implementar políticas de seguridad avanzadas que refuerzan la autenticación y reducen riesgos:

Política de seguridad Módulo / Archivo Descripción

Bloqueo tras intentos fallidos

pam_faillock.so

Bloquea temporalmente la cuenta después de varios intentos fallidos.

Contraseñas seguras

pam_pwquality.so o pam_cracklib.so

Exige contraseñas con longitud, mezcla de caracteres y sin coincidencias con diccionarios.

Expiración de contraseñas

/etc/login.defs, chage

Define la validez y caducidad de las contraseñas.

Restricciones de horario o terminal

pam_time.so, pam_securetty.so

Limita accesos según hora o dispositivo.

Límites de recursos

pam_limits.so

Controla el uso de CPU, procesos o memoria por usuario.

Segundo factor de autenticación (2FA)

pam_google_authenticator.so

Añade verificación adicional mediante códigos TOTP.

Estas políticas suelen combinarse dentro de los archivos comunes (/etc/pam.d/common-auth, common-password, etc.) para aplicarse a múltiples servicios del sistema.

9. /etc/nologin y control de mantenimiento

El archivo /etc/nologin es un mecanismo que permite bloquear temporalmente el acceso de los usuarios normales. Cuando este archivo existe, el módulo pam_nologin.so deniega el acceso a todos los usuarios excepto al superusuario root, mostrando el contenido del archivo como mensaje informativo.

Ejemplo de uso:

echo "El sistema está en mantenimiento. Inténtelo más tarde." | sudo tee /etc/nologin > /dev/null

Para reactivar los logins:

sudo rm /etc/nologin

Este mecanismo se utiliza habitualmente durante tareas de mantenimiento o reinicios planificados.

10. Buenas prácticas de seguridad con PAM

  1. Restringir accesos de root a terminales seguras mediante pam_securetty.so.

  2. Bloquear cuentas tras varios intentos fallidos con pam_faillock.so.

  3. Evitar contraseñas débiles con pam_pwquality.so o pam_cracklib.so.

  4. Aplicar límites de recursos a usuarios con pam_limits.so.

  5. Implementar autenticación multifactor (2FA) en servicios críticos (sshd, sudo).

  6. Auditar accesos con pam_lastlog.so y revisar /var/log/auth.log.

  7. Proteger archivos sensibles de PAM con permisos adecuados (chmod 644, propiedad root).

  8. Probar la configuración antes de aplicarla globalmente (para evitar bloqueos).

11. Bastionado del sistema PAM en Ubuntu según las recomendaciones del CIS

11.1. ¿Qué es el CIS?

El CIS (Center for Internet Security) es una organización sin fines de lucro que proporciona directrices y mejores prácticas para la seguridad informática.

11.2. ¿Qué son los CIS Benchmarks?

Los CIS Benchmarks son conjuntos de mejores prácticas de seguridad para sistemas y aplicaciones. Estos benchmarks son desarrollados mediante un consenso entre expertos en seguridad y son utilizados por organizaciones para evaluar y mejorar su postura de seguridad.

11.3. Bastionado de PAM según el CIS Benchmark para Ubuntu Linux 24.04

Consulte la guía oficial del CIS Benchmark for Ubuntu Linux 24.04 para obtener recomendaciones detalladas sobre el bastionado de PAM en sistemas Ubuntu.

12. Ejercicios prácticos

Ejercicio

1

Aplicación Python con autenticación PAM

2

Configuración de bloqueo de usuarios con pam_faillock.so

3

Política de contraseñas con pam_cracklib y pam_pwquality

4

Habilitar 2FA con Google Authenticator

12.1. Ejercicio 1. Crea una aplicación en Python que utilice PAM para autenticación

En esta práctica tendrá que desarrollar una aplicación sencilla en Python que integre la autenticación del sistema mediante PAM (Pluggable Authentication Modules), permitiendo validar usuarios y contraseñas del sistema Linux de forma segura.

En esta unidad hemos visto que PAM (Pluggable Authentication Modules) es una capa de autenticación modular que permite a las aplicaciones usar distintos métodos de validación (contraseña, biometría, 2FA, etc.) sin necesidad de modificar su código.

El paquete python-pam actúa como interfaz entre Python y la biblioteca PAM del sistema, permitiendo autenticar usuarios directamente contra la configuración definida en /etc/pam.d/.

Paso 1. Crea un entorno virtual de Python

En primer lugar, asegúrate de tener instalado el paquete python3-venv para crear entornos virtuales en Python:

sudo apt install python3-venv

Luego, crea un entorno virtual y actívalo:

python3 -m venv venv
source venv/bin/activate

Paso 2. Instala las dependencias necesarias

Instala las librerías requeridas para usar PAM desde Python:

pip install python-pam
pip install six

Paso 3. Crea el script de Python

Crea el archivo app.py con el siguiente contenido:

#!/usr/bin/env python3
import pam
import getpass

def autenticar_usuario():
    p = pam.pam()
    usuario = input("Usuario: ")
    password = getpass.getpass("Contraseña: ")  # El texto no se muestra al escribir

    if p.authenticate(usuario, password):
        print(f"Autenticación correcta. Bienvenido, {usuario}.")
    else:
        print("Error de autenticación. Usuario o contraseña incorrectos.")

if __name__ == "__main__":
    autenticar_usuario()

Paso 4. Ejecuta la aplicación

python app.py

Verifica que el programa reconoce las credenciales del sistema y no acepta contraseñas incorrectas.

12.2. Ejercicio 2: Configuración de bloqueo de usuarios con pam_faillock.so

En esta práctica vamos a implementar una política de seguridad en el sistema GNU/Linux mediante el módulo pam_faillock.so, de forma que:

  • Las cuentas de usuario se bloqueen automáticamente tras 5 intentos fallidos de autenticación consecutivos.

  • El bloqueo tenga una duración de 15 minutos (900 segundos).

  • Solo el administrador (root) pueda desbloquear antes de ese tiempo.

El módulo pam_faillock.so forma parte del sistema PAM (Pluggable Authentication Modules) y se utiliza para:

  • Registrar intentos fallidos de autenticación.

  • Bloquear usuarios que superen un número máximo de intentos.

  • Evitar ataques de fuerza bruta o diccionario.

Los bloqueos se registran en el directorio: /var/run/faillock/.

Paso 1. Instalar el paquete necesario

Comprueba que el módulo PAM está instalado:

sudo apt install libpam-modules -y

Paso 2. Hacer copia de seguridad de los archivos PAM

Antes de modificar los archivos, es una buena práctica guardar una copia:

sudo cp /etc/pam.d/common-auth /etc/pam.d/common-auth.bak
sudo cp /etc/pam.d/common-account /etc/pam.d/common-account.bak

Paso 3. Configurar el archivo /etc/pam.d/common-auth

Edita el archivo con privilegios de root:

sudo nano /etc/pam.d/common-auth

Añade las siguientes líneas al principio del archivo, antes de cualquier otra regla auth:

auth required pam_faillock.so preauth silent audit deny=5 unlock_time=900
auth [success=1 default=bad] pam_unix.so
auth [default=die] pam_faillock.so authfail audit deny=5 unlock_time=900

La primera línea se ejecuta antes de pedir la contraseña, en esta línea PAM revisa si el usuario está bloqueado. Si lo está, deniega el acceso inmediatamente sin perdir la contraseña.

Los parámetros utilizados en la primera línea son:

Parámetro Significado

auth

Indica que esta regla pertenece a la fase de autenticación.

required

Si este módulo falla, el resultado global será fallo (aunque se sigan ejecutando los demás).

pam_faillock.so

Módulo que gestiona los intentos fallidos de login.

preauth

Comprueba si el usuario ya está bloqueado antes de autenticarlo.

silent

No muestra mensajes adicionales al usuario.

audit

Envía registros de auditoría al sistema (/var/log/auth.log o journalctl).

deny=5

Bloquea la cuenta tras 5 intentos fallidos consecutivos.

unlock_time=900

Desbloquea automáticamente después de 900 segundos (15 minutos).

La segunda línea se ejecuta el módulo clásico pam_unix.so, que valida la contraseña del usuario frente al archivo /etc/shadow.

Los parámetros utilizados en la segunda línea son:

Parámetro Significado

success=1

Si la autenticación tiene éxito, se salta una línea, es decir, pasa a la siguiente regla después de la siguiente.

default=bad

Si la autenticación falla, se marca el resultado como fallido.

La tercera línea se ejecuta si la autenticación ha fallado. Registra el intento fallido y, si se alcanza el límite, bloquea la cuenta.

Los parámetros utilizados en la tercera línea son:

Parámetro Significado

authfail

Indica que esta ejecución se produce tras un intento fallido.

audit

Registra el intento fallido en los logs.

deny=5

Bloquea la cuenta tras 5 intentos consecutivos fallidos.

unlock_time=900

Desbloquea después de 15 minutos.

[default=die]

Si el módulo falla, se detiene la pila de autenticación inmediatamente.

Paso 4. Configurar el archivo /etc/pam.d/common-account

Edita el archivo /etc/pam.d/common-account y asegúrate de incluir la siguiente línea al principio del archivo:

account required pam_faillock.so

Esta línea garantiza que se compruebe el estado de bloqueo del usuario antes de permitir el acceso.

Paso 5. Crear un usuario de prueba

Crea un usuario normal para probar la configuración:

sudo adduser prueba

Paso 6. Probar el bloqueo de cuenta

Inicia sesión con el usuario creado:

su - prueba

Introduce una contraseña incorrecta 5 veces seguidas y en el sexto intento deberías ver un mensaje indicando que la cuenta está bloqueada.

Puede ejecutar el comando journalctl -f en otra terminal para ver los mensajes de PAM en tiempo real.

Paso 7. Verificar el bloqueo

Consulta la información del bloqueo:

sudo faillock --user prueba

Paso 8. Desbloquear manualmente al usuario

Si necesitas desbloquear al usuario antes de los 15 minutos puedes ejecutar este comando:

sudo faillock --user prueba --reset

Paso 9. Revisar los archivos de log del sistema

Para analizar los eventos generados por PAM puede ejecutar el comando:

sudo grep pam_faillock /var/log/auth.log

O bien:

sudo journalctl -f | grep pam_faillock

Cuestiones para reflexionar

  1. ¿Qué ocurre si cambias unlock_time=0?

  2. ¿Dónde se almacenan los archivos de bloqueo de pam_faillock?

  3. ¿Qué ventajas tiene usar este módulo frente a herramientas externas como fail2ban?


12.3. Ejercicio 3. Definición y aplicación de la política de contraseñas con pam_pwquality

En esta práctica vamos a configurar el módulo pam_pwquality.so para exigir contraseñas con los siguientes requisitos mínimos:

  • Longitud mínima de 12 caracteres.

  • Deben incluir mayúsculas, minúsculas y símbolos.

  • Rechazar contraseñas débiles o demasiado similares a las anteriores.

El módulo pam_pwquality.so, que sustituye al antiguo pam_cracklib.so, verifica la fortaleza de las contraseñas cuando un usuario las crea o modifica. Forma parte de la fase password del sistema PAM.

El archivo principal de configuración de este módulo se encuentra en la ruta:

/etc/security/pwquality.conf

La función principal de pam_pwquality.so es:

  • Evalúa la contraseña según longitud, tipos de caracteres y diccionarios.

  • Devuelve un error si la contraseña no cumple las reglas establecidas.

Paso 1. Instalar el paquete necesario

Asegúrate de tener instalado el paquete correspondiente:

sudo apt install libpam-pwquality -y

Paso 2. Editar el archivo /etc/pam.d/common-password

Abre el archivo con privilegios de administrador:

sudo nano /etc/pam.d/common-password

Busca una línea similar a esta:

password requisite pam_pwquality.so retry=3

Tenga en cuenta que pueda variar ligeramente según la distribución o versión de Linux.

Si no existe, añádela al principio del bloque de contraseñas, justo antes de pam_unix.so:

password requisite pam_pwquality.so retry=3
password [success=1 default=ignore] pam_unix.so obscure use_authtok try_first_pass sha512

Los parámetros utilizados en la línea que hemos añadido son:

Elemento Descripción

password

Indica que la regla pertenece al módulo de gestión de contraseñas dentro de PAM.

requisite

Si la verificación falla, PAM aborta el cambio de contraseña inmediatamente.

pam_pwquality.so

Módulo que verifica la complejidad y fortaleza de las contraseñas nuevas.

retry=3

Permite hasta tres intentos de introducir una contraseña válida antes de cancelar el proceso.

Paso 3. Editar las reglas en /etc/security/pwquality.conf

Abre el archivo de configuración:

sudo nano /etc/security/pwquality.conf

Y añade o modifica las siguientes líneas:

# --- Política de contraseñas seguras ---
minlen = 12
minclass = 3
maxrepeat = 3
maxsequence = 3
usercheck = 1
enforce_for_root

A continuación se explica el significado de cada parámetro.

Parámetro Significado

minlen = 12

Longitud mínima de la contraseña.

minclass = 3

Exige al menos 3 clases de caracteres entre: mayúsculas, minúsculas, dígitos y símbolos.

maxrepeat = 3

No permite más de 3 caracteres idénticos consecutivos.

maxsequence = 3

Evita secuencias como “abcd” o “1234”.

usercheck = 1

Rechaza cualquier contraseña que contenga el nombre de usuario completo.

enforce_for_root

Aplica la política incluso al superusuario (root).

Paso 4. Cambia la contraseña de un usuario

Cambia la contraseña del usuario actual o de un usuario de prueba:

sudo passwd prueba

Intenta establecer contraseñas inseguras y observa los mensajes de error.

Después, prueba con una contraseña que cumpla los requisitos.

Paso 5. Verificación y logs

Los intentos de cambio de contraseña quedan registrados en:

/var/log/auth.log

Puedes revisar los fallos o rechazos con el comando:

sudo grep pwquality /var/log/auth.log

Cuestiones para reflexionar

  1. ¿Qué ocurre si estableces minclass = 4?

  2. ¿Por qué es útil la opción reject_username en entornos corporativos?

  3. ¿Debería aplicarse esta política también a root? ¿Por qué?

  4. ¿Dónde se almacena la configuración global de las políticas de contraseñas?


12.4. Ejercicio 4. Habilitar 2FA con Google Authenticator

Siga los pasos de este tutorial para configurar la autenticación de dos factores (2FA) en su servidor Ubuntu utilizando Google Authenticator y PAM:

Referencias:

13. Recursos

14. Licencia

Licencia CC BY-NC-ND 4.0

Esta página forma parte del curso Bastionado de Redes y Sistemas © 2026 de José Juan Sánchez Hernández y su contenido se distribuye bajo una licencia Creative Commons Attribution-NonCommercial-NoDerivatives 4.0 International.

Esta licencia exige que quienes reutilicen el material otorguen el debido crédito al autor. Permite copiar y redistribuir el material en cualquier medio o formato, únicamente en su forma original, y solo para fines no comerciales.