如何配置在第 x 个错误输入密码时关机?

如何配置在第 x 个错误输入密码时关机?

拥有加密的硬盘固然很好,但如果有人要偷你的笔记本电脑,它可能不会被关闭。最有可能的是,它会在通电状态下被盗。因此,您的加密硬盘根本不会提高您的安全性,因为它目前尚未解锁。

就是这样这篇博客文章解释了问题以及 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=3success=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_tally2pam_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 分钟左右一次。

相关内容