linux强密码策略依赖pam模块pam_pwquality.so在password栈中以requisite类型靠前加载,需配合/etc/security/pwquality.conf配置参数,并在common-password或system-auth中正确注入,同时辅以login.defs和pam_pwhistory.so实现生命周期与历史密码限制。

Linux 强密码策略不能靠 passwd 命令或单个配置文件实现,真正起效的是 PAM 模块的精准调用——核心是 pam_pwquality.so 在 password 栈中以 requisite 类型加载,参数必须匹配系统版本且位置靠前,否则策略形同虚设。
确认并启用 pam_pwquality.so 模块
该模块是现代 Linux 密码强度校验的事实标准,取代了已弃用的 pam_cracklib.so。先检查是否就绪:
- 运行
ls /lib/security/pam_pwquality.so(Debian/Ubuntu)或ls /lib64/security/pam_pwquality.so(RHEL/CentOS),确认文件存在 - 若缺失,安装对应包:
apt install libpwquality-tools(Debian/Ubuntu)或yum install libpwquality(RHEL/CentOS) - 推荐优先使用
/etc/security/pwquality.conf集中定义规则,避免在多个 PAM 文件中重复写参
关键参数配置与含义
在 /etc/security/pwquality.conf 中设置以下常用项(每行一个参数,等号前后空格可选):
PyCharm 2026.2.0.1 Linux版提供 JetBrains 官方 2026.2.0.1 版本安装包,适合需要指定 PyCharm 版本进行 Python 项目开发、运行和调试的用户。
- minlen = 12:最小长度为 12,但实际生效长度受字符类型分布影响
- dcredit = -1、ucredit = -1、lcredit = -1、ocredit = -1:分别强制至少 1 位数字、大写字母、小写字母、特殊字符
-
difok = 5:新旧密码至少 5 个字符不同,防简单替换(如
Password123→Password124) -
maxrepeat = 3:禁止连续 4 个及以上相同字符(
aaaabbb被拒,aaabbb允许) -
reject_username = 1:禁止密码包含用户名或其反转(如用户名
admin,则admin123或321nimda均被拒) - enforce_for_root = 1:让 root 用户也受全部规则约束(默认不生效)
注入 PAM password 流程确保生效
仅配 pwquality.conf 不够,必须在 PAM 密码修改流程中明确调用:
- Debian/Ubuntu 编辑
/etc/pam.d/common-password,在password [success=1 default=ignore] pam_unix.so ...之前插入一行:password requisite pam_pwquality.so retry=3 - RHEL/CentOS 编辑
/etc/pam.d/system-auth,同样在 password 段靠前位置添加:password requisite pam_pwquality.so retry=3 -
retry=3表示允许用户最多重试 3 次输入合规密码,避免一次失败就退出 - 务必确保该行类型为
requisite,且位于其他password模块之前,否则可能被跳过
配套策略:生命周期 + 历史复用限制
复杂度只是第一道关,还需防止长期不改密和反复用旧密码:
- 编辑
/etc/login.defs设置全局基础策略:PASS_MAX_DAYS 90(90 天强制更新)PASS_MIN_DAYS 7(改密后 7 天内不可再改)PASS_WARN_AGE 7(到期前 7 天登录时提醒) - 在同一个 PAM 文件(如
common-password)中,pam_pwquality.so行之后添加:password required pam_pwhistory.so remember=24 use_authtok - 首次启用需创建历史记录文件:
sudo touch /etc/security/opasswd && sudo chmod 600 /etc/security/opasswd
不复杂但容易忽略:PAM 规则生效依赖顺序与模块类型,改错位置或漏掉 requisite,策略就等于没开。










