centos 7 设置密码最小长度需同时配置 /etc/login.defs 的 pass_min_len 和 /etc/pam.d/system-auth 中 pam_pwquality.so 的 minlen 参数,前者仅影响 useradd 创建的新用户初始密码,后者才真正校验所有 passwd 操作,缺一不可。

CentOS 7 设置密码最小长度,不能只改一个地方 —— PASS_MIN_LEN 在 /etc/login.defs 里只影响新建用户;真正拦住密码设置的,是 PAM 模块里的 pam_pwquality.so 配置。漏掉任意一处,都可能让弱密码通过。
修改 /etc/login.defs 中的 PASS_MIN_LEN
这个值仅在用 useradd 创建新用户时生效,对已有用户或 passwd 修改密码无约束力。
- 编辑文件:
sudo vi /etc/login.defs - 找到或添加这一行:
PASS_MIN_LEN 8(不要写成PASS_MIN_LENGTH,后者无效) - 注意:该参数最大支持 999,但实际生效依赖 PAM,单独设了不等于生效
配置 pam_pwquality.so 强制执行最小长度
这是真正起效的核心环节。CentOS 7 默认使用 pam_pwquality.so(不是旧版 pam_cracklib.so),必须在 /etc/pam.d/system-auth 中正确配置。
CentOS Linux 7.9.2009是传统CentOS Linux 7的最后主要版本,也是很多企业历史服务器中仍可能遇到的系统版本。它以稳定、兼容RHEL 7生态、文档丰富和软件支持广泛著称,曾长期用于Web服务、数据库、虚拟化节点和企业内部业务系统。不过CentOS Linux 7已于2024年6月30日停止维护,现在继续使用会面临安全补丁缺失风险。该版本更适合旧业务迁移、历史环境恢复或离
- 打开文件:
sudo vi /etc/pam.d/system-auth - 找到以
password requisite pam_pwquality.so开头的行(通常在第 20 行左右) - 确保它包含
minlen=8,例如:password requisite pam_pwquality.so try_first_pass local_users_only retry=3 minlen=8 ucredit=-1 lcredit=-1 dcredit=-1 ocredit=-1 - 如果该行被注释(# 开头)或缺失,需取消注释或新增;重复出现的行会导致策略叠加失败
- 改完后立即生效,无需重启服务
验证是否生效的几个关键点
光改配置不验证,等于没改。常见“以为生效了但其实没拦住”的情况,往往出在这里:
- 测试命令:
passwd当前用户,尝试设 7 位纯数字密码 —— 应报错:password not accepted或类似提示 - 检查实际加载的参数:
grep -v "^#" /etc/security/pwquality.conf | grep minlen,确认minlen = 8存在(authconfig命令会写入此文件,但手动编辑system-auth优先级更高) - 注意 root 用户默认不受限:若要强制 root 也遵守,必须加
enforce_for_root参数,否则passwd root可绕过 -
chage -l username查看的是密码有效期,跟长度无关,别混淆
最容易被忽略的是:/etc/login.defs 的 PASS_MIN_LEN 和 PAM 的 minlen 是两套机制,前者只管新建用户初始密码生成逻辑,后者才真正校验每次 passwd 输入。生产环境务必两者都设,且以 PAM 配置为准。










