用chage命令直接修改单个用户密码策略,/etc/login.defs仅影响新用户;-m设最大有效期,-d 0强制下次登录改密,-l查看实际生效值。

直接用 chage 命令改,别碰 /etc/login.defs 里全局配置去“影响新用户”——那对已存在用户完全无效。
chage -M 设置密码最大有效期(最常用)
这是修改单个用户密码过期天数的核心操作。比如让 nginx 用户密码 180 天后过期:
-
sudo chage -M 180 nginx—— 过期时间 = 最后一次改密日期 + 180 天 -
sudo chage -M 99999 nginx或sudo chage -M -1 nginx都会让Password expires显示为never,效果等价(CentOS 7/8 均支持-1) - 注意:
-M只控制“密码本身过期”,不影响账号整体是否可用(那是-E控制的)
chage -d 强制用户下次登录改密码
当用户密码已过期、或你刚重置了密码但想让用户立即设新密码时,用这个:
CentOS Linux 7.9.2009是传统CentOS Linux 7的最后主要版本,也是很多企业历史服务器中仍可能遇到的系统版本。它以稳定、兼容RHEL 7生态、文档丰富和软件支持广泛著称,曾长期用于Web服务、数据库、虚拟化节点和企业内部业务系统。不过CentOS Linux 7已于2024年6月30日停止维护,现在继续使用会面临安全补丁缺失风险。该版本更适合旧业务迁移、历史环境恢复或离
-
sudo chage -d 0 nginx—— 把“最后修改密码日期”设为 Unix 时间戳 0(即 1970-01-01),系统会认为密码已过期,登录时强制跳转到改密流程 - 常见错误:只改
-M却不设-d 0,结果用户仍能正常登录,只是过期提醒延迟出现 - 搭配使用更稳妥:
sudo chage -d 0 -M 90 nginx,既强制首次登录改密,又设后续有效期为 90 天
chage -l 查看当前生效的密码策略
别凭记忆或猜,每次修改后必须验证实际效果:
-
chage -l nginx输出里的Last password change和Password expires才是真实生效值 - 注意区分:
Maximum number of days between password change是-M设置的值,但它不等于过期时间——真正过期时间 =Last password change+ 该数值 - 如果看到
Password expires : never但Maximum number of days between password change : 90,说明-d或-M某个没生效,得重跑命令
为什么改了 /etc/login.defs 却没用?
因为 /etc/login.defs 只影响 新创建用户,对已有用户完全无感:
- 例如把
PASS_MAX_DAYS从 90 改成 180,再新建用户testuser,chage -l testuser才会显示 180 天 - 但已存在的
nginx、mysql等用户,其Maximum number of days仍保持原值,除非你显式执行chage -M - 误改
/etc/login.defs还可能引发新用户策略混乱,建议只在批量建号前调整
真正容易被忽略的是:密码过期时间不是静态写死的,它依赖 Last password change 这个动态基准点。哪怕你设了 -M 90,只要用户没改过密码,过期日就永远卡在初始值上——所以运维中常要配合 -d 0 或手动触发一次密码更新。










