如何使用带有 PAM 的 ssh 服务器但不允许密码验证?

c33*_*33s 16 debian ssh pam

许多教程告诉您像这样配置 ssh 服务器:

ChallengeResponseAuthentication no
PasswordAuthentication no
UsePAM no 
Run Code Online (Sandbox Code Playgroud)

但是使用此设置,您无法使用 PAM,因为我计划将 2 Factor Auth 与 Google Authenticator(OTP 一次性密码)一起使用,我需要 PAM。

那么如何配置一个新的 debian jessie ssh 守护进程,如果我想阻止使用普通密码登录但仍然允许使用 PAM。

也许确切的问题是如何配置 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

And*_*w B 27

也许确切的问题是如何配置 pam 以禁止密码?

正确的。您已经偶然发现设置UsePAM no通常是不好的建议。它不仅会阻止任何形式的基于 PAM 的身份验证,还会禁用accountsession模块。访问控制和会话配置是好事。

首先,让我们构建一个需求列表:

  • OTP 通过pam_google_authenticator.so. 这需要UsePAM yesChallengeResponseAuthentication 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
Run Code Online (Sandbox Code Playgroud)

完成sshd这些更改后,不要忘记重新加载。

PAM 配置

我们仍然需要配置 PAM。假设全新安装 Debian 8(根据您的问题):

  • 评论@include common-auth来自/etc/pam.d/sshd
  • 查看/etc/pam.d/sshd并确认不auth存在以开头的行。如果这是全新安装,则不应该存在,但最好是安全的。
  • 添加一个auth条目pam_google_authenticator.so

请记住,本地密码仍然有效。

我们没有进行任何会影响通过本地控制台登录的更改,也没有阻止用户使用密码来升级他们的权限。sudo.这超出了问题的范围。如果您决定更进一步,请记住应该始终允许 root 通过密码在本地登录。否则,您可能会意外将自己锁定在系统之外。