也许确切的问题是如何将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用户通过密码在本地登录。否则,您可能会误将自己锁定在系统之外。