0

0

Linux设置用户密码复杂度要求

P粉602998670

P粉602998670

发布时间:2025-09-15 09:08:01

|

708人浏览过

|

来源于php中文网

原创

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

linux设置用户密码复杂度要求

在Linux系统中,设置用户密码复杂度要求主要是通过配置可插拔认证模块(PAM)来实现的,特别是利用

pam_pwquality.so
模块。这能确保用户创建或更改密码时,必须遵循预设的强度标准,从而显著提升系统安全性。

解决方案

要为Linux用户设置密码复杂度要求,最核心的步骤是编辑PAM配置文件。通常,这涉及到

/etc/pam.d/system-auth
/etc/pam.d/password-auth
这两个文件,具体取决于你的Linux发行版和其PAM配置方式。在基于Red Hat的系统(如CentOS, Fedora, RHEL)上,这些文件通常由
authconfig
authselect
工具管理,手动修改后可能被覆盖,所以更推荐通过这些工具进行配置,或者直接修改
/etc/security/pwquality.conf
文件来设置全局策略。对于Debian/Ubuntu系统,直接编辑PAM文件是常见做法。

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
    : 允许用户尝试输入密码3次。
  • minlen=12
    : 密码最小长度为12个字符。
  • dcredit=-1
    : 至少包含1个数字。
  • ucredit=-1
    : 至少包含1个大写字母。
  • lcredit=-1
    : 至少包含1个小写字母。
  • ocredit=-1
    : 至少包含1个特殊字符。
  • difok=7
    : 新密码与旧密码至少有7个字符不同。
  • maxrepeat=3
    : 同一字符连续重复不能超过3次。
  • gecoscheck
    : 密码不能包含用户GECOS字段(全名)中的任何单词。

你也可以通过编辑

/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
中的全局设置。配置完成后,任何用户在更改密码时,都必须满足这些复杂度要求。

Linux设置用户密码复杂度要求

为什么Linux系统需要强制实施严格的密码复杂度策略?

我总觉得,一个系统最脆弱的环节往往不是代码本身,而是那些看似不起眼的用户密码。强制实施严格的密码复杂度策略,并非是为了给用户添麻烦,而是出于多方面的安全考量。

首先,这是抵御暴力破解攻击字典攻击的基石。如果密码过于简单,比如“password123”或者“admin”,攻击者通过自动化工具在短时间内就能尝试成千上万种常见密码组合,轻易地突破防线。一个足够长且包含多种字符类型的复杂密码,会极大地增加破解难度,将攻击时间从几秒钟延长到几十年甚至更久,让攻击变得不切实际。

其次,它有助于满足各种合规性要求。许多行业标准和法规,例如PCI DSS(支付卡行业数据安全标准)、HIPAA(健康保险流通与责任法案)以及GDPR(通用数据保护条例),都明确要求组织对其系统实施严格的密码策略。未能遵守这些规定,不仅可能导致数据泄露,还会面临巨额罚款和声誉损失。

再者,复杂密码可以有效防止凭据重用攻击。很多人习惯在不同网站和系统中使用相同的密码。一旦某个不安全的网站数据泄露,攻击者就会拿着这些凭据去尝试登录其他系统,包括你的Linux服务器。如果你的服务器密码足够独特且复杂,即使其他地方的密码被盗,服务器依然是安全的。这就像给你的房子多加了几道锁,而不是只依赖一把万能钥匙。

最后,它关乎数据完整性和系统可用性。一旦攻击者通过弱密码获得系统权限,他们不仅可以窃取敏感数据,还可能篡改配置、植入恶意软件,甚至导致系统崩溃,造成业务中断。严格的密码策略,是维护系统正常运行和数据安全的重要防线。在我看来,这不仅仅是技术问题,更是企业风险管理中不可或缺的一环。

Linux设置用户密码复杂度要求

如何配置pam_pwquality.so模块实现高级密码策略?

配置

pam_pwquality.so
模块来实现高级密码策略,实际上就是精细化地调整其参数,以满足更具体的安全需求。这比仅仅设置一个最小长度要复杂得多,但效果也更显著。

Shopxp购物系统Html版
Shopxp购物系统Html版

一个经过完善设计的经典网上购物系统,适用于各种服务器环境的高效网上购物系统解决方案,shopxp购物系统Html版是我们首次推出的免费购物系统源码,完整可用。我们的系统是免费的不需要购买,该系统经过全面测试完整可用,如果碰到问题,先检查一下本地的配置或到官方网站提交问题求助。 网站管理地址:http://你的网址/admin/login.asp 用户名:admin 密 码:admin 提示:如果您

下载

首先,你需要确定你的系统使用哪个PAM文件来处理密码认证。在大多数现代Linux发行版上,这通常是

/etc/pam.d/system-auth
/etc/pam.d/password-auth
。你可以通过查看这些文件,或者运行
authconfig --probe
(RHEL/CentOS)来大致了解。

假设我们选择修改

/etc/pam.d/system-auth
。找到
password requisite pam_pwquality.so
这一行,如果没有,就添加它。关键在于其后的参数:

  • minlen=N
    : 设置密码的最小长度。这是最基本的参数。例如,
    minlen=14
    意味着密码至少14个字符。我个人觉得,12个字符是一个不错的起点,但对于高安全环境,14或16个字符更佳。
  • dcredit=-N
    /
    ucredit=-N
    /
    lcredit=-N
    /
    ocredit=-N
    : 这些参数用于强制要求密码中必须包含指定类型的字符。
    -N
    表示必须包含至少N个该类型字符。
    • dcredit=-1
      : 至少1个数字。
    • ucredit=-1
      : 至少1个大写字母。
    • lcredit=-1
      : 至少1个小写字母。
    • ocredit=-1
      : 至少1个特殊字符(如!@#$%^&*)。
    • 如果你想让数字或特殊字符更多,比如至少2个数字,可以设置为
      dcredit=-2
  • difok=N
    : 新密码与旧密码之间必须有多少个字符不同。这能有效防止用户只是简单地在旧密码末尾加一个数字或符号。
    difok=7
    意味着新旧密码至少有7个字符是不同的。我发现这个参数对于提升密码更新的质量非常有帮助。
  • maxrepeat=N
    : 限制同一字符连续重复的次数。
    maxrepeat=3
    表示同一字符不能连续出现超过3次(例如,"aaab"可以,"aaaa"不行)。
  • maxclassrepeat=N
    : 限制同一字符类别(数字、小写、大写、特殊)连续重复的次数。例如,
    maxclassrepeat=4
    会阻止“1234abcd”这样的密码,因为它有四个连续的数字。
  • gecoscheck
    : 检查密码是否包含用户GECOS字段(通常是用户的全名或描述)中的单词。这是一个很棒的功能,因为很多人会用自己的名字或生日作为密码的一部分。
  • enforce_for_root
    : 默认情况下,root用户不受密码策略限制。添加此参数可以强制root用户也遵守策略。这在某些高安全环境中是必需的,但需要谨慎考虑,因为如果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设置用户密码复杂度要求

除了密码复杂度,还有哪些关键措施可以增强Linux用户认证安全性?

我个人认为,单纯的密码复杂度只是万里长征的第一步。真正的安全,是一个多层次、持续迭代的过程。除了强制实施严格的密码复杂度要求,还有许多其他关键措施可以显著增强Linux用户认证的安全性。

  1. 多因素认证(MFA/2FA):这是目前最有效的安全增强手段之一。即使攻击者知道了你的密码,没有第二个认证因素(如手机验证码、硬件令牌、指纹等),他们也无法登录。在Linux上,可以集成

    pam_google_authenticator.so
    实现基于TOTP(时间同步一次性密码)的MFA,或者使用YubiKey等硬件令牌。对于SSH登录,也可以配置MFA。

  2. 密码过期策略和账户锁定

    • 密码过期:通过
      chage
      命令或修改
      /etc/login.defs
      文件,可以强制用户定期更改密码。例如,设置密码90天过期,可以降低长期暴露的密码被破解的风险。
    • 账户锁定:使用
      pam_faillock.so
      pam_tally2.so
      模块,可以在用户连续多次输入错误密码后,暂时或永久锁定该账户。这能有效防御暴力破解攻击。
  3. SSH密钥认证:对于远程访问,强烈建议使用SSH密钥对认证,而不是密码认证。密钥对认证比密码更安全,因为私钥通常受到密码保护,并且私钥本身不易被暴力破解。同时,可以禁用SSH的密码认证,进一步减少攻击面。

  4. 最小权限原则(Principle of Least Privilege):用户和应用程序应该只拥有完成其任务所需的最小权限。不要随意赋予普通用户sudo权限,更不要让所有人都知道root密码。对于需要执行特权操作的用户,使用

    sudo
    并配置精细的权限控制。

  5. 禁用不必要的账户和服务:定期审查系统上的用户账户,禁用或删除不再需要的账户。同时,关闭或卸载所有不必要的服务和端口,减少潜在的攻击入口。例如,如果不需要FTP服务,就应该禁用它。

  6. 日志监控和审计:持续监控认证日志(如

    /var/log/auth.log
    /var/log/secure
    ),及时发现异常登录尝试、失败的认证请求以及其他可疑活动。结合入侵检测系统(IDS)和安全信息与事件管理(SIEM)工具,可以更有效地识别和响应安全威胁。

  7. 用户安全教育:技术措施再完善,也离不开人的因素。定期对用户进行安全意识培训,教导他们如何创建强密码、识别钓鱼邮件、理解MFA的重要性等,是构建强大安全防线不可或缺的一环。一个有安全意识的用户,远比一个只会抱怨密码复杂度的用户,更能保护系统安全。

相关专题

更多
堆和栈的区别
堆和栈的区别

堆和栈的区别:1、内存分配方式不同;2、大小不同;3、数据访问方式不同;4、数据的生命周期。本专题为大家提供堆和栈的区别的相关的文章、下载、课程内容,供大家免费下载体验。

392

2023.07.18

堆和栈区别
堆和栈区别

堆(Heap)和栈(Stack)是计算机中两种常见的内存分配机制。它们在内存管理的方式、分配方式以及使用场景上有很大的区别。本文将详细介绍堆和栈的特点、区别以及各自的使用场景。php中文网给大家带来了相关的教程以及文章欢迎大家前来学习阅读。

572

2023.08.10

堆和栈的区别
堆和栈的区别

堆和栈的区别:1、内存分配方式不同;2、大小不同;3、数据访问方式不同;4、数据的生命周期。本专题为大家提供堆和栈的区别的相关的文章、下载、课程内容,供大家免费下载体验。

392

2023.07.18

堆和栈区别
堆和栈区别

堆(Heap)和栈(Stack)是计算机中两种常见的内存分配机制。它们在内存管理的方式、分配方式以及使用场景上有很大的区别。本文将详细介绍堆和栈的特点、区别以及各自的使用场景。php中文网给大家带来了相关的教程以及文章欢迎大家前来学习阅读。

572

2023.08.10

磁盘配额是什么
磁盘配额是什么

磁盘配额是计算机中指定磁盘的储存限制,就是管理员可以为用户所能使用的磁盘空间进行配额限制,每一用户只能使用最大配额范围内的磁盘空间。php中文网为大家提供各种磁盘配额相关的内容,教程,供大家免费下载安装。

1349

2023.06.21

如何安装LINUX
如何安装LINUX

本站专题提供如何安装LINUX的相关教程文章,还有相关的下载、课程,大家可以免费体验。

703

2023.06.29

linux find
linux find

find是linux命令,它将档案系统内符合 expression 的档案列出来。可以指要档案的名称、类别、时间、大小、权限等不同资讯的组合,只有完全相符的才会被列出来。find根据下列规则判断 path 和 expression,在命令列上第一个 - ( ) , ! 之前的部分为 path,之后的是 expression。还有指DOS 命令 find,Excel 函数 find等。本站专题提供linux find相关教程文章,还有相关

294

2023.06.30

linux修改文件名
linux修改文件名

本专题为大家提供linux修改文件名相关的文章,这些文章可以帮助用户快速轻松地完成文件名的修改工作,大家可以免费体验。

776

2023.07.05

PS使用蒙版相关教程
PS使用蒙版相关教程

本专题整合了ps使用蒙版相关教程,阅读专题下面的文章了解更多详细内容。

23

2026.01.19

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
PostgreSQL 教程
PostgreSQL 教程

共48课时 | 7.4万人学习

Git 教程
Git 教程

共21课时 | 2.8万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号