chage -e 是唯一同时更新账户状态和密码策略上下文的命令,需用 yyyy-mm-dd 格式或 -1 表示永不过期,执行后须用 chage -l 验证 account expires 与 password expires 协调。

用 chage -E 改账号过期日期最稳妥
直接改 /etc/shadow 第8字段风险高,usermod -e 只动账户层、不联动密码逻辑,容易导致用户登录后立刻被拒——因为密码已过期但没提示重设。chage -E 是唯一同时更新账户状态和密码策略上下文的命令。
执行时注意:
-
chage -E 2026-12-31 username:日期必须是YYYY-MM-DD格式,不能写成12/31/2026或省略年份 - 设为
-1表示永不过期:chage -E -1 username - 清空过期时间(即恢复为“never”):用
chage -E "" username,不是chage -E 0 - 执行后务必用
chage -l username验证,重点看Account expires和Password expires两行是否协调
临时用户别只设过期日,得配宽限期和强制改密
只设 chage -E 不够。比如给外包人员开一个30天账号,如果没同步设 -M(密码最大使用天数)和 -d 0(首次登录强制改密),对方可能用默认弱密码撑满30天,或者中途密码过期却无法登录修改。
推荐组合操作:
- 创建时就定死:
useradd -e 2026-06-19 -m tempuser && passwd tempuser - 补设策略:
chage -M 30 -W 3 -d 0 tempuser(密码30天一换、提前3天警告、首次登录必须改密) - 若需更严控,加
-I 1:密码过期后仅允许1天内登录改密,超时自动锁账户
chage -l 输出里哪些字段真关键
chage -l username 看起来信息多,但真正影响登录行为的就三个字段:
-
Account expires:对应/etc/shadow第8字段,为empty或-1才算永不过期;填了具体日期,到那天 00:00 账户就不可用 -
Password expires:对应第7字段(max),值为99999表示密码永不过期;为0表示密码已过期,下次登录必须重设 -
Password inactive:对应第9字段(inactive),是密码过期后还能登录的宽限期天数;为empty或-1表示无宽限,密码一过期账户立即锁定
这三者不一致时,系统按最严规则执行——比如 Account expires 是 2026-06-20,但 Password expires 是 2026-05-20,那 5 月 20 日之后用户就登不上了,哪怕账户还没过期。
禁用临时用户,优先用 passwd -l 而非删账号
临时用户到期前想提前停用?别急着 userdel。删账号会连带清掉家目录、邮件、cron 任务,交接或审计时容易丢数据。
更安全的做法是锁定+切 shell:
-
passwd -l username:在/etc/shadow密码字段加!,登录认证直接失败 -
usermod -s /sbin/nologin username:即使绕过密码认证(如用密钥),也无法获得交互式 shell - 恢复只需两步:
passwd -u username+usermod -s /bin/bash username
这两步比重建用户快,且所有文件权限、历史记录、配置全保留。真正要删,也等确认无残留任务后再执行 userdel -r。











