Ниже будет сделать Google 2fa обязательным для всех пользователей ,
кроме пользователей , принадлежащих к SUDO и администратору группе
(то есть , если пользователь из группы Суда или администратора не 2fa настроен, он будет аутентифицировать его / ее на основе их открытого ключа):
Файл: /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
Файл: /etc/ssh/sshd_config
AuthenticationMethods publickey,keyboard-interactive
UsePAM yes
ChallengeResponseAuthentication yes
Результаты:
| 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)
Согласно документации Google Authenticator README.md :
nullok
PAM требует как минимум одного ответа SUCCESS от модуля, и nullok заставляет этот модуль сказать IGNORE. Это означает, что если используется эта опция, то, по крайней мере, еще один модуль должен иметь SUCCESS. Один из способов сделать это - добавить требуемый auth pam_permit.so в конец конфигурации PAM.
Это делает использование nullok
здесь безопасным.