linux中强制用户定期更换密码需设密码最长有效期(如chage -m 90)、最小更换间隔(-m 7)和警告期(-w 14),并确保pam模块正常启用,仅对密码认证的交互式登录生效。

在 Linux 中强制用户定期更换登录密码,核心是让系统在密码到期时拦截登录并要求重设——不是单纯“提醒”,而是真正阻止继续使用旧密码。这需要两层配合:一是设定密码有效天数,二是确保登录流程会检查并执行该策略。
设置密码最长有效期(-M)
用 chage -M 90 username 可将指定用户密码设为最多使用 90 天。到期后,用户仍能登录一次,但登录成功后立刻被要求改密,无法跳过或延迟。这个值写入 /etc/shadow 的第 5 字段,直接生效。
- 若设为 -M 0,表示密码立即失效,等同于首次登录强制改密
- 设为 -M -1 或留空,则禁用过期机制(不推荐)
- 对新用户统一生效,需同步修改
/etc/login.defs中的 PASS_MAX_DAYS 90
防止用户绕过:加最短间隔与警告期
只设最长有效期不够,用户可能当天改完又立刻再改一次来“刷时间”。所以必须搭配最小更换间隔和提前警告:
Zynq‑7000 / Zynq UltraScale+ 硬件调试技能。适用于 Xilinx Zynq(Cortex‑A9/A53 + FPGA)Linux 环境,调试 I2C、I2S、UART、GPIO 等外设。包括设备树配置、内核驱动、用户空间调试工具、交叉编译和常见问题排查,支持 PetaLinux 开发。
- chage -m 7 username:两次改密至少隔 7 天,防快速循环操作
- chage -W 14 username:登录时提前 14 天提示 “Your password will expire in X days”
- 这些参数同样要写入
/etc/login.defs才能让新建用户自动继承
确认 PAM 正常参与认证流程
chage 设置只是“存规则”,真正执行检查靠 PAM 模块。如果 /etc/pam.d/common-password(Debian/Ubuntu)或 /etc/pam.d/system-auth(RHEL/CentOS)里禁用了 pam_unix.so 的 password 段,或者配置了跳过逻辑,那密码过期就形同虚设。
- 检查是否存在类似这行:password [success=1 default=ignore] pam_unix.so
- SSH 密钥登录、
su -切换、cron 任务等都不触发改密流程,只对密码认证的交互式登录有效 - 测试前建议用 ssh -o PubkeyAuthentication=no user@localhost 模拟纯密码登录
验证是否真正生效
别只看命令有没有报错,关键查 /etc/shadow 和实际行为:
- 运行 chage -l username,确认 “Password expires” 显示具体日期,“Minimum number of days” 是你设的值
- 用 sudo awk -F: '$5 == "90" {print $1}' /etc/shadow 可批量查哪些用户设了 90 天有效期
- 手动把系统时间调到过期日后,再用密码登录,观察是否被强制中断并引导改密










