我正在运行 RHEL 6.2。大多数用户将使用 SSH 通过密码登录。有些用户可能有密钥。所有帐户都是本地帐户。
我需要在 N 次密码登录失败后锁定用户。
中的示例man pam_tally2
不会pam_faillock
锁定使用 ssh 的用户。该pam_tally2
示例可以锁定 telnet(我已启用以进行测试)登录,随后将锁定 ssh 用户。ssh 无法触发它。
/etc/ssh/sshd_config
有:
PasswordAuthentication yes # setting to no doesn't allow login with a password!
UsePAM yes
UseLogin no # setting to yes doesn't allow putty logins
手册页示例应该可以在未改变的系统上运行。
答案1
如果启用,PasswordAuthentication
则 SSH 守护程序会自行处理密码,而不使用 PAM。您实际上想要禁用此功能以强制它使用 PAM:
PasswordAuthentication no
UsePAM yes
ChallengeResponseAuthentication yes
但是,这不会捕获使用密钥的用户(尽管我个人认为这没问题)。如果你这样做,你可能需要使用类似失败2ban它在日志中查找身份验证失败并添加 iptables 规则来阻止未来的尝试。
答案2
您需要添加以下几行到/etc/pam.d/sshd
:
auth required pam_tally2.so deny=6 onerr=fail unlock_time=1800
account required pam_tally2.so
将它们添加到第 3 行和第 6 行,如下所示:
#%PAM-1.0
auth required pam_sepermit.so
auth required pam_tally2.so deny=6 onerr=fail unlock_time=1800
auth include password-auth
account required pam_nologin.so
account required pam_tally2.so
account include password-auth
password include password-auth
# pam_selinux.so close should be the first session rule
session required pam_selinux.so close
session required pam_loginuid.so
# pam_selinux.so open should only be followed by sessions to be executed in the user context
session required pam_selinux.so open env_params
session required pam_namespace.so
session optional pam_keyinit.so force revoke
session include password-auth
还要确保UsePAM yes
设置在/etc/ssh/sshd_config
六次身份验证失败后,ssh 用户将被锁定 30 分钟。
如果我们遵循官方 RHEL 6 安全指南,我们无需改变就能实现这一点/etc/pam.d/sshd
。
我们编辑/etc/pam.d/system-auth
和/etc/pam.d/password-auth
,替换
auth sufficient pam_unix.so nullok try_first_pass
和
auth required pam_faillock.so preauth silent audit deny=3 unlock_time=600
auth sufficient pam_unix.so nullok try_first_pass
auth [default=die] pam_faillock.so authfail audit deny=3 unlock_time=600
并且,在两个文件中,我们将此行添加到“帐户”部分的顶部:
account required pam_faillock.so
这将为控制台用户、屏幕保护程序用户等提供帐户锁定功能。
如果你检查的话,/etc/pam.d/sshd
你会看到它使用了password-auth
,因此 ssh 用户将体验到相同的锁定功能。
答案3
我必须编辑'/etc/pam.d/sshd'
和
需要身份验证 pam_tally2.so Deny=5 Unlock_time=1200 Even_deny_root Root_unlock_time=10
现在可以正常工作了。
答案4
pam_faillock 中的 unlock_time 行为与 pam_tally 相比存在差异。(unlock_time 不会根据上次失败的尝试而变化)在 system-auth 和 password-auth 中配置 pam_faillock,deny=3 和 unlock_time=300,现在尝试使用任何非 root 用户登录并输入无效密码 3 次,之后帐户将按预期锁定,假设当前时间为 1300 时。帐户锁定,直到 13:05 时您才可以使用正确的密码登录,如果用户在 13:02 再次尝试登录,系统将拒绝,因为帐户已被锁定。对于相同的场景,在 pam_tally 的情况下,当用户尝试在 13:02 登录时,用户将在 13:07 之后解锁,而不是 13:05。unlock_time 在尝试失败后会发生变化,并在此处进行调整。