必须同时修改PAM模块与pwquality.conf和login.defs文件:minlen=12,dcredit=ucredit=lcredit=ocredit=-1,PASS_MIN_LEN=12,并确保pam_pwquality.so在common-password中启用,再用chage为root等特权账户设置-m7、-M90、-W7策略。

在银河麒麟操作系统中设置密码复杂度,是为了防止用户设置弱密码导致系统被暴力破解或提权攻击,必须同时修改PAM模块配置与底层策略文件才能真正生效。
修改pwquality.conf强制字符类型与长度
这是最核心的一步,直接决定密码是否被系统接受。pam_pwquality.so模块读取该文件执行实时校验。
使用root权限编辑配置文件:sudo nano /etc/security/pwquality.conf
找到minlen参数行,将其改为所需最小长度,例如设为12位:minlen = 12
取消dcredit、ucredit、lcredit、ocredit四行的注释(删除开头的#),并统一设为-1,表示“至少包含1个”对应类型字符:
dcredit = -1
ucredit = -1
lcredit = -1
ocredit = -1
这四个参数缺一不可——如果只改minlen而漏掉其中任一credit参数,用户仍可设置纯数字密码,策略形同虚设。
保存退出后,立即测试:执行passwd命令修改当前用户密码,输入8位纯字母密码会直接报错“无效的密码:不满足最小长度或字符类型要求”。
同步更新login.defs确保新建用户继承策略
/etc/login.defs不参与运行时校验,但它控制useradd创建用户时的默认行为,并影响chage等工具输出结果,必须与pwquality.conf保持一致。
用root权限打开文件:sudo nano /etc/login.defs
查找PASS_MIN_LEN这一行,若被注释就去掉#号,若不存在则新增一行:PASS_MIN_LEN 12
注意:该值必须和pwquality.conf中的minlen完全相同,否则新建用户可能绕过PAM强度检查却仍被chage显示“密码长度不足”。
无需重启或重载服务,保存即生效。
验证PAM配置是否已加载pwquality模块
前两步做完,不代表策略就起作用了——关键要看PAM是否真的调用了pam_pwquality.so。
方法一:检查common-password文件
执行sudo grep -i pwquality /etc/pam.d/common-password,应返回类似以下内容:
password requisite pam_pwquality.so retry=3 minlen=12 difok=5
方法二:若无输出,说明模块未启用,需手动添加:
sudo sh -c 'echo "password requisite pam_pwquality.so retry=3 minlen=12 difok=5" >> /etc/pam.d/common-password'
⚠️重要提醒:不要直接替换原有pam_cracklib.so行,某些旧版镜像残留cracklib配置,两个模块共存会导致策略冲突甚至登录失败。
添加后执行sudo pam-auth-update --force确保所有PAM栈重新加载。
为特权账户单独加固密码生命周期
普通用户策略设好后,对root、admin等高权限账户还需叠加时间维度管控,防止长期不换密引发横向渗透风险。
第一步:锁定密码最短使用天数,避免用户频繁重置绕过复杂度检查
sudo chage -m 7 root
第二步:强制90天内必须更换密码
sudo chage -M 90 root
第三步:提前7天开始登录时弹出更换提醒
sudo chage -W 7 root
执行sudo chage -l root可查看当前所有设置是否已写入shadow数据库。










