许多教程告诉您像这样配置 ssh 服务器:
ChallengeResponseAuthentication no
PasswordAuthentication no
UsePAM no
但是在这个设置下你不能使用 PAM,因为我计划使用 Google Authenticator 的 2 Factor Auth(OTP 一次性密码),所以我需要 PAM。
那么,如果我想阻止使用正常密码登录但仍允许使用 PAM,那么如何配置全新的 debian jessie ssh deamon。
也许确切的问题是如何配置 pam 以不允许密码?
PAM 身份验证的详细信息
禁用基于 PAM 的密码验证相当不直观。几乎所有 GNU/Linux 发行版(Slackware 除外)和 FreeBSD 都需要它。如果您不小心,您可以将 PasswordAuthentication 设置为“no”,但仍然可以通过 PAM 验证仅使用密码登录。事实证明,您需要将“ChallengeResponseAuthentication”设置为“no”才能真正禁用 PAM 验证。FreeBSD 手册页有这样的说法,这可能有助于澄清情况:
请注意,如果 ChallengeResponseAuthentication 为“yes”,并且 sshd 的 PAM 身份验证策略包括 pam_unix(8),则无论 PasswordAuthentication 的值是什么,都将允许通过质询-响应机制进行密码身份验证。
http://www.unixlore.net/articles/five-minutes-to-more-secure-ssh.html
答案1
也许确切的问题是如何配置 pam 以不允许密码?
正确。您已经意识到设置UsePAM no
通常是错误的建议。它不仅会阻止任何形式的基于 PAM 的身份验证,还会禁用account
模块session
。访问控制和会话配置是好事。
首先,让我们创建一个需求列表:
- 通过 进行 OTP 验证
pam_google_authenticator.so
。这需要UsePAM yes
和ChallengeResponseAuthentication yes
。毕竟,您正在提示他们提供凭证! - 禁止通过 PAM 进行其他形式的密码验证。这意味着禁用任何
auth
可能允许通过keyboard-interactive
登录传输密码的模块。(我们必须保持启用 OTP) - 基于密钥的身份验证。我们需要要求
publickey
身份验证,并且可能还gssapi-with-mic
需要您配置 Kerberos。
通常,使用密钥进行身份验证会完全跳过基于 PAM 的身份验证。这会阻止我们使用旧版本的 openssh,但 Debian 8 (jessie) 支持该 AuthenticationMethods
指令。这允许我们要求多种身份验证方法,但仅适用于实现 SSHv2 的客户端。
sshd 配置
以下是我建议的几行/etc/ssh/sshd_config
。确保您有办法访问此系统,以免sshd
您破坏某些东西!
# Require local root only
PermitRootLogin no
# Needed for OTP logins
ChallengeResponseAuthentication yes
UsePAM yes
# Not needed for OTP logins
PasswordAuthentication no
# Change to to "yes" if you need Kerberos. If you're unsure, this is a very safe "no".
GSSAPIAuthentication no
# Require an OTP be provided with key based logins
AuthenticationMethods publickey,keyboard-interactive
# Use this instead for Kerberos+pubkey, both with OTP
#
#AuthenticationMethods gssapi-with-mic,keyboard-interactive publickey,keyboard-interactive
sshd
一旦进行了这些更改,请不要忘记重新加载。
PAM 配置
我们仍然需要配置 PAM。假设全新安装 Debian 8(根据您的问题):
- 评论
@include common-auth
来自/etc/pam.d/sshd
。 - 检查
/etc/pam.d/sshd
并确认没有以 开头的行auth
。如果这是全新安装,则不应该有,但最好谨慎行事。 - 添加
auth
的条目pam_google_authenticator.so
。
请记住,本地密码仍然有效。
我们没有做任何会影响通过本地控制台登录的更改,也没有阻止用户使用密码通过升级其权限。sudo.
这超出了问题的范围。如果您决定采取进一步措施,请记住,应始终允许 root 通过密码本地登录。否则,您可能会意外将自己锁定在系统之外。
答案2
禁止密码请求
注释此行
#auth substack password-auth
在 /etc/pam.d/sshd 中
并确保此行末尾没有 nullok,除非无需使用 OTP 即可通过 ssh 进行身份验证
auth required pam_google_authenticator.so