chage命令可直接设置用户密码策略且立即生效:-M设最长使用天数(如90天),-W设警告天数(需小于-M),-I设过期后宽限期,-l查看当前设置,批量处理可用awk+xargs。

直接用 chage 命令设置最有效,不需要改配置文件或重启服务,设完立刻生效。
设置密码最长使用天数(最常用)
这是控制“密码过期”的核心参数。比如要求每 90 天必须换一次:
-
sudo chage -M 90 username:密码 90 天后到期,到期后登录会强制改密 -
sudo chage -M 0 username:等效于chage -d 0,下次登录立即要求改密 -
sudo chage -M -1 username或sudo chage -M 99999 username:密码永不过期(慎用)
配合警告天数,让用户提前知道
只设有效期不够,用户可能忽略。加 -W 才会在登录时提示:
-
sudo chage -M 90 -W 7 username:密码 90 天后过期,提前 7 天起每次登录都显示 “Your password will expire in X days.” - 注意:
-W值必须小于-M,且密码必须有实际到期日,否则不提示 - 该提示只出现在交互式密码登录(如 SSH 密码登录、图形界面输入密码),密钥登录、cron、su 等场景不会触发
控制过期后的宽限期(防锁死)
密码到期后,用户可能来不及响应。用 -I 设置缓冲期:
-
sudo chage -M 90 -W 7 -I 14 username:到期后还能登录 14 天,但每次都要改密;第 15 天起账户被锁定 -
-I 0表示一过期就锁账户,容易引发运维问题,不推荐 -
-I和-E不同:-E是账户整体失效(连登录都不让),-I只限制密码有效性
验证和批量处理
查当前设置用:
-
sudo chage -l username:看 “Password expires”、“Maximum number of days…” 等字段 - 批量处理已有用户(如 UID ≥ 1000 的普通用户):
getent passwd | awk -F: '$3 >= 1000 {print $1}' | xargs -I{} sudo chage -M 90 -W 7 {} - /etc/login.defs 只影响新用户,改了它对老用户完全无效


















