Featured image of post 【Linux】修改登录界面 密码三次错误锁定时间

【Linux】修改登录界面 密码三次错误锁定时间

太长不看版:

  1. 使用 root 权限打开 /etc/security/faillock.confvim 可换成其它编辑器,如 nano
1
$ sudo vim /etc/security/faillock.conf
  1. 取消注释并修改unlock_time一项,60 可替换为你想要的秒数(默认600秒)
1
unlock_time = 60
  1. 或者,修改deny一项关闭错误锁定
1
deny = 0

背景

今天清晨我刚刚起床,在迷糊中想看看半夜挂机训练的模型的效果,于是抓起笔记本开机,输密码。结果因为我没睡醒,输错了三次密码,屏幕上跳出了这个提示:

The account is locked due to 3 failed logins. (10 minutes left to unlock)

(登录界面的壁纸是 さなせ 老师画的 银狼。)

哇!我用了一年多的 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].

使用 vimnano 等文本编辑器以 root 权限打开 faillock 的配置文件:

1
$ sudo vim /etc/security/faillock.conf

可以发现默认的配置文件里(可能因发行版不同而有差异)已经解释了每一项配置及其作用,我们要做的只是取消对应行的注释,修改成我们想要的数值。

账户锁定相关的配置

对于非共享的PC而言我觉得最重要的也就三项:denyfail_intervalunlock_time。这三项用一句话来概括就是:“deny0时无论输错多少次都不会锁定账户,否则,在{fail_interval}秒内连续密码错误{deny}次会导致账户被锁定{unlock_time}秒。”这三项的默认值分别是deny=3fail_interval=900unlock_time=600

为了避免暴力破解,我没有将deny设为 0,以下是我的配置:

1
2
3
deny = 3
fail_interval = 60
unlock_time = 60

因为比起默认的 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

日志相关的配置

在命令行中使用:

1
$ journalctl --since today -fg pam

可以看到今天以来与 PAM 有关的日志,使用 faillock 指令可以看到系统当前记录的登录失败的信息,例如:

1
2
3
4
5
6
$ faillock --user furffico
furffico:
When                Type  Source            Valid
2024-03-21 13:16:24 RHOST 192.168.1.101         V
2024-03-21 13:16:27 RHOST 192.168.1.101         V
2024-03-21 13:16:30 RHOST 192.168.1.101         V

配置文件内与日志相关的配置有三个:

  • 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 消息。

参考资料

使用 Hugo 构建
主题 StackJimmy 设计