最准确常用的是chage -e命令设置账户整体失效时间,格式为sudo chage -e yyyy-mm-dd username,需配合-m、-w、-i等参数协同密码策略,避免登录异常。

直接用 chage -E 命令设置最准确、最常用。它专管账户整体失效时间,和密码过期逻辑分离又协同,避免只改账户日期却忽略密码状态导致登录异常。
设置账户截止日(最核心操作)
账户过期是指到了指定日期后,用户完全无法登录系统,哪怕密码还有效。
命令格式:
- sudo chage -E 2026-12-31 username:账户在 2026 年 12 月 31 日当天结束时禁用
- sudo chage -E -1 username 或 sudo chage -E never username:取消账户过期限制
- 日期必须是 YYYY-MM-DD 格式,不能带空格或时区,否则报错
配合密码策略,防止“能登不能用”
只设 -E 容易出问题:账户还没过期,但密码已过期且无提示,用户一登录就被强制改密甚至卡住。建议组合使用:
- sudo chage -M 60 username:密码最多用 60 天,到期前需更新
- sudo chage -W 7 username:密码到期前 7 天开始每次登录都提示
- sudo chage -I 14 username:密码过期后还能登录 14 天,但必须当场改密;超期则账户被锁
- 例如:sudo chage -E 2026-12-31 -M 60 -W 7 -I 14 username
查看和验证是否生效
执行后务必检查,避免参数没生效:
- chage -l username:看输出中 Account expires 和 Password expires 两行
- 若 Account expires 显示 never,说明 -E 没写对或权限不足
- 若 Password expires 是 never,而你设了 -M,说明该用户未继承策略——/etc/login.defs 不影响已有用户,必须单独 chage
批量设置多个用户
对一批用户统一设账户截止日,用循环更安全可靠:
- for u in alice bob carol; do sudo chage -E 2026-12-31 "$u"; done
- 避免用 usermod -e:它只动账户过期字段,不联动密码策略,易引发登录行为不一致
- 如需筛选普通用户批量处理,可用:awk -F: '$3 >= 1000 && $1 != "nobody" {print $1}' /etc/passwd | xargs -n1 sudo chage -E 2026-12-31











