Usuarios en Linux II, política de contraseñas
Como ya sabemos todos un administrador de sistemas no descansa ni su día de celebración. Todo el día luchando para resolver problemas de los usuarios, al fin de al cabo es su trabajo. Pero también tiene que implementar medidas que no son bien venidas por los usuarios.
La gestión de contraseñas es una de ellas y la aplicación de políticas sobre este tema no es plato de gusto. Ahora veremos algún procedimiento para hacer esto en nuestro día a día.
PAM y Cracklib
En Linux tenemos posibilidad de aplicar políticas de contraseñas obligando al usuario a cumplir una serie de requisitos, esto mejora bastante la seguridad del sistema.
Existen varias formas, en este caso usaremos el módulo PAM (Pluggable Authentication Modules) con la librería Cracklib.
Existen multitud de parámetros y configuraciones distintas para aplicar el módulo PAM, pero aquí solo veremos una configuración base fuerte, a partir de la cual se podremos ir modificando y/o ampliando según nuestras necesidades.
Instalación
Debian
Desde un terminal como root:
apt-get install libpam-cracklib
RedHat
El módulo PAM Cracklib viene por defecto en la instalación, no tendremos que hacer nada.
Ficheros implicados
Debian
/etc/pam.d/common-password: aquí configuramos las reglas que se aplican en las contraseñas.
/etc/login.defs: aquí definimos el periodo de expiración de las contraseñas.
RedHat
/etc/security/pwquality.conf: aquí configuramos las reglas que se aplican en las contraseñas.
/etc/pam.d/system-auth: aquí definimos las últimas contraseñas, las cuales no serán reutilizables.
/etc/login.defs: aquí definimos el periodo de expiración de las contraseñas.
Configuración
Ahora aplicaremos una configuración al sistema el objetivo de aplicar la política:
- Longitud mínima de 10 caracteres.
- Al menos un valor en mayúscula.
- Al menos un valor en minúscula.
- Al menos un carácter numérico.
- Al menos un carácter especial.
- No se pueden repetir las 5 últimas contraseñas.
- Que al menos cambien 3 caracteres en la nueva contraseña con respecto a la anterior.
- Bloquear al introducir la credencial 3 veces erróneamente.
- Caducidad cada 90 días.
- Que advierta 15 días antes de la caducidad.
Valores positivos y negativos
Los valores que se utilizan en la configuración pueden ser positivos o negativos.
- Positivos: deben de contener el número de caracteres indicados en su valor.
- Negativos: deben de contener al menos el número de caracteres indicados en su valor.
Un ejemplo de un valor de 2 para la configuración de caracteres mayúsculas, esto indica que dos valores tienen que ser mayúsculas, y un valor de -2 indica al menos dos deben ser mayúsculas.
Debian
En Debian aplicamos los parámetros del siguiente modo:
Editamos el archivo /etc/pam.d/common-password donde configuramos la complejidad de las contraseña.
Añadimos los siguientes valores a la línea que contiene pam_cracklib.so:
password requisite pam_cracklib.so retry=3 minlen=10 difok=3 lcredit=-1 ucredit=-1 dcredit=-1 ocredit=-1
También agregamos el parámetro remember a la línea que contiene pam_unix.so:
password [success=1 default=ignore] pam_unix.so obscure use_authtok try_first_pass sha512 remember=5
Editamos el archivo /etc/login.defs para configurar los parámetros temporales de caducidad y advertencia:
PASS_MAX_DAYS 90
PASS_MIN_DAYS 0
PASS_WARN_AGE 15
Fedora
En Fedora aplicamos los parámetros del siguiente modo:
Editando el archivo /etc/security/pwquality.conf para configurar los valores de complejidad:
retry=3
minlen=10
difok=3
lcredit=-1
credit=-1
dcredit=-1
ocredit=-1
Después indicamos el número de últimas contraseñas que serán recordadas para no reutilizar, editando el archivo /etc/pam.d/system-auth y agregamos el parámetro remember a la siguiente línea:
password suficient pam_unix.so sha512 shadow nullok try_first_pass use_authok remember=5
Y por ultimo editamos el archivo /etc/login.defs para configurar los parámetros temporales de caducidad y advertencia:
PASS_MAX_DAYS 90
PASS_MIN_DAYS 0
PASS_WARN_AGE 15
Significado de los valores
Los valores indican:
- retry: número de intentos Fallidos.
- minlen: longitud mínima.
- difok: número de caracteres distintos con respecto a la contraseña anterior.
- lcredit: número de caracteres minúscula.
- ucredig: número de caracteres mayúscula.
- dcredit: número de caracteres numéricos.
- ocredit: número de caracteres especiales.
- remember: el total de las últimas contraseñas que no se podrán reutilizar.
Los valores temporales:
- PASS_MAX_DAYS: máximo número de días en los que la contraseña será válida desde el último cambio.
- PASS_MIN_DAYS: indica el número de días que han de transcurrir entre un cambio de contraseña y el siguiente.
- PASS_WARN_AGE: indica desde cuando se comenzará a mostrar el mensaje de advertencia previo a la caducidad.
Para tener en cuenta
Las configuraciones que controlan los límites de tiempo solo aplica a los nuevos usuarios creados después a la aplicación de la, con lo cual no afecta a los usuarios ya existentes. Para aplicarle los valores configurados debemos de utilizar manualmente el comando chage.
Esto mismo sucede si en un momento determinado cambiamos la política de tiempo.
Por el contrario los cambios que realizamos en las características de las contraseña se aplicaran en el momento, y es extensible a todos los usuarios actuales y futuros.
Chequeando los cambios
Utilizaremos desde un terminal como root el comando chage:
chage -l test
Último cambio de contraseña :abr 15, 2021 La contraseña caduca : jul 14, 2021 Contraseña inactiva : nunca La cuenta caduca : nunca Número de días mínimo entre cambio de contraseña : 0 Número de días máximo entre cambio de contraseña : 90 Número de días de aviso antes de que caduque la contraseña : 15
Si queremos aplicar los cambios anteriores manualmente lo hacemos utilizando el comando de la siguinte manera desde el terminal como root:
chage test -W 15 -M 90 -m 0
En este los parámetros son:
- -W: tiempo en el que se muestra la advertencia previo a la caducidad, en días.
- -M: tiempo máximo de caducidad de la contraseña, en días.
- -m: número de días que han de transcurrir entre un cambio de contraseña y el siguiente.