我正在尝试使用 pam_tally 在 ubuntu 中实现帐户锁定。我尝试在 /etc/pam.d/common-auth
auth required pam_tally.so deny=3
account required pam_tally.so
失败被记录下来,但即使达到最大失败次数,帐户也不会被锁定。我正在尝试通过直接登录(GNOME 登录屏幕)来实现这一点。
有什么建议吗?我是否还需要添加 pam.d/gdm 或登录文件?
答案1
common-auth 背后的解释
如果你只是在寻找快速解决方案,请转到下面如何配置 common-auth 以锁定。
希望这能帮助您了解如何/etc/pam.d/common-auth
配置锁定。
如果删除中的所有注释/etc/pam.d/common-auth
,则剩下以下内容:
auth [success=1 default=ignore] pam_unix.so nullok_secure
auth requisite pam_deny.so
auth required pam_permit.so
让我们看看这个文件的每一行以及它的用法。
auth [success=1 default=ignore] pam_unix.so nullok_secure
读取密码输入。如果密码正确,则跳过文件的下一行(带有 的行pam_deny.so
)。您可以通过设置 中的值来更改跳过的行数success=1
。
auth requisite pam_deny.so
立即使登录尝试失败。此处的单词requisite
指示身份验证在失败时立即退出。其他行则使用required
,即等到模块结束时才发出失败信号。
auth required pam_permit.so
允许登录尝试。这是使用 完成的pam_permit.so
。
一旦建立了该机制,就可以更好地理解如何配置模块来锁定用户。
如何配置 common-auth 以锁定
对于 Ubuntu:
添加以下行pam_deny.so 之后和 pam_permit.so 之前:
auth required pam_tally2.so onerr=fail deny=3 unlock_time=1800
将 pam_deny.so 行更改为以下内容:
auth required pam_deny.so
整个文件看起来如下:
auth [success=1 default=ignore] pam_unix.so nullok_secure
auth required pam_deny.so
auth required pam_tally2.so onerr=fail deny=3 unlock_time=1800
auth required pam_permit.so
您可以配置以下选项以满足您的需要:
deny=3
- 您被锁定之前允许尝试的次数。unlock_time=1800
- 您被允许再次尝试登录之前的秒数。(补充说明:如果系统在一系列失败后解锁,并且您再次验证失败,则您没有 2 次验证机会。系统会让您等待unlock-time
再次。)
大多数资源建议将此行添加到文件顶部,强调顺序的重要性;但是,在 Ubuntu 桌面系统上,此配置可能会将您锁定在 GUI 登录屏幕之外。
为什么会发生这种情况?似乎当您在 Ubuntu 的登录屏幕上选择一个用户时,PAM 模块会立即启动,并在该pam_unix.so
行(密码输入行)处等待,然后再继续。如果您将该pam_tally2.so
行放在这个“停止点”之前,锁定会立即生效,如果您通过按箭头键离开该用户,模块会发出登录失败的信号并pam_tally2
递增。甚至没有输入密码,您很快就会陷入类似以下情况:
典型的 Ubuntu 登录屏幕,其中的 common-auth 文件配置不正确。
将该行放在pam_tally2.so
文件底部可以修复此问题。此配置可保持正确的顺序;第一行跳转到pam_deny.so
或pam_permit.so
基于密码有效性,到达时pam_tally2.so
,任何不正确的密码输入都已显示。
尽管无论输入什么密码都达到了 ,但如果也达到了 ,pam_permit.so
模块将始终失败。这是因为该行包含;它将允许其余行运行,但模块本身最终将失败。pam_deny.so
pam_deny.so
required
有关 PAM 如何工作的更多信息,您可以 Google 搜索“PAM 如何工作”或者直接访问此处:http://www.tuxradar.com/content/how-pam-works
那就可以了!
答案2
我已经有一段时间没看过这个了,但是
我认为你需要编辑/etc/pam.d/common-auth
添加此顶部文件(规则的顺序很重要)。
auth required pam_tally.so per_user magic_root onerr=fail
然后设置允许尝试的次数
sudo faillog -m 3
解锁帐户
faillog -u login_name -r
更多详细信息请参阅
答案3
您还可以尝试使用 faillock 在 n 次登录尝试失败后锁定用户帐户。
我可以按照下面链接中的说明使其工作,该链接使用 pam_faillock.so,我猜它在 Ubuntu 和 CentOS 上都有效。
在 CentOS 和类似衍生版本上:
/etc/pam.d/system-auth
/etc/pam.d/password-auth
在 Ubuntu/Debian 和类似衍生版本上:
/etc/pam.d/common-auth
/etc/pam.d/common-account
希望这也能帮助其他人。