我正在尝试使用 libpam-google-authenticator 通过 ssh 启用 2FA。并非所有用户都需要启用身份验证器。每个人都使用 ssh 公钥,没有人有密码。我正在运行 Debian buster,并且我还尝试了来自 Bullseye 的 libpam-google-authenticator。
我的问题是,无论我在 PAM 配置中添加什么,没有启用身份验证器的用户永远不会直接登录,而是总是要求输入密码。
我已经安装了 libpam-google-authenticator 并配置了 /etc/ssh/sshd_config :
PasswordAuthentication no
ChallengeResponseAuthentication yes
AuthenticationMethods publickey,keyboard-interactive
PasswordAuthentication no
PermitEmptyPasswords no
我无法计算出正确的 PAM 配置,因此没有 .google_authenticator 文件的用户仍然可以登录。根据我使用的内容,系统会提示用户输入密码(他们没有密码),或者没有完全允许进入。
在 /etc/pam.d/sshd 我尝试过(像这样Trying to get SSH with public key (no password) + google 身份验证器在 Ubuntu 14.04.1 上工作):
#@include common-auth
auth required pam_google_authenticator.so debug nullok
在这种情况下,没有验证器设置的用户会被以下调试拒绝;
Aug 05 15:11:18 <host> sshd(pam_google_authenticator)[746624]: debug: start of google_authenticator for "<user>"
Aug 05 15:11:18 <host> sshd(pam_google_authenticator)[746624]: debug: end of google_authenticator for "<user>" Result: The return value should be ignored by PAM dispatch
Aug 05 15:11:18 <host> sshd[746620]: error: PAM: Permission denied for <user> from <IP>
是否pam_permit
需要设置后备案例?
我也尝试过之前和之后的各种组合,auth required
但auth sufficient
它们@include common-auth
都会导致没有验证器的用户被要求输入密码,有时也会要求有验证器的用户输入密码。
有没有人有做这个工作的食谱?
这是我的工作配置。有些用户启用了身份验证器,有些则没有,并且只允许使用公钥进行 SSH 登录,从不允许使用密码。
在 /etc/ssh/sshd_config 中,
在 /etc/pam.d/sshd 中,
@include comon-auth
必须禁用,因为它包含我不想使用的 pam_unix。然后,您需要pam_permit
使没有身份验证器的用户身份验证成功(为此pam_google_authenticator
返回忽略而不是通过)。这仍然不允许 root 使用 ssh 密钥登录;sshd 日志
这在Google Authenticator PAM 上讨论了 SSH 阻止 root login without 2FA。
如上所述,我认为使用 SSH 配置为某些组强制执行 2FA 实际上更好,正如@zoredache 建议的那样。这很容易让您将某些 IP 列入白名单,因为它们也不需要 2FA。在这种情况下, sshd_config 例如说
和 /etc/pam.d/ssh 说
我认为您不需要或不想评论
@include common-auth
. 或者至少我没有,它似乎工作正常。但我仍然主要是在测试这个。没有时间为您将其翻译成 shell 脚本,但这是一个似乎对我有用的 ansible playbook 的摘录。我怀疑即使您不使用 ansible,您也应该能够跟随它在做什么。