密码过期后账号宽限期由 chage -i 参数控制,定义用户可用旧密码登录的最后天数,超期自动锁定;-i 与 -e 共存时以先触发者为准,典型配置为 sudo chage -m 90 -w 7 -i 14 username。

设置密码过期后的账号宽限期(Inactivity Period),关键用 chage -I 参数。它定义密码过期后,用户还能用旧密码登录的最后期限;一旦超过这个天数,系统将自动拒绝登录,等效于锁定账户——无需脚本或定时任务,内核级生效。
宽限期(-I)的作用和逻辑
宽限期不是“允许继续使用旧密码的缓冲时间”,而是“强制改密的最后窗口”。在此期间每次登录,系统都会提示改密;若未操作,到期即锁。
- -I 0:密码一过期就立即锁定,用户无响应机会,易引发紧急求助
- -I 7:密码过期后还可登录7天,第8天起登录失败,报错 "Your account has expired"
- -I 和 -E 同时存在时,以先触发者为准:例如 -E 设为 2026-10-01,-I 设为 14 天,而密码在 9 月 20 日过期,则账户会在 10 月 4 日(过期+14天)被锁,但若 -E 日期更早(如 10 月 1 日),则 10 月 1 日当天就彻底禁用
典型配置示例
一条命令即可完成常用组合:
sudo chage -M 90 -W 7 -I 14 username
- -M 90:密码最长使用90天
- -W 7:到期前7天开始每次登录都提醒
- -I 14:过期后还有14天宽限期,之后自动锁定
执行后可用 chage -l username 验证,输出中会显示 Password inactive 字段,值为具体日期(如 Sep 30, 2026),该日期 = 密码过期日 + -I 天数。
增强锁定效果的配合操作
仅设 -I 能防密码登录,但无法阻止 SSH 密钥、cron 或 systemd 用户服务等非密码路径。建议叠加以下任一方式:
- 禁用交互式 shell:sudo usermod -s /sbin/nologin username(最常用,阻断所有终端登录)
- 锁定密码字段:sudo passwd -l username(/etc/shadow 中加 !!,但不影响密钥登录)
- 两者并用更稳妥:sudo chage -I 14 username && sudo usermod -s /sbin/nologin username
常见误区提醒
别把 passwd -l 当成宽限期控制手段——它只是加锁密码字段,不涉及时间策略;也别以为 -M 设置后账户就自动停用,它只管“是否强制改密”,不管“能否登录”。真正实现到期自动锁定的,是 -I(宽限期结束)或 -E(账户绝对过期)。











