太长不看版:
- 使用 root 权限打开
/etc/security/faillock.conf(vim可换成其它编辑器,如nano)
| |
- 取消注释并修改
unlock_time一项,60 可替换为你想要的秒数(默认600秒)
| |
- 或者,修改
deny一项关闭错误锁定
| |
背景
今天清晨我刚刚起床,在迷糊中想看看半夜挂机训练的模型的效果,于是抓起笔记本开机,输密码。结果因为我没睡醒,输错了三次密码,屏幕上跳出了这个提示:

哇!我用了一年多的 EndeavourOS 第一次见到这个提示。再怎么说输错三次要锁 10 分钟也太无情了吧,如果我急着用怎么办。怎么改变这个设置呢?
faillock 配置
由于我不知道这个部分具体是那个模块负责的,搜索的过程还是有一些波折的。在这个过程中,我发现登录界面(greeter)由 LightDM 的 greeter [1] 提供,登录验证由 Pluggable Authentication Modules (PAM) [2][3] 处理,账户锁定的部分则由 PAM 的模块pam_faillock.so负责。前者的配置文件在 /etc/lightdm/ 文件夹下,文件名视所使用的 greeter 而定(我这里是slick-greeter.conf),后者的配置文件是 /etc/security/faillock.conf[4].
使用 vim、nano 等文本编辑器以 root 权限打开 faillock 的配置文件:
| |
可以发现默认的配置文件里(可能因发行版不同而有差异)已经解释了每一项配置及其作用,我们要做的只是取消对应行的注释,修改成我们想要的数值。
账户锁定相关的配置
对于非共享的PC而言我觉得最重要的也就三项:deny,fail_interval和unlock_time。这三项用一句话来概括就是:“deny为0时无论输错多少次都不会锁定账户,否则,在{fail_interval}秒内连续密码错误{deny}次会导致账户被锁定{unlock_time}秒。”这三项的默认值分别是deny=3,fail_interval=900和unlock_time=600
为了避免暴力破解,我没有将deny设为 0,以下是我的配置:
| |
因为比起默认的 10 分钟,1 分钟我觉得是兼顾了安全和便捷的选择。
另外,faillock 记录的登录失败次数默认是放在 /var/run/faillock 内的,而这个文件夹处在临时文件系统 tmpfs 内,也就是说当账户因多次密码错误被锁定时,只要重启电脑就能解除锁定[5]。修改配置文件的dir一项,将文件夹改到持久存储的文件系统内即可防止重启解除锁定(例如/var/lib/faillock)。
我还试了一下,在默认情况下使用 ssh 远程登陆也是有可能触发账户锁定的(当然这个也取决于PAM的配置),当账户锁定时即使密码正确也会返回 Permission denied, please try again.。
root 相关的配置
在默认情况下,为了防止 DOS 攻击, faillock 是不会锁定 root 账户的 [6]。开启 even_deny_root 这一项则让 faillock 可以锁定 root 。使用 root_unlock_time 可以为 root 账户单独设置锁定时间,并且设置这项会隐式开启even_deny_root。
日志相关的配置
在命令行中使用:
| |
可以看到今天以来与 PAM 有关的日志,使用 faillock 指令可以看到系统当前记录的登录失败的信息,例如:
| |
配置文件内与日志相关的配置有三个:
audit: 当用户不存在时将用户名记入系统日志。1 2 3 4# before: sshd[134004]: pam_faillock(sshd:auth): User unknown # after: sshd[136827]: pam_faillock(sshd:auth): User unknown: fslient:不打印 informative(信息丰富的?)消息(没试出来这个开了有什么区别)。no_log_info:不向系统日志打印 informative 消息。
