Ubuntu 24.04 系统默认已预装pam_faillock模块实现登录失败锁定,同时支持SSH远程连接、本地终端两类超时策略,下面是适配该版本的精准配置方案,同时规避Ubuntu 24.04特有的常见配置坑点:
一、登录失败锁定机制配置
Ubuntu 24.04 已经完全弃用老旧的pam_tally2模块,统一使用更稳定的pam_faillock,配置时需要特别注意模块顺序和权限要求,避免出现锁定不生效的问题:
编辑全局PAM认证规则
打开/etc/pam.d/common-auth文件,在文件相应位置插入以下(1、3、4)这3条规则,顺序不能调换:
#
# /etc/pam.d/common-auth - authentication settings common to all services
#
# This file is included from other service-specific PAM config files,
# and should contain a list of the authentication modules that define
# the central authentication scheme for use on the system
# (e.g., /etc/shadow, LDAP, Kerberos, etc.). The default is to use the
# traditional Unix authentication mechanisms.
#
# 1. 预认证检查 (Pre-auth): 检查用户是否已被锁定
# deny=5: 允许失败5次
# unlock_time=900: 锁定900秒(15分钟)
# fail_interval=600: 在600秒内的失败才计入
auth required pam_faillock.so preauth silent deny=5 unlock_time=900 fail_interval=600
# 2. 实际密码验证: 这是真正检查密码的地方
# 如果密码正确,pam_unix.so 返回成功,这一条一般原来配置里有,不用自己加
auth [success=1 default=ignore] pam_unix.so nullok try_first_pass
# 3. 认证失败处理: 如果上面密码验证失败,执行此条记录失败次数
auth [default=die] pam_faillock.so authfail deny=5 unlock_time=900 fail_interval=600
# 4. 认证成功处理: 如果密码正确,重置失败计数
auth sufficient pam_faillock.so authsucc deny=5 unlock_time=900 fail_interval=600
# 原有的其他配置...

规则说明:
10分钟(即600秒)内连续输错5次密码就触发账户锁定,锁定15分钟(即900秒)后自动解锁
关键解释:
- auth required pam_faillock.so preauth ...: 在验证密码前,先检查该用户是否因之前失败过多而被锁定。如果是,直接拒绝。
- auth [success=2 default=ignore] pam_unix.so ...: 尝试验证密码。
success=2: 如果密码正确,跳过下两行(即跳过pam_sss.so和authfail),直接去执行后面的 authsucc。success=1 的含义是:如果该模块执行成功,则跳过接下来的一行配置,直接执行第 2行
default=ignore: 如果密码错误,继续执行下一行。 - auth [default=die] pam_faillock.so authfail ...: 只有当 pam_unix.so 失败时才会执行到这里。它会记录一次失败,并立即返回失败(die),终止认证。
- auth sufficient pam_faillock.so authsucc ...: 只有当 pam_unix.so 成功时才会执行到这里(因为上面设置了 success=2 跳过了 authfail)。它会重置失败计数器,并返回成功(sufficient),允许登录。
如果需要强制root用户也遵守锁定规则,在第一行末尾追加even_deny_root参数
补充账户状态校验规则
打开/etc/pam.d/common-account文件,在pam_unix.so前添加一行,确保系统在登录前校验账户的锁定状态,避免出现SSH被锁但本地TTTY仍可登录的异常:
account required pam_faillock.so
修复Ubuntu 24.04专属权限问题
执行以下命令确保锁定状态目录权限正确,否则模块无法正常写入失败计数:
sudo chown root:root /var/run/faillock
sudo chmod 755 /var/run/faillock验证与手动解锁
配置即时生效,新开终端用测试账号连续输错5次密码就会触发锁定。查看指定用户的锁定状态命令:
sudo faillock --user 测试用户名faillock 命令的输出结果解释:
When Type Source Valid
2026-07-12 14:39:41 TTY /dev/pts/1 V <-- 唯一有效的失败记录
2026-07-12 14:32:03 TTY /dev/pts/0 I <-- 已过期/无效
2026-07-12 14:32:08 TTY /dev/pts/0 I <-- 已过期/无效
2026-07-12 14:32:16 TTY /dev/pts/0 I <-- 已过期/无效
2026-07-12 14:32:24 TTY /dev/pts/0 I <-- 已过期/无效
紧急手动解锁命令:
sudo faillock --user 用户名 --reset二、登录连接超时策略配置
覆盖SSH远程登录、本地终端两类场景,实现闲置会话自动超时退出:
SSH远程连接超时配置
打开/etc/ssh/sshd_config文件,修改/添加以下两行:
ClientAliveInterval 900
ClientAliveCountMax 0含义是SSH服务端每15分钟向闲置客户端发送保活探测,无响应就直接断开连接。同时可以额外设置LoginGraceTime 120,限制用户必须在2分钟内完成登录验证,避免未完成的闲置连接占用资源。
修改完成后重启SSH服务生效:
sudo systemctl restart sshd全局本地终端超时配置
打开/etc/profile文件,在末尾添加全局超时环境变量:
export TMOUT=900执行source /etc/profile让配置即时生效,所有新登录的本地终端、控制台会话,闲置超过15分钟就会自动退出。