linux密码策略核心由chage命令与pam模块协同实现:设有效期(-m)、最短间隔(-m)、警告期(-w);强制首次改密需chage -d 0;复杂度与历史限制通过pam_pwquality.so和pam_pwhistory.so配置;新用户默认策略由/etc/login.defs统一管理。

Linux 用户密码过期与强制修改策略,核心靠 chage 命令控制有效期和触发时机,再配合 PAM 模块 确保新密码合规、不重复。单独设过期时间不等于用户会改密码,必须用 chage -d 0 显式标记“已过期”,登录时才真正拦截并引导改密。
设置密码有效期与提醒周期
密码不能永远有效,需设定最长使用天数、最短更换间隔和提前警告时间:
-
sudo chage -M 90 username:密码最多用 90 天,到期后无法继续使用 -
sudo chage -m 1 username:两次改密至少隔 1 天,防反复重设相似密码 -
sudo chage -W 14 username:提前 14 天在登录时提示“Your password will expire…”
这些值直接写入 /etc/shadow 对应字段,立即生效,无需重启服务。
强制用户首次登录修改密码
新账号或重置密码后,必须让系统“认为密码早已该换了”:
- 先确保用户有可用密码:
sudo passwd username(状态显示P,非NP或L) - 执行
sudo chage -d 0 username:把“上次修改日期”设为 0(即 1970-01-01) - 验证:
sudo chage -l username中 “Password must be changed” 显示 yes
注意:该机制只对密码认证登录生效(如 SSH 密码登录、图形界面输入密码),SSH 密钥登录会跳过。
配置密码复杂度与历史限制
仅设过期不够,新密码还得足够强、不能循环使用旧密码:
- 编辑
/etc/pam.d/common-password(Debian/Ubuntu)或/etc/pam.d/system-auth(RHEL/CentOS) - 添加或确认这行:
password requisite pam_pwquality.so retry=3 minlen=10 ucredit=-1 lcredit=-1 dcredit=-1 ocredit=-1 difok=3 maxrepeat=3 - 再加一行启用历史记录:
password [default=ok] pam_pwhistory.so use_authtok remember=5 enforce_for_root
这样用户改密时,必须满足 10 位以上、含大小写字母/数字/特殊字符各至少 1 个、与旧密码至少 3 字符不同、且不能是最近 5 次用过的任意一个。
统一新用户默认策略
避免每次建用户都手动跑 chage,把基础规则写进全局配置:
- 编辑
/etc/login.defs,设置以下三行(已有则修改,无则添加): -
PASS_MAX_DAYS 90—— 新建用户默认密码最多用 90 天 -
PASS_MIN_DAYS 1—— 新建用户两次改密至少隔 1 天 -
PASS_WARN_AGE 14—— 提前 14 天开始提醒
这些参数只影响 useradd 创建的新用户,已有用户需单独用 chage 设置。











