Linux系统不支持账号长期不使用自动注销,需结合chage设密码有效期、脚本定期锁定闲置账号及TMOUT会话空闲控制实现;chage -M 90最常用,脚本用lastlog -b 180配合usermod -L,TMOUT需export且配SSH参数。

Linux 系统本身**不支持“账号长期不使用就自动注销”这一类基于时间阈值的被动停用机制**(比如“90天未登录就禁用账号”)。TMOUT 控制的是**当前会话空闲超时**,不是账号级的长期闲置管理。真正实现“长期不使用自动禁用账号”,需结合密码策略、定期巡检脚本或 PAM 模块辅助,而非单靠一个配置项。
一、用 chage 设置账号最大密码有效期(最常用)
这是生产环境最主流、内核原生支持的方式:让账号因密码过期而无法登录,等效于“长期不用即失效”。
-
对已有用户:运行
sudo chage -M 90 username,表示密码90天后过期;过期后用户首次登录会强制要求改密,若不操作则无法进入系统 -
对新建用户统一生效:编辑
/etc/login.defs,修改PASS_MAX_DAYS 90(默认常为99999,即永不过期) -
增强控制:可追加
chage -I 7 -W 7 username,表示密码过期后宽限期7天(-I),提前7天开始警告(-W)
二、用脚本定期检查并锁定闲置账号(需定时任务)
适用于需要严格按“最后登录时间”判断的场景,例如审计要求“180天未登录即冻结”。
- 编写脚本(如
/usr/local/bin/lock-inactive-users.sh):lastlog -b 180 | awk '$NF != "Never" {print $1}' | xargs -r -I{} sudo usermod -L {}表示:查出180天内从未登录过的账号,执行锁定(-L加密密码字段) - 用 cron 每周执行一次:
0 2 * * 0 root /usr/local/bin/lock-inactive-users.sh - 注意:
lastlog依赖系统记录,需确保rsyslog正常运行且未被清空
三、配合 TMOUT 实现会话级空闲自动退出(补充防护)
这不是“账号注销”,但能防止运维人员离开终端后会话持续挂起,是安全基线必备项。
- 在全局配置文件中设置(推荐
/etc/profile或/etc/zsh/zprofile):export TMOUT=600(10分钟无操作自动登出) - 必须写
export,否则子 Shell 不继承;不要加readonly初期,避免排障困难 - 同步调整 SSH 服务端参数(
/etc/ssh/sshd_config):ClientAliveInterval 300ClientAliveCountMax 2
防止 TCP 连接残留,与 TMOUT 协同断连
四、验证与注意事项
配置后务必验证效果,避免误锁关键账号。
- 查某用户密码到期状态:
chage -l username - 查某用户最后登录时间:
lastlog -u username或sudo loginctl user-status username(systemd 环境) - 切勿对
root、sshd、systemd-network等系统账号执行锁定或设短有效期 - 所有脚本和定时任务应先在测试账号上验证逻辑,再上线











