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

12

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 caduca para un usuario que utiliza el inicio de sesión de pubkey, se le solicitará 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 caducaron las contraseñas? - Sin aparecer "cambiar 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 del usuario 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 # 
la preguntala pregunta
fuente
Puede lograr esto al eliminarlo pam_unix.sode la sessionsección de /etc/pam.d/sshd(y reemplazarlo con pam_lastlog.sosi no está allí. No estoy seguro de si pam_unix.so/sessionestá haciendo esto o no, pero se siente como el lugar correcto.
Patrick
1
configura la cuenta de usuario para que nunca expire :)
Raza
@Raza: Gracias :) gran idea, pero no puede ser una solución :(
thequestionthequestion
prueba ForcedPasswdChange Noesto es para SSH1
Raza
1
Me di cuenta de que ForcedPasswdChange Nono funcionará después de la expiración. está buscando una solución que permita al usuario expirado iniciar sesión
Raza

Respuestas:

10

El orden de las operaciones que provoca la solicitud de contraseña caducada es el siguiente:

  • SSH ejecuta la accountetapa PAM , que verifica que la cuenta existe y es válida. La accountetapa se da cuenta de que la contraseña ha caducado y le avisa a SSH.
  • SSH realiza autenticación basada en clave. 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 expirado, imprime un mensaje de advertencia y le pide a PAM que haga que el usuario cambie la contraseña. SSH luego se desconecta.

Todo esto lo está haciendo 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 hace esto, deshabilitará por completo las verificaciones de contraseña expiradas a través de SSH , incluso si el usuario inicia sesión a través de SSH con una contraseña. Otros métodos (no SSH) de inicio de sesión seguirán verificando 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 desee tocar el common-accountarchivo en sí, ya que se usa para otros métodos de inicio de sesión. En cambio, desea eliminar el includede su pam.d/sshdarchivo. Si hay otras funciones en common-accountademás pam_unix.so, es probable que desee para ponerlos directamente en pam.d/sshd.

Finalmente, recuerde que esta es una modificación a la seguridad de su sistema y que no debe confiar ciegamente en mí para darle buenos consejos. Lea sobre cómo funciona PAM si no está familiarizado con él. Algunos puntos de partida podrían ser man 7 PAM, man 5 pam.confy man 8 pam_unix.

Jander
fuente
Buena explicación del orden de las operaciones, gracias.
M_dk
3

Se agregó una opción a pam_unix.so (alrededor de febrero de 2016) llamada no_pass_expiry ( cambio de código fuente aquí o página de manual aquí ). Básicamente le dice a pam_unix que ignore una contraseña caducada si se usó algo diferente 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. Todavía advierte pero no requiere un cambio a una contraseña caducada si se usó una clave SSH para autenticar 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 a 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
Todd
fuente
1
Acabo de probar esto y funciona. Puede verificar si su PAM admite esta opción o no buscando "no_pass_expiry" existe o no dentro de la página del manual "man 8 pam_unix".
Tomofumi
El cambio de código de 2016 todavía no está presente en Ubuntu 18.04 ... :(
ColinM
0
  • Es posible que no desee cambiar su PAM o sshd_config por motivos de cumplimiento.
  • Es posible que esté utilizando PasswordAuthentication no en sshd_config
  • Es posible que tenga contraseñas aleatorias.
  • Incluso podría haber implementado el cumplimiento de CIS.
  • Aún así, sus usuarios reciben el aviso

Luego, 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
bbaassssiiee
fuente