Linux控制台超时锁定与重登录核验由systemd-logind和PAM协同实现:设IdleAction=lock及IdleActionSec=900触发15分钟无操作后冻结会话,用户返回需重新输入用户名密码;/etc/pam.d/login须配置pam_faillock.so或pam_tally2.so确保强制重认证,避免绕过验证。

Linux控制台(TTY)超时自动锁定与再次登录的身份核验,是保障物理或虚拟终端安全的基础措施。它不依赖图形界面或网络服务,直接作用于本地 Ctrl+Alt+F1~F6 终端,靠 systemd-logind 与 PAM 协同实现:空闲超时后会话冻结,用户返回必须重新输入用户名和密码——这才是真正有效的身份核验。
一、启用TTY空闲自动锁定
编辑 /etc/systemd/logind.conf,取消注释并设置以下三行:
- IdleAction=lock:指定空闲时执行“锁”动作(实际为会话冻结)
- IdleActionSec=900:设为900秒(即15分钟),也可按需改为300(5分钟)或600(10分钟)
- StopIdleSession=true(可选):更严格策略,空闲超时后直接终止会话,避免残留进程
保存后运行 sudo systemctl restart systemd-logind 生效。注意:此“lock”不是图形化锁屏,而是让TTY进入不可交互状态,按键后将清屏并提示重新登录。
二、确保重登录强制验证密码
仅设 IdleAction 不够——若 PAM 登录流程跳过认证,用户可能直接回车就进系统。关键在 /etc/pam.d/login 配置:
- 确认已启用 pam_faillock.so(RHEL 8+/Ubuntu 20.04+ 默认存在):
auth [default=ignore] pam_faillock.so preauth
auth [default=die] pam_faillock.so authfail - 若用旧系统(如 CentOS 7),可用 pam_tally2.so 替代,加在 login 文件顶部:
auth required pam_tally2.so onerr=fail deny=3 unlock_time=300 even_deny_root - 务必检查是否存在 auth [success=ok default=ignore] pam_permit.so 等绕过规则,有则注释掉
三、验证是否生效的三个动作
配置完别急着交付,立即做实测:
- 切换到 TTY(Ctrl+Alt+F2),正常登录;静置超过 IdleActionSec 设定时间,再按任意键——应看到黑屏或光标闪烁,回车后必须输用户名+密码
- 故意输错密码 2 次,再正确登录;随后运行 faillock --user $USER(或 pam_tally2 --user $USER),确认失败计数已清零
- 查日志确认联动正常:
journalctl -u systemd-logind | grep "locking" 或 "idle"
sudo tail -n 20 /var/log/auth.log | grep "pam_faillock\|login"
四、常见失效原因与修复
若空闲后未要求重输密码,优先排查:
- systemd-logind 服务未重启(最常见):执行 sudo systemctl status systemd-logind 看是否 active (running)
- PAM 配置写在了 /etc/pam.d/sshd 而非 login 文件——TTY 登录走的是 login 服务,不是 sshd
- 用户属于 wheel 或 sudo 组且配置了 NOPASSWD,可能触发其他 PAM 规则覆盖认证流程,建议测试普通用户账号


















