Contraseña caducada e inicio de sesión basado en clave SSH con UsePAM sí

Contraseña caducada e inicio de sesión basado en clave SSH con UsePAM sí

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 accountetapa PAM, que verifica que la cuenta exista y sea válida. La accountetapa 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 authescenario. Luego configura la sesión de inicio de sesión SSH y ejecuta la sessionetapa 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/sshdarchivo actual tiene una account include common-accountentrada. Supongo que hay un common-accountarchivo 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-accountarchivo en sí, ya que se utiliza para otros métodos de inicio de sesión. En su lugar, desea eliminar el includede su pam.d/sshdarchivo. Si hay otras funciones common-accountademá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.confy 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:

  1. 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
  2. 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
  3. 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

información relacionada