使用 ssh 锁定 pam_tally2 或 pam_faillock 帐户

使用 ssh 锁定 pam_tally2 或 pam_faillock 帐户

我正在运行 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 在尝试失败后会发生变化,并在此处进行调整。

相关内容