在管理CentOS服务器时,无论是初次安装系统后创建用户,还是后续为已有账户修改密码,许多用户都遇到过系统提示“BAD PASSWORD: The password fails the dictionary check – it is too simplistic/systematic”或类似的“密码弱”警告,这并非系统故障,而是一项重要的安全保护机制,本文将深入探讨这一提示背后的原因、默认的密码策略要求,并提供多种解决方案,以满足从普通用户到系统管理员的不同需求。

为什么CentOS会提示密码弱?
这个提示的核心源于一个名为PAM(Pluggable Authentication Modules,可插拔认证模块)的机制,PAM提供了一套统一的认证管理框架,使得系统管理员可以灵活地配置认证策略,而无需修改应用程序本身,在密码复杂度检查方面,CentOS主要依赖pam_pwquality模块(在较早版本中为pam_cracklib)。
当您执行passwd命令设置或修改密码时,该命令会调用PAM框架,PAM框架随后加载pam_pwquality模块,该模块会根据预设的规则集对您输入的新密码进行一系列复杂度检查,如果密码未能满足其中任何一项或多项规则,模块就会拒绝密码设置,并向终端输出相应的警告信息,这一过程旨在防止用户设置过于简单、容易被猜测或暴力破解的密码,从而提升系统的整体安全性。
默认的密码策略检查项
pam_pwquality模块的检查规则定义在/etc/security/pwquality.conf文件中,虽然不同版本的CentOS其默认值可能略有差异,但通常包含以下几个核心检查维度,了解这些规则,有助于我们创建符合系统要求的强密码。
| 检查项 | 说明 | 默认值示例 |
|---|---|---|
| minlen | 密码的最小长度。 | 9 |
| minclass | 密码中必须包含的字符类别的最小数量,类别包括:大写字母、小写字母、数字、特殊字符。 | 3 |
| dcredit | 密码中数字的“贡献度”,为正数表示至少需要多少个数字,为负数表示最多可以缺少多少个数字。 | -1 |
| ucredit | 密码中大写字母的“贡献度”,规则同上。 | -1 |
| lcredit | 密码中小写字母的“贡献度”,规则同上。 | -1 |
| ocredit | 密码中特殊字符的“贡献度”,规则同上。 | -1 |
| dictcheck | 是否进行字典检查,防止密码是常见的单词或短语。 | 1 (启用) |
| usercheck | 是否检查密码是否包含用户名(正向或反向)。 | 1 (启用) |
一个符合默认策略的强密码可能是MyP@ssw0rd!,它长度超过9位,同时包含了大写字母、小写字母、数字和特殊字符,且不是常见的字典单词。
如何应对“密码弱”提示
面对系统提示,您可以根据实际场景选择不同的处理方式。
遵守规则,创建更强的密码
这是最推荐、最安全的方法,与其试图绕过规则,不如主动适应它,创建一个真正安全的密码,一个好的密码应该具备以下特点:
- 足够长:至少12-16位,长度是安全性的最重要保障。
- 复杂性:混合使用大小写字母、数字和特殊符号(如
!@#$%^&*)。 - 无规律性:避免使用生日、姓名、电话号码、常见单词(
password、123456)或键盘上的连续字符(qwerty)。 - 易于记忆但难以猜测:可以采用“ passphrase”的思路,例如将几个不相关的单词用特殊符号连接起来,如
Blue-Sky#2025@Dog。
以Root身份强制设置(不推荐用于生产环境)
在某些非生产或临时的测试环境中,您可能确实需要设置一个简单的密码,拥有root权限的管理员可以通过非交互式的方式绕过pam_pwquality的检查。

此方法会降低系统安全性,应谨慎使用。
使用
chpasswd命令:echo "username:your_simple_password" | sudo chpasswd
将
username和your_simple_password替换为实际的用户名和密码,此命令直接更新/etc/shadow文件,绕过了交互式的密码检查流程。使用
passwd的--stdin选项:echo "your_simple_password" | sudo passwd --stdin username
此方法同样通过标准输入传递密码,绕过了交互式检查。
调整系统密码策略(管理员操作)
如果您是系统管理员,认为默认的密码策略过于严格或不适用于当前环境,可以全局性地修改密码策略,这需要编辑/etc/security/pwquality.conf文件。
使用vi或nano等编辑器打开该文件:

sudo vi /etc/security/pwquality.conf
您会看到很多以开头的注释行,它们展示了所有可用的参数及其默认值,要修改某个参数,只需取消该行的注释(删除行首的)并设置新的值即可。
要降低密码复杂度要求,可以修改如下:
# 最小长度降为8 minlen = 8 # 最少字符类别降为2(只要数字和小写字母) minclass = 2 # 不强制要求包含特殊字符 ocredit = 0
修改完成后,保存文件,新的策略对下一次密码修改操作立即生效,此方法影响所有用户,需在权衡安全性与便利性后谨慎决策。
安全最佳实践
虽然调整策略或强制设置可以解决一时的提示问题,但从长远来看,提升服务器安全性的最佳实践包括:
- 使用SSH密钥认证:禁用密码登录,全面转向基于公钥/私钥对的SSH认证方式,这是目前最安全的远程登录方法。
- 部署多因素认证(MFA/2FA):为关键账户或服务增加第二层验证,如Google Authenticator。
- 定期更换密码:即使密码很强,也应定期更换。
- 使用密码管理器:帮助生成和存储复杂且无规律的密码,避免记忆负担。
相关问答FAQs
解答: 这种情况通常有两个原因,请确认您修改的参数格式正确,且没有拼写错误,并且已经去除了行首的注释符,也是最常见的原因,是PAM的配置文件/etc/pam.d/system-auth(或/etc/pam.d/password-auth)中可能没有正确调用pwquality.so模块,请检查该文件中是否存在类似 password requisite pam_pwquality.so try_first_pass local_users_only retry=3 authtok_type= 的行,如果此行被注释掉或不存在,pwquality.conf中的设置将不会被应用,修改PAM配置文件后,通常无需重启服务,新的密码策略会立即生效。
我可以完全禁用CentOS的密码复杂度检查吗?
解答: 可以,但强烈不建议这样做,尤其是在生产环境中,完全禁用检查会允许用户设置“123456”或“password”这类极弱密码,使系统极易受到暴力破解攻击,如果您执意要禁用,可以通过编辑/etc/pam.d/system-auth文件,找到包含pam_pwquality.so的那一行,并在其行首添加将其注释掉,这将使PAM在密码设置阶段跳过复杂度检查,完成此操作后,系统将不再对密码强度进行任何限制,请务必在操作前评估其带来的安全风险,并确保有其他安全措施(如防火墙、入侵检测系统、强化的SSH配置等)作为补充。
【版权声明】:本站所有内容均来自网络,若无意侵犯到您的权利,请及时与我们联系将尽快删除相关内容!
发表回复