Answers:
您可以pam_succeed_if
在之前使用模块(请参见手册页)pam_google_authenticator
为您的小组跳过此部分:
# the other authentication methods, such as @include common-auth
auth [success=1 default=ignore] pam_succeed_if.so user ingroup group
auth required pam_google_authenticator ...
[success=1 default=ignore]
改为required
。我认为,目前,不在组中的用户将导致身份验证失败。success=1
将使其跳过下一个方法,default=ignore
这意味着不在组中的用户将简单地转到下一个方法。
某些SFTP客户端可以处理2FA。例如,我将2FA与FileZilla和WinSCP一起使用,它们可以工作。另外,我还设置了ssh-key身份验证,它可以与2FA一起使用。
但是,您的问题很有趣,我进行了简短调查。我找到了这个答案。
因此,可以(并且很容易)运行单独的ssh实例。我已经测试过了。
分别制作sshd_config
文件副本。
$ sudo cp /etc/ssh/sshd_config /etc/ssh/sshd_config_pwd
$ sudo cp /etc/ssh/sshd_config /etc/ssh/sshd_config_2fa
编辑这些新config
文件。您必须更改的一件事是shh端口。根据示例:
2.a)sshd_config_pwd
具体行是:
Port 1022
...
PasswordAuthentication yes
ChallengeResponseAuthentication no
UsePAM no
2.b)sshd_config_2fa
具体行是:
Port 2022
...
PasswordAuthentication no
ChallengeResponseAuthentication yes
UsePAM yes
打开防火墙的必要端口。根据示例:
$ sudo ufw limit 1022
$ sudo ufw limit 2022
运行新的ssh实例:
$ sudo /usr/sbin/sshd -f /etc/ssh/sshd_config_pwd
$ sudo /usr/sbin/sshd -f /etc/ssh/sshd_config_2fa
而已。
sshd_config
以使用其他PAM堆栈而不使用2FA?
以下内容将使所有属于sudo和admin组的用户
以外的所有用户都必须使用Google 2FA
(这意味着,如果sudo或admin组中的用户未配置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文档:
空置
PAM至少需要一个模块提供一个SUCCESS答案,而nullok会使该模块说“ IGNORE”。这意味着,如果使用此选项,则至少另一个模块必须具有所说的SUCCESS。一种方法是将auth required pam_permit.so添加到PAM配置的末尾。
这样可以nullok
安全使用此处。