Linux服务器密码策略需通过PAM模块pam_pwquality.so配置,/etc/login.defs的PASS_MIN_LEN在启用PAM后失效;应修改对应PAM文件或统一使用/etc/security/pwquality.conf,并配套设置pam_pwhistory.so和chage命令。

Linux 服务器密码策略配置不是改一个文件就能生效的,关键在理清 PAM 模块调用顺序、参数含义和作用范围。真正起效的复杂度规则由 pam_pwquality.so 控制,而 /etc/login.defs 中的 PASS_MIN_LEN 在启用 PAM 后完全失效——这是最常踩的坑。
先确认当前系统用哪个模块
运行命令:
grep -r "pwquality\|pam_pwquality" /etc/pam.d/
如果返回结果含 /etc/pam.d/common-password(Debian/Ubuntu)或 /etc/pam.d/system-auth(RHEL/CentOS),说明已启用 pam_pwquality.so;若没结果,那 /etc/login.defs 的设置只影响新建用户,对已有用户改密无效。
密码复杂度必须靠 PAM 配置
以现代主流系统(RHEL 8+/Ubuntu 20.04+)为例,在对应 PAM 文件中添加或修正这一行(位置要靠前,且类型为 requisite):
password requisite pam_pwquality.so retry=3 minlen=12 difok=5 dcredit=-1 ucredit=-1 lcredit=-1 ocredit=-1 maxrepeat=3 reject_username enforce_for_root
-
minlen=12:基础分值 ≥12(小写/大写/数字/符号各计1分,非单纯字符数) -
dcredit=-1等负值:强制至少含1个对应类型字符 -
difok=5:新旧密码至少5个字符不同 -
maxrepeat=3:禁止连续4个相同字符 -
enforce_for_root:让 root 用户也受约束(默认被绕过)
统一管理推荐用 /etc/security/pwquality.conf
把参数从 PAM 行里抽出来,更清晰易维护:
- 编辑
/etc/security/pwquality.conf,写入:minlen = 12 dcredit = -1 ucredit = -1 lcredit = -1 ocredit = -1 difok = 5 maxrepeat = 3 reject_username = 1 enforce_for_root = 1
- 对应 PAM 行简化为:
password requisite pam_pwquality.so retry=3
这样改配置不需反复编辑 PAM 文件,模块会自动读取该 conf。
密码生命周期与历史记录要配套加
在同一个 PAM 文件中,pam_pwquality.so 行之后追加:
password [success=1 default=ignore] pam_unix.so use_authtok sha512 shadow password required pam_pwhistory.so remember=24 use_authtok
首次启用需创建记录文件:
sudo touch /etc/security/opasswd && sudo chmod 600 /etc/security/opasswd
全局有效期设在 /etc/login.defs(仅影响新建用户)
PASS_MAX_DAYS 90 PASS_MIN_DAYS 7 PASS_WARN_AGE 7
已有用户需用 chage 单独设置:
sudo chage -M 90 -m 7 -W 7 username
验证某用户实际策略:
sudo chage -l username
不复杂但容易忽略。


















