Problemas de OpenSSH al combinar PAM y contraseña

Problemas de OpenSSH al combinar PAM y contraseña

Estoy jugando con MFA por interés personal y me encontré con un problema que no he podido resolver. Recientemente configuré PAM (usando Google Authenticator) y me gustaría combinarlo con un tipo más de autenticación.

Tengo varias cuentas y el sshd_config de la siguiente manera:

PasswordAuthentication no
PermitEmptyPasswords no
AuthenticationMethods publickey,keyboard-interactive
ChallengeResponseAuthentication yes
UsePAM yes

Match User user2
PasswordAuthentication yes
AuthenticationMethods password,keyboard-interactive

Para todos los usuarios excepto "usuario2", puedo realizar la autenticación correctamente utilizando claves y un código de verificación. Sin embargo, al intentar conectarse con "usuario2", surge un problema. Al intentar conectarme desde un cliente, aparecen correctamente las indicaciones de Contraseña y Código de verificación. Pero la contraseña esperada no es la contraseña de la cuenta "usuario2" (digamos "hunter2"), sino el Código de verificación que se ve en la aplicación:

$ ssh user2@machine -p port
user2@machine's password:

Cuando ingreso "hunter2" en la solicitud de contraseña, me la niegan. Sin embargo, si ingreso el Código de verificación que se ve en la aplicación, aparece el siguiente mensaje:

$ ssh user2@machine -p port
user2@machine's password:
Verification Code:

Lo cual, por supuesto, requiere el Código de Verificación por segunda vez. Entonces ya estoy conectado.

Probé algunas combinaciones diferentes en el bloque user2:

Match User user2
PasswordAuthentication yes
AuthenticationMethods password

lo anterior requiere el Código de verificación en la solicitud de contraseña como se indica arriba, lo que me permite iniciar sesión correctamente antes de que se solicite el Código de verificación.

Mi archivo /etc/pam.d/sshd está completamente intacto excepto por agregar:

auth required pam_google_authenticatior.so

Y comentando

@include common-auth

->

#@include common-auth
auth required pam_google_authenticatior.so

Respuesta1

Este es un resultado normal con OpenSSH. Ambos métodos passwordy keyboard-interactiveauth utilizan PAM por diseño y ambos invocan exactamente la misma pila de PAM.(Después de todo, tiene "UsePAM sí", lo que significa que le dijo que usara PAM para verificar la contraseña, por lo que obedientemente llama a PAM para verificar lo que cree que es la contraseña).Por lo tanto, ambos aceptarán la misma entrada.

La única diferencia entre estos dos mecanismos es que sólo el 'teclado interactivo' permite a PAM mostrar múltiples mensajes en serie o alterar el texto del mensaje que se muestra. Mientras tanto, la 'contraseña' es un mecanismo de formato fijo: existenNo"indicaciones" reales enviadas al cliente SSH; te pide exactamente una contraseña y listo.

En otras palabras, no es útil combinar los dos mecanismos: no se puede hacer que OpenSSH verifique por separado la contraseña y el token, es todo o nada. (Aunque se ha propuesto varias veces la posibilidad de especificar dos pilas PAM diferentes dentro de OpenSSH, hasta ahora no se han aceptado dichos parches).

información relacionada