太长不看版:
- 使用 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: f
slient
:不打印 informative(信息丰富的?)消息(没试出来这个开了有什么区别)。no_log_info
:不向系统日志打印 informative 消息。