在 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。
正如我希望 PermitRootLogin
到 no
上面的 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
还要测试您的任何用户在没有任何凭据的情况下无法登录。
我按照这个很好的指南从 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。
正如我希望 PermitRootLogin
到 no
上面的 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
还要测试您的任何用户在没有任何凭据的情况下无法登录。