需通过pam_pwquality.so配置密码复杂度:一、安装模块;二、编辑pwquality.conf设minlen=12等规则;三、在pam password段添加requisite行;四、配置login.defs与pam_pwhistory.so限制有效期和历史;五、用passwd和pwscore验证。

如果您希望Linux系统强制用户设置符合安全要求的密码,则需要通过PAM模块中的pam_pwquality.so来实施密码复杂度控制。以下是具体配置步骤:
一、确认并安装pam_pwquality模块
该模块并非在所有发行版中默认启用,需先验证其存在性或手动安装。若缺失,系统将无法执行密码强度校验。
1、检查模块是否已安装:运行ls /lib/security/pam_pwquality.so或ls /lib64/security/pam_pwquality.so,确认文件存在。
2、如未安装,在Debian/Ubuntu系统中执行:sudo apt install libpam-pwquality。
3、在RHEL/CentOS/Fedora系统中执行:sudo yum install libpwquality 或 sudo dnf install libpwquality。
二、配置/etc/security/pwquality.conf集中策略文件
此文件用于统一定义密码规则参数,避免在多个PAM配置中重复声明,便于维护与审计。
1、使用编辑器打开配置文件:sudo nano /etc/security/pwquality.conf。
2、设置最小长度为12位:minlen = 12。
3、强制包含至少一个数字、一个大写字母、一个小写字母和一个特殊字符:dcredit = -1、ucredit = -1、lcredit = -1、ocredit = -1。
4、禁止新密码与旧密码前5个字符相同:difok = 5。
5、限制同一字符连续出现不超过2次:maxrepeat = 2。
6、拒绝以用户名或其反向形式作为密码:reject_username = 1。
三、在PAM密码认证流程中启用pam_pwquality.so
仅配置pwquality.conf不足以生效,必须将其注入PAM的password堆栈,确保所有密码修改操作(如passwd命令)均受控。
1、编辑Debian/Ubuntu系统的密码配置文件:sudo nano /etc/pam.d/common-password。
2、编辑RHEL/CentOS/Fedora系统的密码配置文件:sudo nano /etc/pam.d/system-auth。
3、在password段顶部插入以下行(若已存在则跳过):password requisite pam_pwquality.so retry=3。
4、保存文件后,该策略将在下次用户执行passwd命令时立即生效。
四、设置密码有效期与历史限制
除复杂度外,还需通过login.defs约束密码生命周期,并防止重复使用旧密码,构成完整策略闭环。
1、编辑系统登录定义文件:sudo nano /etc/login.defs。
2、设置密码最长有效天数为90天:PASS_MAX_DAYS 90。
3、设置密码最短使用天数为7天:PASS_MIN_DAYS 7。
4、设置密码到期前30天开始提醒用户:PASS_WARN_AGE 30。
5、启用密码历史记录(需配合PAM模块):在/etc/pam.d/common-password中添加:password required pam_pwhistory.so remember=5。
五、验证策略是否生效
策略部署完成后,必须进行实际测试以确认各参数被正确解析与执行,避免因语法错误或路径冲突导致策略静默失效。
1、切换至普通用户,执行passwd命令尝试设置弱密码(如“abc123”)。
2、观察终端是否返回类似“BAD PASSWORD: The password fails the dictionary check”的提示。
3、使用工具评分验证:echo "MySecureP@ss2026" | pwscore,输出值应≥80。
4、检查PAM日志:sudo tail -n 10 /var/log/auth.log(Debian/Ubuntu)或/var/log/secure(RHEL系),确认含“pam_pwquality”关键词的认证事件。








