有没有办法对 Unix PAM 子系统上的 SSH 服务器上的所有用户强制执行 2FA?

有没有办法对 Unix PAM 子系统上的 SSH 服务器上的所有用户强制执行 2FA?

有没有办法对 Unix PAM 子系统上 SSH 服务器上的所有用户强制执行双因素身份验证 (2FA)?

答案1

我无法访问像您这样的未命名 UNIX 系统,因此您必须根据您自己的情况调整我在这里描述的解决方案。 (请随意编辑此答案以添加您的具体信息。)

PAM子系统允许在身份验证过程中包含其他模块。其中一项规定谷歌身份验证器 (以及任何兼容的产品,例如 Microsoft 的产品)。

在开始之前,请确保您已建立根会话,并且在验证您仍然可以登录(并使用sudosu)的另一个连接之前不要关闭它。

这里是Debian 12(“书虫”)的安装和配置过程。你需要贯穿root始终,所以从sudo -s获取rootshell 开始:

sudo -s

apt update
apt install libpam-google-authenticator

cp -p /etc/pam.d/common-auth{,.$(date +'%Y-%m-%d')}
echo 'auth required pam_google_authenticator.so nullok echo_verification_code' >>/etc/pam.d/common-auth

现在编辑/etc/ssh/sshd_config不是 ssh_config)并添加或编辑这些行。如果要添加它们,请将它们立即放在下面UsePAM yes

cp -p /etc/ssh/sshd_config{,.$(date +'%Y-%m-%d')}
vi /etc/ssh/sshd_config    # or nano, or any preferred editor

ChallengeResponseAuthentication yes
KbdInteractiveAuthentication yes

并重新启动sshd

systemctl restart sshd

现在以普通用户身份登录并设置身份验证器。

google-authenticator

   Do you want authentication tokens to be time-based (y/n) y
   Warning: pasting the following URL into your browser exposes the OTP secret to Google:
     https://www.google.com/chart?...secret...stuff...

您将在文本终端中或单击生成的网页链接时显示一个二维码。像往常一样在身份验证器应用程序中捕捉它。

   Your new secret key is: 4JD3xxxxxxxxxxxxxxxxxxH7EE
   Enter code from app (-1 to skip): xxxxxx
   Code confirmed
   Your emergency scratch codes are:

   Do you want me to update your "/home/{user}/.google_authenticator" file? (y/n) y
   Do you want to disallow multiple uses of the same authentication token? (y/n) y
   By default […] This will permit for a time skew of up to 4 minutes
   between client and server. Do you want to do so? (y/n) n
   Do you want to enable rate-limiting? (y/n) y

现在测试一下。如果有效的话,那就太好了。如果没有,则恢复/etc/pam.d/common-auth并重/etc/ssh/sshd_config试。

请注意,因为我已nullok在 PAM 配置条目中包含该选项,所以用户可以选择避免设置身份验证。如果删除它,它将成为必需的值。请务必小心删除此选项,因为它将对所有用户帐户(包括root.您可以阅读文档中的其他选项(请参阅man pam_google_authenticatorman google-authenticator)。

相关内容