A continuación se hará Google 2FA obligatoria para todos los usuarios
excepto a los usuarios que pertenecen al sudo y administrador de grupo
(es decir, si un usuario de sudo grupo o administrador no tiene 2FA configurado, le autenticará / ella en función de su clave pública):
Expediente: /etc/pam.d/sshd
auth required pam_google_authenticator.so nullok
auth optional pam_succeed_if.so user ingroup sudo
auth optional pam_succeed_if.so user ingroup admin
Expediente: /etc/ssh/sshd_config
AuthenticationMethods publickey,keyboard-interactive
UsePAM yes
ChallengeResponseAuthentication yes
Resultados:
| Belongs to sudo or | Has 2FA Already Setup | Authentication Result
| admin group | in ~/.google_authenticator |
----------+----------------------+-----------------------------+------------------------
User A | NO | NO | DENIED LOGIN UNTIL 2FA IS SETUP
User B | YES | NO | CAN LOGIN (PRIVATE/PUBLIC KEY USED)
User C | NO | YES | CAN LOGIN (PRIVATE/PUBLIC KEY AND 2FA USED)
User D | YES | YES | CAN LOGIN (PRIVATE/PUBLIC KEY AND 2FA USED)
De acuerdo con la documentación README.md de Google Authenticator :
nullok
PAM requiere al menos una respuesta de ÉXITO de un módulo, y nullok hace que este módulo diga IGNORE. Esto significa que si se usa esta opción, al menos otro módulo debe haber dicho ÉXITO. Una forma de hacerlo es agregar la autenticación requerida pam_permit.so al final de la configuración de PAM.
Esto hace que el uso de nullok
aquí sea seguro.