![如何配置在第 x 个错误输入密码时关机?](https://linux22.com/image/151574/%E5%A6%82%E4%BD%95%E9%85%8D%E7%BD%AE%E5%9C%A8%E7%AC%AC%20x%20%E4%B8%AA%E9%94%99%E8%AF%AF%E8%BE%93%E5%85%A5%E5%AF%86%E7%A0%81%E6%97%B6%E5%85%B3%E6%9C%BA%EF%BC%9F.png)
拥有加密的硬盘固然很好,但如果有人要偷你的笔记本电脑,它可能不会被关闭。最有可能的是,它会在通电状态下被盗。因此,您的加密硬盘根本不会提高您的安全性,因为它目前尚未解锁。
就是这样这篇博客文章解释了问题以及 Debian 上的设置。
因此,当您输入错误的用户解锁密码(例如 4 次)时,一个好的解决方案可能是关闭设备。
然而,我什至很难在我的系统中找到common-auth
或。 (Fedora)另外,我想这篇文章可能有点过时,或者可能不是最好的解决方案。由于我还没有发现这个问题已经被问到这里,我想我最好问一下。common-account
/etc/pam.d
所以一般来说:如何配置在第 x 次错误输入密码后自动关机?
请注意,这是一项安全要求,因此您不应该无法取消关闭。另外,如果你将每个用户计数为 3,那就有点糟糕了,实际上你应该最好有一些全局计数器,这样攻击者就无法切换到另一个用户来首先尝试登录。
交叉发布在询问 Fedora。
答案1
2023 解决方案在 ubuntu 上运行pam_faillock(pam_tally2 已弃用):
小心,你可以把自己锁起来:编辑 pam 文件将立即生效,并且在此过程中您很可能会多次破坏身份验证。如果您对此不满意,请不要继续。一些事情可以让你省去很多麻烦;
- 在 root tty 中预打开和预登录 (
ctrl + alt + f3
) - 在编辑任何文件之前备份它们(例如
cp /etc/pam.d/common-auth ~/common-auth.bak
) - 手头上有一个实时启动 USB 密钥
在/etc/pam.d/common-auth
:
# here are the per-package modules (the "Primary" block)
auth [success=1 new_authtok_reqd=ok ignore=ignore default=bad] pam_faillock.so deny=3 even_deny_root unlock_time=10
auth required pam_exec.so /usr/sbin/poweroff
auth [success=3 default=ignore] pam_unix.so nullok
auth [success=2 default=ignore] pam_sss.so use_first_pass
# here's the fallback if no module succeeds
auth [default=die] pam_faillock.so authfail
auth requisite pam_deny.so
# prime the stack with a positive return value if there isn't one already;
# this avoids us returning an error just because nothing sets a success code
# since the modules above will each just jump around
auth required pam_permit.so
# and here are more per-package modules (the "Additional" block)
auth optional pam_cap.so
# end of pam-auth-update config
auth sufficient pam_faillock.so authsucc
详细解释:
首先要知道这success=n
意味着skip the next n lines if the current line succeeds
。这不仅用于仅在满足故障锁定条件时触发断电,还用于确定故障锁定何时应注册失败或成功的登录尝试。
以下两行在 3 次尝试失败后触发关机。
auth [success=1 new_authtok_reqd=ok ignore=ignore default=bad] pam_faillock.so deny=3 even_deny_root unlock_time=10
auth required pam_exec.so /usr/sbin/poweroff
然后,您将分别获得预先存在的 ubuntu 身份验证逻辑,success=3
并success=2
对其进行编辑以跳过预先存在的 pam_deny 内容以及 pam_faillock 的新行。
auth [success=3 default=ignore] pam_unix.so nullok
auth [success=2 default=ignore] pam_sss.so use_first_pass
然后你有这一行,它告诉 pam_faillock 注册失败的登录尝试。如果前面的 pam_unix 逻辑通过,则跳过此行。
auth [default=die] pam_faillock.so authfail
最后,如果配置中没有任何内容将登录尝试标记为失败,我们指示 pam_faillock 注册成功的登录尝试。这很重要,否则 pam_faillock 将永远不会重置。
auth sufficient pam_faillock.so authsucc
边注;我是一名 pam 菜鸟,所以请对我的解释持保留态度。但这确实适用于我的设置。
答案2
你可以使用pam_tally2和pam_exec达到这个结果。
如果您在 的开头添加以下内容/etc/pam.d/login
,则系统应在 5 次登录失败后第 6 次尝试时关闭。
auth [success=1 new_authtok_reqd=ok ignore=ignore default=bad] pam_tally2.so onerr=succeed deny=5 even_deny_root unlock_time=30
auth required pam_exec.so /usr/bin/poweroff
- success=1 如果 pam_tally2 成功,则跳过下一行,防止系统关闭。
- unlock_time=30 30 秒后自动解锁帐户,以防止您的 root 帐户永久锁定。
注意:如果您使用显示管理器(如 GDM、LightDM 等),您可能需要向相应的 PAM 配置添加类似的规则(如果您不允许图形 root 登录,则可能没有even_deny_root
和)。unloock_time
答案3
除了 PAM 选项之外,还可以使用日志。现在,我从 Fedora 切换到 Slackware,所以确切的文件可能是错误的,但如果你输入这样的内容:
#!/bin/bash
if [ -f /tmp/erlogin ] ; then
oldvalue=$(cat /tmp/erlogin)
newvalue=$(grep 'invalid password' /var/log/secure|wc -l)
if [ $((newvalue-oldvalue)) -gt 3 ] ; then
shutdown -h now
fi
fi
grep 'invalid password' /var/log/secure|wc -l> /tmp/erlogin
每 10 分钟左右一次。