Linux密码过期提醒靠chage的-W与-M参数配合实现:-W必须小于-M,登录时自动提示;单用户用chage -W设置,全局修改/etc/login.defs中PASS_WARN_AGE值。

Linux 用户密码过期提前提醒不是靠“开启开关”,而是靠两个关键数字的配合:密码最大有效期(-M)和警告天数(-W)。只要 -W 小于 -M,用户登录时就会自动看到提示,无需重启、不依赖邮件服务、也不用改代码。
给单个用户设提醒(立刻生效)
用 chage -W 设置提前多少天开始提醒,这个值必须比密码有效期短:
- 让 alice 提前 7 天收到提示:sudo chage -W 7 alice
- 查看是否设置成功:chage -l alice → 找到 “Number of days of warning before password expires” 字段
- 如果该字段是 0,表示不提醒;设为负数(如 -1)多数系统会禁用提醒,不推荐
让所有新用户默认带提醒(一劳永逸)
修改全局配置文件,影响今后用 useradd 创建的所有普通用户:
- 编辑:sudo nano /etc/login.defs
- 找到或添加这一行:PASS_WARN_AGE 7(把 7 换成你想要的天数)
- 保存退出。之后新建的用户,chage -l 查看时“警告天数”就是这个值
为什么登录后没看到提醒?常见原因
提醒只在交互式登录时触发,且有前提条件:
- 用户必须实际登录(比如 ssh 或 console),不是后台脚本或免密 key 登录
- 密码得真正设了有效期——如果 chage -M 是 99999 或 -1,那 -W 就不会起作用
- root 和 UID < 1000 的系统账户,很多发行版默认跳过提醒
- 提醒只显示在登录成功后、Shell 启动前那一行,容易一闪而过;如需更醒目,可加 PAM 消息或 ~/.bashrc 横幅
想发邮件提醒?得自己加脚本+定时任务
系统原生的 -W 不发邮件,要实现自动邮件通知,需三步组合:
- 先用 chage -W 7 username 设好阈值
- 写一个脚本,遍历用户、算剩余天数、调用 mail 命令发信(需提前装好 mailutils 或 mailx)
- 用 sudo crontab -e 添加定时任务,例如每天上午 9 点执行:0 9 * * * /usr/local/bin/check_pw_expiry.sh


















