Hay una máquina SLES 11. Los usuarios inician sesión a través de SSH y pubkey (mixto, algunos usuarios usan contraseña, otros usan clave ssh)
El sshd_config tiene:
UsePAM yes
PasswordAuthentication yes
PubkeyAuthentication yes
El problema: si la contraseña de un usuario que utiliza el inicio de sesión con clave pública caduca, se le pedirá al usuario que cambie la contraseña.
La pregunta:¿Cómo podemos configurar la configuración PAM o sshd para permitir que los usuarios inicien sesión si tienen una clave SSH válida y su contraseña expiró? -Sinapareciendo "cambie su contraseña".
ACTUALIZACIÓN#1: La solución no puede ser: "UsePAM no"
SERVER:~ # cat /etc/pam.d/sshd
#%PAM-1.0
auth requisite pam_nologin.so
auth include common-auth
account requisite pam_nologin.so
account include common-account
password include common-password
session required pam_loginuid.so
session include common-session
SERVER:~ #
ACTUALIZACIÓN#2: La solución no puede ser: configurar la contraseña de los usuarios para que nunca caduque
ACTUALIZACIÓN#3:
SERVER:/etc/pam.d # cat common-account
#%PAM-1.0
...
account required pam_unix2.so
account required pam_tally.so
SERVER:/etc/pam.d #
Respuesta1
El orden de las operaciones que provoca que se solicite la contraseña caducada es el siguiente:
- SSH ejecuta la
account
etapa PAM, que verifica que la cuenta exista y sea válida. Laaccount
etapa detecta que la contraseña ha caducado y se lo informa a SSH. - SSH realiza autenticación basada en claves. No necesita PAM para esto, por lo que no ejecuta el
auth
escenario. Luego configura la sesión de inicio de sesión SSH y ejecuta lasession
etapa PAM. - Luego, SSH recuerda que PAM le dijo que la contraseña había caducado, imprime un mensaje de advertencia y le pide a PAM que el usuario cambie la contraseña. SSH luego se desconecta.
Todo esto es obra de SSH y no veo ninguna opción de SSH para configurar este comportamiento. Entonces, a menos que desee crear una versión personalizada de SSH y/o PAM, la única opción que veo es evitar que PAM informe la contraseña caducada a SSH. Si haces esto,deshabilitará por completo las comprobaciones de contraseñas caducadas a través de SSH, incluso si el usuario inicia sesión a través de SSH con una contraseña. Otros métodos de inicio de sesión (que no sean SSH) seguirán comprobando la caducidad de la contraseña.
Su pam.d/sshd
archivo actual tiene una account include common-account
entrada. Supongo que hay un common-account
archivo que contiene una referencia a pam_unix.so
. Esta es la línea que busca una contraseña caducada.
Probablemente no quieras tocar el common-account
archivo en sí, ya que se utiliza para otros métodos de inicio de sesión. En su lugar, desea eliminar el include
de su pam.d/sshd
archivo. Si hay otras funciones common-account
además de pam_unix.so
, probablemente quieras ponerlas directamente en pam.d/sshd
.
Finalmente, recuerda que esto es una modificación a la seguridad de tu sistema y no debes confiar ciegamente en mí para darte buenos consejos. Lea cómo funciona PAM si no está familiarizado con él. Algunos lugares de partida podrían ser man 7 PAM
, man 5 pam.conf
y man 8 pam_unix
.
Respuesta2
Se agregó una opción a pam_unix.so (alrededor de febrero de 2016) llamada no_pass_expiry (cambio de código fuente aquíopágina de manual aquí). Básicamente le dice a pam_unix que ignore una contraseña caducada si se usó algo distinto a pam_unix para la autenticación, por ejemplo, si sshd realizó la autenticación.
Como resultado, si tiene una versión de pam_unix.so que contiene esa opción, debería poder configurar PAM para:
- Aún advierte, pero no requiere un cambio en una contraseña vencida si se usó una clave SSH para autenticarse a través de ssh
- Requerir un cambio de contraseña de una contraseña caducada si se utilizó un inicio de sesión/contraseña a través de pam_unix.so para autenticarse a través de ssh
- No afecta ninguna otra secuencia de autenticación (por ejemplo, a través del servicio de inicio de sesión).
Por ejemplo, configuré un servidor RHEL 7 para hacer lo anterior simplemente actualizando /etc/pam.d/sshd y agregando pam_unix.so no_pass_expiry a los tipos de cuenta y contraseña, por ejemplo
account required pam_nologin.so
account sufficient pam_unix.so no_pass_expiry
account include password-auth
password sufficient pam_unix.so no_pass_expiry
password include password-auth
Respuesta3
- Es posible que no desee cambiar su PAM o sshd_config por motivos de cumplimiento.
- Podrías estar usandoContraseñaAutenticación noen sshd_config
- Es posible que tenga contraseñas aleatorias.
- Es posible que incluso haya implementado el cumplimiento de CIS.
- Aún así tus usuarios reciben el mensaje
Entonces root puede modificar la fecha de cambio de contraseña:
for user in `grep ":x:[0-9]\{4\}" /etc/passwd|cut -d: -f1`; do chage -d today $user; done