通过配置PAM模块pam_pwquality.so并设置密码复杂度参数,可强制用户使用高强度密码,有效防御暴力破解、满足合规要求、防止凭据重用,同时结合MFA、SSH密钥、账户锁定等措施构建多层次认证安全体系。

在Linux系统中,设置用户密码复杂度要求主要是通过配置可插拔认证模块(PAM)来实现的,特别是利用
pam_pwquality.so
要为Linux用户设置密码复杂度要求,最核心的步骤是编辑PAM配置文件。通常,这涉及到
/etc/pam.d/system-auth
/etc/pam.d/password-auth
authconfig
authselect
/etc/security/pwquality.conf
以
pam_pwquality.so
password
打开相关的PAM配置文件,例如:
sudo vim /etc/pam.d/system-auth # 或 /etc/pam.d/password-auth
找到包含
password requisite pam_pwquality.so
password requisite pam_cracklib.so
password requisite pam_pwquality.so try_first_pass local_users_only retry=3 minlen=12 dcredit=-1 ucredit=-1 lcredit=-1 ocredit=-1 difok=7 maxrepeat=3 gecoscheck
这里各参数的含义:
try_first_pass
local_users_only
retry=3
minlen=12
dcredit=-1
ucredit=-1
lcredit=-1
ocredit=-1
difok=7
maxrepeat=3
gecoscheck
你也可以通过编辑
/etc/security/pwquality.conf
# /etc/security/pwquality.conf minlen = 12 dcredit = -1 ucredit = -1 lcredit = -1 ocredit = -1 difok = 7 maxrepeat = 3 gecoscheck = 1
当这两个地方都配置时,PAM模块中的参数会覆盖
pwquality.conf

我总觉得,一个系统最脆弱的环节往往不是代码本身,而是那些看似不起眼的用户密码。强制实施严格的密码复杂度策略,并非是为了给用户添麻烦,而是出于多方面的安全考量。
首先,这是抵御暴力破解攻击和字典攻击的基石。如果密码过于简单,比如“password123”或者“admin”,攻击者通过自动化工具在短时间内就能尝试成千上万种常见密码组合,轻易地突破防线。一个足够长且包含多种字符类型的复杂密码,会极大地增加破解难度,将攻击时间从几秒钟延长到几十年甚至更久,让攻击变得不切实际。
其次,它有助于满足各种合规性要求。许多行业标准和法规,例如PCI DSS(支付卡行业数据安全标准)、HIPAA(健康保险流通与责任法案)以及GDPR(通用数据保护条例),都明确要求组织对其系统实施严格的密码策略。未能遵守这些规定,不仅可能导致数据泄露,还会面临巨额罚款和声誉损失。
再者,复杂密码可以有效防止凭据重用攻击。很多人习惯在不同网站和系统中使用相同的密码。一旦某个不安全的网站数据泄露,攻击者就会拿着这些凭据去尝试登录其他系统,包括你的Linux服务器。如果你的服务器密码足够独特且复杂,即使其他地方的密码被盗,服务器依然是安全的。这就像给你的房子多加了几道锁,而不是只依赖一把万能钥匙。
最后,它关乎数据完整性和系统可用性。一旦攻击者通过弱密码获得系统权限,他们不仅可以窃取敏感数据,还可能篡改配置、植入恶意软件,甚至导致系统崩溃,造成业务中断。严格的密码策略,是维护系统正常运行和数据安全的重要防线。在我看来,这不仅仅是技术问题,更是企业风险管理中不可或缺的一环。

配置
pam_pwquality.so
首先,你需要确定你的系统使用哪个PAM文件来处理密码认证。在大多数现代Linux发行版上,这通常是
/etc/pam.d/system-auth
/etc/pam.d/password-auth
authconfig --probe
假设我们选择修改
/etc/pam.d/system-auth
password requisite pam_pwquality.so
minlen=N
minlen=14
dcredit=-N
ucredit=-N
lcredit=-N
ocredit=-N
-N
dcredit=-1
ucredit=-1
lcredit=-1
ocredit=-1
dcredit=-2
difok=N
difok=7
maxrepeat=N
maxrepeat=3
maxclassrepeat=N
maxclassrepeat=4
gecoscheck
enforce_for_root
一个更高级的示例配置可能像这样:
password requisite pam_pwquality.so try_first_pass local_users_only retry=3 minlen=14 dcredit=-2 ucredit=-2 lcredit=-2 ocredit=-1 difok=8 maxrepeat=3 maxclassrepeat=4 gecoscheck enforce_for_root
配置完成后,你可以尝试使用
passwd

我个人认为,单纯的密码复杂度只是万里长征的第一步。真正的安全,是一个多层次、持续迭代的过程。除了强制实施严格的密码复杂度要求,还有许多其他关键措施可以显著增强Linux用户认证的安全性。
多因素认证(MFA/2FA):这是目前最有效的安全增强手段之一。即使攻击者知道了你的密码,没有第二个认证因素(如手机验证码、硬件令牌、指纹等),他们也无法登录。在Linux上,可以集成
pam_google_authenticator.so
密码过期策略和账户锁定:
chage
/etc/login.defs
pam_faillock.so
pam_tally2.so
SSH密钥认证:对于远程访问,强烈建议使用SSH密钥对认证,而不是密码认证。密钥对认证比密码更安全,因为私钥通常受到密码保护,并且私钥本身不易被暴力破解。同时,可以禁用SSH的密码认证,进一步减少攻击面。
最小权限原则(Principle of Least Privilege):用户和应用程序应该只拥有完成其任务所需的最小权限。不要随意赋予普通用户sudo权限,更不要让所有人都知道root密码。对于需要执行特权操作的用户,使用
sudo
禁用不必要的账户和服务:定期审查系统上的用户账户,禁用或删除不再需要的账户。同时,关闭或卸载所有不必要的服务和端口,减少潜在的攻击入口。例如,如果不需要FTP服务,就应该禁用它。
日志监控和审计:持续监控认证日志(如
/var/log/auth.log
/var/log/secure
用户安全教育:技术措施再完善,也离不开人的因素。定期对用户进行安全意识培训,教导他们如何创建强密码、识别钓鱼邮件、理解MFA的重要性等,是构建强大安全防线不可或缺的一环。一个有安全意识的用户,远比一个只会抱怨密码复杂度的用户,更能保护系统安全。
以上就是Linux设置用户密码复杂度要求的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号