Implementación de políticas de seguridad en contraseñas y expiración de cuentas de usuario

Objetivo:

Comprender y aplicar políticas de seguridad en la gestión de cuentas de usuario en Linux mediante la configuración de restricciones en las contraseñas, caducidad de cuentas y bloqueo automático por inactividad utilizando herramientas nativas como chage y los ficheros de configuración del sistema.

Escenario:

  • Herramientas: Terminal Linux, comandos chage, passwd, y ficheros de configuración (/etc/login.defs, /etc/security/pwquality.conf).
  • Conceptos analizados: Ciclo de vida de una cuenta de usuario, complejidad de contraseñas, caducidad (aging), bloqueo por inactividad y auditoría de seguridad.
  • Proceso clave: Creación de un usuario de prueba, configuración de políticas de expiración y caducidad, establecimiento de requisitos de complejidad y verificación del comportamiento del sistema ante credenciales no válidas o caducadas.

Escenario Real: Endurecimiento de políticas de acceso

Tras una auditoría de seguridad en la empresa, se ha detectado que varios empleados utilizan contraseñas débiles (como "123456" o nombres propios) y que existen cuentas de antiguos trabajadores que nunca fueron desactivadas. Como administrador de sistemas, debes implementar una política de contraseñas robustas y configurar la expiración automática de cuentas para cumplir con los estándares de seguridad corporativos.

Por defecto, muchas distribuciones de Linux permiten la creación de contraseñas simples y cuentas que no caducan jamás, lo que representa una brecha crítica de seguridad. Modificar los parámetros del archivo /etc/login.defs y utilizar el comando chage permite automatizar el ciclo de vida de las credenciales, obligando a los usuarios a rotar sus contraseñas periódicamente y bloqueando cuentas inactivas o temporales.

NOTA: Para realizar esta práctica de forma segura, trabajaremos sobre tu propio entorno de prácticas o una máquina virtual dedicada, creando un usuario específico de pruebas (por ejemplo, usuarioprueba) para no alterar las políticas de tu usuario administrador principal.

Instrucciones:

Fase 1: Creación del usuario y análisis del estado inicial:

  • Crear un usuario de prueba en el sistema: sudo useradd -m -s /bin/bash usuarioprueba
  • Establecer una contraseña inicial: sudo passwd usuarioprueba
  • Verificar el estado actual de caducidad y políticas de la cuenta ejecutando: sudo chage -l usuarioprueba
  • Analizar los campos devueltos: fecha del último cambio, caducidad de la contraseña, días mínimos y máximos, periodo de advertencia e inactividad.

Fase 2: Configuración de la caducidad y envejecimiento de contraseñas (Password Aging):

  • Modificar la política para que el usuario esté obligado a cambiar su contraseña cada 30 días: sudo chage -M 30 usuarioprueba
  • Establecer un periodo mínimo de 3 días antes de que pueda volver a cambiarla: sudo chage -m 3 usuarioprueba
  • Configurar una advertencia de 7 días antes de que expire la contraseña: sudo chage -W 7 usuarioprueba
  • Establecer un periodo de inactividad de 5 días tras la expiración antes de que la cuenta se bloquee por completo: sudo chage -I 5 usuarioprueba
  • Definir una fecha exacta de expiración para la cuenta (por ejemplo, para contratos temporales): sudo chage -E 2026-12-31 usuarioprueba
  • Verificar los nuevos cambios ejecutando de nuevo: sudo chage -l usuarioprueba

Fase 3: Establecer políticas de complejidad de contraseñas:

  • Instalar el módulo de calidad de contraseñas (si no está disponible): sudo apt update && sudo apt install libpam-pwquality -y
  • Abrir el fichero de configuración de seguridad con un editor de texto: sudo nano /etc/security/pwquality.conf
  • Descomentar y modificar los siguientes parámetros para endurecer la seguridad:
    • minlen = 8 (Longitud mínima de la contraseña)
    • dcredit = -1 (Obliga a incluir al menos un dígito)
    • ucredit = -1 (Obliga a incluir al menos una mayúscula)
    • lcredit = -1 (Obliga a incluir al menos una minúscula)
    • ocredit = -1 (Obliga a incluir al menos un carácter especial)
  • Guardar los cambios y cerrar el editor.

Fase 4: Verificación y pruebas de restricciones:

  • Intentar cambiar la contraseña del usuario de prueba por una débil (ej. "password") ejecutando: sudo passwd usuarioprueba
  • Comprobar que el sistema rechaza la contraseña debido a las políticas de complejidad configuradas en PAM.
  • Forzar la caducidad inmediata de la contraseña para comprobar el aviso en el primer inicio de sesión: sudo chage -d 0 usuarioprueba
  • Simular un login con el usuario para verificar que el sistema le exige el cambio inmediato de credenciales.

Verificación:

  • Comprobar mediante el comando de auditoría general que todos los parámetros de envejecimiento se han aplicado correctamente: sudo chage -l usuarioprueba
  • Revisar los valores globales por defecto aplicados a las nuevas cuentas en el fichero: cat /etc/login.defs | grep -E "PASS_MAX_DAYS|PASS_MIN_DAYS|PASS_WARN_AGE"

Posibles errores y resolución de problemas:

Si al intentar cambiar la contraseña el sistema no aplica las restricciones de complejidad configuradas en pwquality.conf, suele deberse a que el módulo PAM correspondiente no está correctamente integrado en la pila de autenticación del sistema.

  • Solución: Verificar que el fichero /etc/pam.d/common-password incluye la línea correspondiente a pam_pwquality.so con el argumento retry=3.

Alternativa directa: Modificación masiva de políticas globales

Si necesitas aplicar estos cambios por defecto a todos los usuarios que se creen a partir de ahora en lugar de hacerlo uno a uno, puedes modificar directamente las variables de configuración global en el fichero /etc/login.defs:

sudo nano /etc/login.defs
# Modificar líneas como:
PASS_MAX_DAYS   90
PASS_MIN_DAYS   7
PASS_WARN_AGE   14

Preguntas de reflexión:

  1. ¿Qué diferencia hay entre la caducidad de la contraseña (-M en chage) y la fecha de expiración de la cuenta (-E)?
  2. ¿Por qué es importante configurar un periodo de inactividad (-I) tras la expiración de una contraseña en entornos corporativos?
  3. ¿Qué función cumple PAM (Pluggable Authentication Modules) a la hora de validar la complejidad de una nueva contraseña en Linux?
  4. ¿Qué ventajas aporta modificar las políticas globales en /etc/login.defs frente a configurar usuario por usuario con el comando chage?
Haz clic aquí para ver las soluciones y explicaciones

1. ¿Qué diferencia hay entre la caducidad de la contraseña (-M en chage) y la fecha de expiración de la cuenta (-E)?

La caducidad de la contraseña obliga al usuario a renovar su clave transcurrido un tiempo (permitiendo el acceso una vez la cambia), mientras que la fecha de expiración de la cuenta desactiva y bloquea el acceso al usuario por completo de forma definitiva o temporal, independientemente de si su contraseña era válida o no (muy útil para contratos temporales).


2. ¿Por qué es importante configurar un periodo de inactividad (-I) tras la expiración de una contraseña en entornos corporativos?

Evita que cuentas de usuarios que están de baja, vacaciones prolongadas o que han abandonado la empresa queden en un estado vulnerable indefinidamente. Si el usuario no cambia su contraseña en el periodo de gracia, el sistema bloquea la cuenta automáticamente para prevenir accesos no autorizados.


3. ¿Qué función cumple PAM (Pluggable Authentication Modules) a la hora de validar la complejidad de una nueva contraseña en Linux?

PAM actúa como una pasarela intermedia de abstracción. Intercepta los intentos de cambio de credenciales y aplica módulos de verificación (como pam_pwquality) para comprobar que la contraseña cumple con las reglas de longitud, uso de mayúsculas, minúsculas, números y símbolos antes de permitir que se almacene en el sistema.


4. ¿Qué ventajas aporta modificar las políticas globales en /etc/login.defs frente a configurar usuario por usuario con el comando chage?

La modificación global automatiza la seguridad por diseño: cualquier cuenta nueva que se creen en el futuro heredará automáticamente estas restricciones sin necesidad de que el administrador de sistemas tenga que acordarse de configurarlas manualmente una a una.