¿Cómo necesito MFA solo cuando ya se ha configurado?

¿Cómo necesito MFA solo cuando ya se ha configurado?

Me gustaría exigir que todos los usuarios utilicen MFA con Google Authenticator. Cada vez que agrego un nuevo usuario, quiero permitirle iniciar sesión usando su clave SSH solo una vez y, al iniciar sesión, pedirle que cree una clave secreta ejecutando la configuración de GAuth en su archivo .bash_login. Esto se creará ~/.google_authenticatoren su directorio de inicio. Seguíestas instrucciones(Ctrl+F "Otro método para forzar la creación") para configurar my sshd_configy pam.d. Aquí están, con los comentarios eliminados:

/etc/ssh/sshd_config

X11Forwarding yes
PrintMotd no

AcceptEnv LANG LC_*

Subsystem   sftp    /usr/lib/openssh/sftp-server

AllowUsers me him
PermitRootLogin no
MaxStartups 15
UsePAM yes
ChallengeResponseAuthentication yes
PasswordAuthentication no
AuthenticationMethods publickey,keyboard-interactive

/etc/pam.d/sshd

# Standard Un*x authentication.
#@include common-auth

account    required     pam_nologin.so

# Standard Un*x authorization.
@include common-account

session [success=ok ignore=ignore module_unknown=ignore default=bad]        pam_selinux.so close

session    required     pam_loginuid.so

session    optional     pam_keyinit.so force revoke

@include common-session

session    optional     pam_motd.so  motd=/run/motd.dynamic
session    optional     pam_motd.so noupdate

session    optional     pam_mail.so standard noenv # [1]

session    required     pam_limits.so

session    required     pam_env.so # [1]

session    required     pam_env.so user_readenv=1 envfile=/etc/default/locale

session [success=ok ignore=ignore module_unknown=ignore default=bad]        pam_selinux.so open

# Standard Un*x password updating.
@include common-password

auth required pam_google_authenticator.so nullok

Por lo que tengo entendido, el "nullok" en la última línea significa que si no se ha configurado una clave secreta, no se requiere nada para satisfacer ese requisito de autenticación. Pero cuando intento iniciar sesión con un usuario que no tiene una clave secreta configurada, aparece algo como lo siguiente:

$ ssh him@my_device
[email protected]: Permission denied (keyboard-interactive).

.google_authenticatorUna vez creado el archivo, el inicio de sesión debería realizarse correctamente. ¿Cómo permito este tipo de inicio de sesión siempre que .google_authenticatorno esté presente?

Por cierto, este es Ubuntu 18.04 LTS.

Respuesta1

Noté una actualización en el archivo README del proyecto que agrega información sobre la nullokopción.

PAM requires at least one `SUCCESS` answer from a module, and `nullok`
causes this module to say `IGNORE`. This means that if this option is
used at least one other module must have said `SUCCESS`. One way to do
this is to add `auth required pam_permit.so` to the end of the PAM
config.

de: https://github.com/google/google-authenticator-libpam/commit/5e804ec11104a1ab17ce02d0681130ded037f39b

información relacionada