我最近在 SSH 服务器上使用 google-authenticator 启用了双因素身份验证。但是我现在面临一个问题:
我的服务器上有一组不同的用户,我将其用于 SFTP,但该组不再能够登录,因为未为该组中的用户设置 2FA。是否可以为该组禁用 google-authenticator 模块?无法为该组中的用户启用它,因为多个用户将使用此帐户。
附言:我用openssh-server
答案1
您可以使用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 ...
答案2
一些 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
就是这样。
答案3
以下情况将强制使用 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
很安全。