需同时配置pam模块和/etc/login.defs文件:一、密码最短长度由pam_pwquality.so的minlen参数控制,/etc/login.defs中pass_min_len仅影响新建用户默认值;二、密码有效期由pass_max_days和pass_warn_age设定,并用chage命令为已有用户单独应用;三、常见失效原因包括pam路径选错、策略重复定义、未重新登录及root被绕过;四、验证需检查配置文件、测试密码修改及chage命令输出。

设置服务器账户密码最短长度与有效期,需同时配置 PAM 密码校验模块和系统全局策略文件,二者协同生效。单独改某一项往往无效,尤其在银河麒麟、CentOS、RHEL 等主流 Linux 发行版中。
一、设置密码最短长度(最小字符数)
核心是修改 PAM 模块参数,/etc/login.defs 中的 PASS_MIN_LEN 仅影响新建用户默认值,不强制校验,真正起效的是 pam_pwquality.so(或旧版 pam_cracklib.so)。
- 编辑 PAM 密码策略文件:
银河麒麟 V10 桌面版常用:sudo nano /etc/pam.d/common-password
服务器版(如 CentOS/RHEL/银河麒麟服务器)常用:sudo nano /etc/pam.d/system-auth - 找到含
pam_pwquality.so或pam_cracklib.so的 password 行,例如:password requisite pam_pwquality.so retry=3 minlen=8 difok=3
将minlen=8改为所需值,如minlen=10 - 若该行不存在,可新增一行(确保位置在其他 password 规则之前):
password requisite pam_pwquality.so minlen=10 retry=3 difok=3 ucredit=-1 lcredit=-1 dcredit=-1 ocredit=-1
(其中 u/l/d/o credit 分别控制大小写字母、数字、特殊字符的最低数量) - 保存后,用
passwd命令测试:输入少于设定长度的密码,应提示“密码太短”
二、设置密码有效期(最大使用天数)
有效期由 /etc/login.defs 控制,对新创建用户立即生效;对已有用户,需配合 chage 命令单独设置。
- 编辑全局策略:
sudo nano /etc/login.defs - 修改或添加以下两行:
PASS_MAX_DAYS 30(密码最多使用30天)PASS_WARN_AGE 7(到期前7天开始提醒) - 对已存在用户(如 root 或 admin)单独应用:
sudo chage -M 30 -W 7 username
其中-M设置最大天数,-W设置警告天数 - 查看某用户当前策略:
chage -l username
三、补充关键点:为什么改了没用?
常见失效原因不是操作错误,而是策略未被调用或冲突:
- PAM 文件路径选错:桌面版和服务器版默认使用的 PAM 配置文件不同,不能混用
- 同一策略重复定义:比如 /etc/pam.d/system-auth 和 /etc/pam.d/password-auth 同时含 pam_pwquality.so,优先级高的会覆盖低的
- 未重启服务或重新登录:PAM 策略在下次密码修改时生效,无需重启系统,但需新会话(如新开终端或重新 ssh 登录)
-
root 用户绕过限制:部分旧配置中 root 被排除在校验之外,可在 pam_pwquality.so 参数中加
enforce_for_root(新版支持)或确保无skip_if_unsupported类参数
四、验证是否生效
完成配置后,建议分步验证:
- 运行
grep -i "minlen\|pwquality\|cracklib" /etc/pam.d/common-password /etc/pam.d/system-auth 2>/dev/null,确认参数已写入且未被注释 - 执行
passwd修改自己密码,故意输 6 位纯数字,看是否被拒绝 - 用
chage -l $(whoami)查看当前有效期设置是否匹配预期 - 对特权账户(如 root)额外执行
sudo chage -d 0 username强制下次登录必须改密,检验策略是否触发











