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_authenticator
en su directorio de inicio. Seguíestas instrucciones(Ctrl+F "Otro método para forzar la creación") para configurar my sshd_config
y 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_authenticator
Una 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_authenticator
no 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 nullok
opció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.