在 Ubuntu 16.04 上为 SSH 设置多重身份验证,但不适用于 root 用户

Set Up Multi-Factor Authentication for SSH on Ubuntu 16.04, but NOT for root user

我按照这个很好的指南从 digitalocean 到 set up Multi-Factor Authentication for SSH on Ubuntu 16.04 服务器(没有 UI),

在此之后,当通过 ssh 系统登录时,系统上的每个用户都需要额外的身份验证,如果设置了 2fa,一切正常,但如果没有设置,它就会失败(文章确实提到,如果我离开 nullok在 sshd 中,如果未设置,它将继续而不期望 2fa,但事实并非如此。)

基本上我想为系统上的每个交互式用户设置 2fa,但我希望它在 root 用户上启用。

顺便说一句,我试过 https://askubuntu.com/a/1051973/867525,它对普通用户有效,但对 root 用户无效。

一旦你在 Ubuntu 上为 SSH 设置了 Google 双因素设置,所有使用“密码验证”的用户都需要它,但你可以优先考虑基于密钥的验证(发生在密码验证之前。您可以为您不想要的用户设置 2 因素 - 在您的情况下为 root

您可以继续,只需在 sshd_config 文件中指定对所有用户禁用基于密钥的身份验证:

PubkeyAuthentication no

并且只为特定用户启用 - 在你的情况下是 root

Match User root
    PubkeyAuthentication yes

作为附加的安全提示,您可以只允许特定用户使用

AllowUsers <username> <username2>

根据上面 Dieskim 的回答, 这就是我不将 PAM/2fa 应用于 root 用户所做的。

在 /etc/ssh/sshd_config 中,我有条件地添加了 AuthenticationMethods publickey,password publickey,keyboard-interactive

UsePAM yes
# Apply following rule to everyone (*) but root user (!root)
Match user "!root,*"
    AuthenticationMethods publickey,password publickey,keyboard-interactive
Match all

我还想提一下:

最初即使在 /etc/pam.d/sshd root 登录中使用 auth required pam_google_authenticator.so nullok 后仍然无法正常工作,其背后的原因是 sshd_config 中的 PermitRootLogin 被设置为 prohibit-password ,并且 OpenSSH 需要允许使用 PAM 身份验证密码的 root 登录才能使用任何类型的密码,包括 OTP。

正如我希望 PermitRootLoginno 上面的 Match user 解决方案效果很好。

另外一个关于auth required pam_google_authenticator.so nullok的事情,这里认为nullok意味着如果没有为用户配置2fa,用户仍然可以登录,但最新的情况并非如此libpam-google-authenticator

的版本
# Standard Un*x password updating.
@include common-password
auth required pam_google_authenticator.so nullok

编辑: 以下陈述不正确(已从上面的答案中删除),当您选择启用 AuthenticationMethods 时,请勿在 sshd 文件中添加 auth required pam_permit.so

it is important to add auth required pam_permit.so as last line to /etc/pam.d/sshd

还要测试您的任何用户在没有任何凭据的情况下无法登录。