Debian配置pam_faillock实现登录失败锁定

pam_faillock.so简介

pam_faillock.so 是 Linux 系统中用于增强系统安全性的一个 Pluggable Authentication Module (PAM)。PAM 是一种在 Linux 系统中提供认证、授权、密码管理和会话管理的机制。pam_faillock.so 模块专注于防止密码暴力破解攻击,它通过锁定账户来响应连续的登录失败尝试。

当配置为 preauth 时,pam_faillock.so 会在认证过程开始之前检查失败的登录尝试次数。如果用户在指定的时间间隔内(例如 fail_interval 设置的值)达到了配置的失败尝试次数上限,模块将锁定该账户,防止进一步的登录尝试。

当配置为 authfail 时,如果认证失败,pam_faillock.so 将增加失败尝试的计数。这通常与 preauth 配置结合使用,以确保在认证过程中尽早检测到潜在的暴力破解尝试。

当配置authsucc时,它的作用是在用户成功认证后重置该用户账户的失败尝试计数器。这样可以确保用户的登录失败次数记录是准确的,避免了因用户之前登录失败次数过多而被错误地锁定账户。

pam_faillock.so 还可以在 account 模式下使用,以在账户管理阶段检查账户是否被锁定。如果账户被锁定,模块将不允许用户登录,直到锁定期限过期。

通过faillock.conf配置(官方推荐的做法)

修改 /etc/security/faillock.conf 的配置 pam_faillock 模块

# 失败次数
deny = 10
# 普通用户锁定600秒
unlock_time = 600
# 启用对root用户的失败锁定,锁定180秒
even_deny_root
root_unlock_time = 180

配置PAM在认证阶段调用 pam_faillock 模块,在 /etc/pam.d/common-auth 的顶部添加如下内容

auth     required       pam_securetty.so
auth     required       pam_env.so
auth     required       pam_nologin.so
auth     requisite      pam_faillock.so preauth
auth     [success=1 default=bad] pam_unix.so
auth     [default=die]  pam_faillock.so authfail
auth     sufficient     pam_faillock.so authsucc
auth     required       pam_deny.so
# 以下为针对会话的配置,可选
account  required       pam_unix.so
password required       pam_unix.so shadow
session  required       pam_selinux.so close
session  required       pam_loginuid.so
session  required       pam_unix.so
session  required       pam_selinux.so open

pam_securetty.sopam_env.sopam_nologin.sopam_unix.sopam_deny.sopam_unix.so shadowpam_selinux.so 和 pam_loginuid.so,是实现限制登录终端、加载环境变量、检查禁止登录文件、提供传统Unix认证、拒绝登录、处理密码更改、以及设置SELinux和loginuid等功能的。这些模块对于 pam_faillock 功能本身不是必须的,但它们是实现完整认证和会话管理所必需的,所以需要实现登录失败锁定功能就需要这些配置一起实现。

在PAM中直接配置

/etc/pam.d/common-auth 的顶部添加如下内容

auth     required       pam_securetty.so
auth     required       pam_env.so
auth     required       pam_nologin.so
auth     requisite      pam_faillock.so preauth deny=10 unlock_time=600
auth     [success=1 default=bad] pam_unix.so
auth     [default=die]  pam_faillock.so authfail deny=10 unlock_time=600
auth     sufficient     pam_faillock.so authsucc
auth     required       pam_deny.so
# 以下为针对会话的配置,可选
account  required       pam_unix.so
password required       pam_unix.so shadow
session  required       pam_selinux.so close
session  required       pam_loginuid.so
session  required       pam_unix.so
session  required       pam_selinux.so open

参考
pam_faillock(8) — libpam-modules — Debian unstable — Debian Manpages

配置服务器SSH PAM防止暴力破解 - 小得盈满 - 博客园