passwd命令不直接设置密码策略,实际由chage命令和pam模块控制:chage -w设警告天数(/etc/shadow第6字段),chage -m与-d共同决定强制改密时间,pam拦截并执行校验逻辑。

在Linux中,passwd 命令本身不直接设置密码过期警告天数或强制改密策略,真正控制这些行为的是 chage 命令和系统级密码策略(如PAM模块)。但passwd 会尊重并响应这些配置——比如当密码即将过期时,普通用户执行passwd会被提示修改;当密码已过期,passwd可能被拒绝,除非以 root 身份运行。
密码过期警告天数由 chage -W 控制
系统会在密码到期前若干天开始向用户发出警告(例如登录时提示“Your password will expire in X days”)。这个“X”由 chage -W 设置:
-
sudo chage -W 7 username:设置提前7天警告 - 该值存储在
/etc/shadow的第6字段(warn)中 - 若设为0,表示不警告;若为负数(如-1),部分系统解释为“禁用警告”,但行为依赖PAM配置
强制改密时间由 chage -M 和 -d 共同决定
用户是否被强制修改密码,取决于两个关键时间点:
-
chage -M 90 username:密码最长使用期限为90天(/etc/shadow 第5字段:max) -
chage -d 0 username:将“最后修改日期”设为0,即下次登录必须改密(/etc/shadow 第4字段:last password change) - 实际过期时间 = last password change + max。若当前日期 > 该时间,密码即过期,普通用户无法用
passwd自行修改(需管理员重置)
PAM 模块才是真正的执行者
passwd 命令本身只是接口,是否允许修改、是否提示警告、是否拒绝过期用户,均由 PAM 策略控制:
- 检查
/etc/pam.d/passwd或/etc/pam.d/common-password - 常见相关行:
password [default=ok] pam_unix.so obscure sha512(基础校验) - 关键控制来自
pam_chauthtok.so和pam_pwquality.so,它们读取chage数据并触发逻辑 - 例如:若用户密码已过期,PAM 会拦截
passwd请求,并返回 “Authentication token is no longer valid; new one required”
日常运维中的典型操作组合
管理员常用命令组合来实现“新用户首次登录强制改密+7天预警”:
sudo useradd -m -s /bin/bash newuserecho "newuser:password123" | sudo chpasswd-
sudo chage -d 0 newuser(强制首次登录改密) -
sudo chage -M 90 -W 7 newuser(90天有效期,提前7天提醒) - 验证:
chage -l newuser查看全部策略状态











