Objetivo:
Comprender y configurar políticas robustas de seguridad para la gestión de contraseñas y el ciclo de vida de las cuentas de usuario en Linux, aplicando restricciones de complejidad mediante el módulo PAM pam_pwquality y controlando la caducidad y expiración de credenciales con la utilidad chage.
Escenario:
- Herramientas: Terminal Linux, comandos
chage,passwd, y ficheros de configuración de PAM (/etc/security/pwquality.conf) y políticas del sistema (/etc/login.defs). - Conceptos analizados: Complejidad y longitud mínima de contraseñas, caducidad de cuentas, días máximos de validez de las credenciales, avisos previos de expiración y bloqueo temporal tras intentos fallidos.
- Proceso clave: Configuración de una política estricta de contraseñas en el sistema, auditoría del estado de caducidad de un usuario e imposición de renovación obligatoria de credenciales.
Escenario Real: Endurecimiento de seguridad en servidores corporativos
Una auditoría de seguridad externa ha detectado que los empleados de la organización utilizan contraseñas débiles (como "123456" o nombres comunes) y que existen cuentas de antiguos trabajadores que nunca fueron desactivadas. Como administrador de sistemas, debes endurecer las políticas globales del servidor para exigir contraseñas complejas obligatorias y automatizar la caducidad y bloqueo de cuentas inactivas.
NOTA: Para realizar esta práctica de forma segura, trabajaremos sobre tu entorno de prácticas local, aplicando las políticas sobre un usuario de prueba creado específicamente para verificar el comportamiento de caducidad.
Instrucciones:
Fase 1: Configuración de la complejidad de contraseñas con pam_pwquality:
- Abrir el fichero de configuración global del módulo de calidad de contraseñas con privilegios de administrador:
sudo nano /etc/security/pwquality.conf - Descomentar y ajustar los parámetros clave para exigir una seguridad robusta:
minlen = 10 dcredit = -1 ucredit = -1 lcredit = -1 ocredit = -1 - Analizar el significado de cada parámetro (longitud mínima de 10 caracteres, obligación de incluir al menos un dígito, una mayúscula, una minúscula y un carácter especial). Guardar y cerrar el fichero.
- Probar la nueva política intentando cambiar la contraseña a un usuario de prueba por una débil (ej.
sudo passwd usuario_pruebay escribir "123456") para comprobar que el sistema la rechaza automáticamente.
Fase 2: Auditoría del ciclo de vida de las cuentas con chage:
- Crear un usuario de prueba para auditar sus políticas de caducidad:
sudo useradd -m -s /bin/bash auditor_testy asignarle contraseña inicial:sudo passwd auditor_test - Consultar los valores actuales de caducidad y políticas de cambio de contraseña del usuario ejecutando:
chage -l auditor_test - Analizar detalladamente la información devuelta: última fecha de cambio, caducidad de la contraseña, días mínimos entre cambios, días de aviso previo y fecha de desactivación de la cuenta.
Fase 3: Configuración y aplicación de restricciones de caducidad:
- Modificar la política para que el usuario de prueba esté obligado a cambiar su contraseña obligatoriamente cada 90 días:
sudo chage -M 90 auditor_test - Establecer un período de aviso previo de 7 días antes de que expire la contraseña:
sudo chage -W 7 auditor_test - Configurar un bloqueo de la cuenta 5 días después de que la contraseña haya caducado si el usuario no la ha renovado:
sudo chage -I 5 auditor_test - Forzar a que el usuario deba cambiar obligatoriamente su contraseña en el próximo inicio de sesión (poniendo la última fecha de cambio a 0):
sudo chage -d 0 auditor_test
Fase 4: Verificación del flujo de caducidad en el login:
- Intentar iniciar sesión o cambiar al usuario de prueba ejecutando:
su - auditor_test - Comprobar cómo el sistema detecta de forma inmediata que la contraseña ha expirado y te obliga obligatoriamente a introducir una clave antigua y definir una nueva que cumpla con los requisitos estrictos de
pwqualityconfigurados en la Fase 1.
Verificación:
- Comprobar mediante
chage -l auditor_testque todos los parámetros modificados (máximo de días, avisos, período de inactividad) reflejan fielmente la nueva política aplicada. - Verificar que el fichero
/etc/login.defscontiene los valores por defecto deseados para la creación automática de futuras cuentas en el sistema.
Posibles errores y resolución de problemas:
Si al intentar establecer una contraseña segura que cumple supuestamente con los requisitos el sistema sigue rechazándola con un error de rechazo por política PAM, suele deberse a que la contraseña contiene fragmentos del nombre de usuario o secuencias demasiado predecibles.
Solución: El módulo
pam_pwqualityanaliza por defecto que la contraseña no contenga el nombre del usuario invertido o en minúsculas/mayúsculas, ni secuencias numéricas simples. Asegúrate de utilizar claves completamente aleatorias que eviten cualquier dato personal del usuario.
Alternativa directa: Modificación masiva de políticas por defecto para nuevos usuarios
Si necesitas que todas las cuentas nuevas que se creen en el sistema a partir de ahora incorporen por defecto restricciones de caducidad (por ejemplo, un máximo de 60 días de validez) sin tener que ejecutar chage manualmente usuario por usuario, puedes modificar los valores predeterminados en el archivo de control:
sudo nano /etc/login.defs
# Buscar la línea PASS_MAX_DAYS y cambiar su valor de 99999 a 60.
Preguntas de reflexión:
- ¿Qué ventajas de seguridad aporta el uso del módulo PAM
pam_pwqualityfrente a dejar que los usuarios elijan libremente sus propias contraseñas en el sistema operativo? - ¿Qué diferencia operativa existe entre el parámetro
PASS_MAX_DAYSconfigurado en/etc/login.defsfrente a la aplicación puntual del comandochage -Msobre un usuario específico? - ¿Qué ocurre exactamente en el sistema cuando un usuario supera los días máximos de validez de su contraseña (
PASS_MAX_DAYS) y además transcurre el período de gracia de inactividad (INACTIVE)? - ¿Por qué forzar una caducidad excesivamente corta de las contraseñas (por ejemplo, cada 15 días) puede volverse en contra de la seguridad de la organización según las recomendaciones actuales de organismos como el NIST?
Haz clic aquí para ver las soluciones y explicaciones
1. ¿Qué ventajas de seguridad aporta el uso del módulo PAM pam_pwquality frente a dejar que los usuarios elijan libremente sus propias contraseñas en el sistema operativo?
Impide de forma automatizada que los usuarios utilicen claves débiles, predecibles, basadas en diccionarios o demasiado cortas que puedan ser vulneradas fácilmente mediante ataques de fuerza bruta o diccionario, elevando el nivel general de seguridad de la infraestructura frente a accesos no autorizados.
2. ¿Qué diferencia operativa existe entre el parámetro PASS_MAX_DAYS configurado en /etc/login.defs frente a la aplicación puntual del comando chage -M sobre un usuario específico?
El fichero /etc/login.defs actúa como plantilla global que define las políticas predeterminadas que se aplicarán automáticamente únicamente a los nuevos usuarios que se creen a partir de ese momento. Por el contrario, el comando chage -M permite modificar de forma directa y personalizada la política de caducidad de un usuario ya existente en el sistema.
3. ¿Qué ocurre exactamente en el sistema cuando un usuario supera los días máximos de validez de su contraseña (PASS_MAX_DAYS) y además transcurre el período de gracia de inactividad (INACTIVE)?
La cuenta del usuario queda completamente bloqueada de forma automática por el sistema operativo. A partir de ese momento, aunque el usuario introduzca su contraseña correcta, el acceso le será denegado y requerirá la intervención explícita de un administrador para desbloquear la cuenta y permitirle redefinir sus credenciales.
4. ¿Por qué forzar una caducidad excesivamente corta de las contraseñas (por ejemplo, cada 15 días) puede volverse en contra de la seguridad de la organización según las recomendaciones actuales de organismos como el NIST?
Porque obliga a los usuarios a cambiar sus claves constantemente, lo que les lleva a adoptar comportamientos inseguros para recordarlas (como apuntarlas en papeles, reutilizar contraseñas antiguas añadiendo un número secuencial al final, o realizar variaciones mínimas previsibles), incrementando paradójicamente la vulnerabilidad general del sistema frente a ataques.