限制 Linux 上的密码尝试次数,以保护关键服务

  • 在 Red Hat、Debian 和 Ubuntu 上,配置 pam_faillock 和 pam_tally2 等 PAM 模块,可以在多次尝试失败后阻止帐户。
  • 调整 sshd_config 中的 MaxAuthTries 可以限制每个 SSH 连接的重试次数,从而补充系统级阻止策略。
  • /etc/login.defs、/etc/shadow 等文件以及 change 和 passwd 等工具用于管理密码过期时间和全局参数。
  • pam_cracklib 和 pam_pwquality 模块增强了密码的复杂性,防止弱密钥和不安全的重复使用。

Linux 中通过限制密码尝试次数来保障安全

限制 Linux 中的密码尝试次数 这并非只是管理员过度谨慎的怪癖;它是阻止暴力攻击和未经授权访问的最有效措施之一,无论是在桌面环境还是服务器环境中。如果您的计算机包含敏感信息或连接到互联网,您就需要保护系统的这一部分。 审核您的本地网络.

除了设置强密码之外, 多次故障后配置临时锁或永久锁 这一点至关重要:它可以减缓攻击者的速度,生成更多日志以供审计,并允许您将这种保护措施与其他密码策略(过期时间、复杂度、重复使用等)结合起来。让我们冷静而详细地了解一下,在不同的发行版和系统的不同层级中,这是如何实现的。

由于在 Red Hat、CentOS 及其衍生操作系统上登录尝试失败而导致帐户被锁定

在分布中 基于红帽(RHEL、CentOS、Rocky、AlmaLinux……)因尝试失败而导致的账户封禁由 PAM 模块管理。 pam_faillock该模块控制允许的登录失败次数、帐户锁定时间以及受影响的用户(如果您愿意,还可以包括 root 用户)。

要应用此策略,通常需要编辑全局 PAM 文件。 /etc/pam.d/system-auth 并且,在某些版本中,也 /etc/pam.d/password-auth这些文件充当系统上大多数身份验证服务(控制台登录、sudo、SSH 等)的模板。

这些文件在以下部分中包含与这些类似的行: AUTH y 帐户:

auth required pam_faillock.so preauth silent audit deny=2 unlock_time=120
auth pam_faillock.so authfail audit deny=2 unlock_time=120
account required pam_faillock.so

第一道防线 正式认证之前(预认证)第二个程序在身份验证失败时运行,第三个程序负责在阶段检查帐户的锁定状态。 帐户通过修改参数,您可以根据自身需求调整策略。

最常见的参数 pam_faillock 是:

  • 审计启用登录尝试的详细日志记录,以便在系统日志中留下痕迹(例如,在……中)。 /var/log/secure).
  • 拒绝=2此设置决定账户被锁定前允许的最大密码错误尝试次数。本例中为 2 次,但您可以增加此值(3 次、5 次、10 次……)。
  • 解锁时间=120:表示账户冻结时间,单位为秒。此处为 120 秒(2 分钟),之后账户将自动重新激活。
  • 无声如果它存在, 它不会向用户显示其已被屏蔽的提示。它会直接停止接受登录,从而降低系统对攻击者的“信息量”。

一个重要的细节是,默认情况下, 根目录不包含在此块中。如果您希望同样的规则也适用于它,则需要添加该参数。 even_deny_root 在身份验证部分的 pam_faillock 行中。这可以增强安全性,但您应该权衡因犯太多错误而失去访问权限的风险。

当帐户被锁定且您未使用该参数时 无声系统可以显示明确的警告信息,提示用户已超过允许的尝试次数。这在测试环境中验证配置非常有用,但在生产环境中,通常最好不要提供过多信息。

在 Red Hat 系统上,您可以使用以下命令查看特定用户的失败登录尝试记录: 故障锁 指向您感兴趣的帐户:

faillock --user lionel

此命令显示 用户累计尝试失败次数是多少?包括 SSH 使用的 IP 地址以及与审计相关的其他详细信息。此外,您可以随时查看显示的内容。 /var/log/secure这些安全事件将被记录在哪里。

限制 Linux 中的密码尝试次数

Debian 和 Ubuntu 系统中因登录尝试失败导致账户锁定

在案件 Debian,Ubuntu及其衍生版本逻辑类似,但所使用的PAM模块有所不同。传统上,它一直使用 pam_tally2 统计失败尝试次数并自动封禁帐户,尽管在现代版本中建议迁移到 pam_faillock即便如此,pam_tally2 仍然在许多指南和环境中非常普遍。

在典型的 Debian 系统中,要根据失败尝试次数应用锁定,通常需要编辑以下文件: /etc/pam.d/common-auth它定义了大多数本地服务的标准身份验证策略。您可以向其中添加类似这样的行:

auth required pam_tally2.so onerr=fail deny=3 unlock_time=120 audit even_deny_root root_unlock_time=600

在这种配置下,系统 账号因三次尝试失败而被封禁。它对普通用户保持锁定 120 秒,对 root 用户保持锁定 600 秒。此外,如果模块发生任何错误(onerr=失败),出于安全原因,拒绝访问而不是允许访问。

主要参数 pam_tally2 是:

  • onerr=失败如果读取或更新尝试计数器时出现问题,则会拒绝身份验证,以避免意外地让门保持敞开状态。
  • 拒绝=3账户被锁定前允许的最大失败尝试次数。实践中,3 次通常比较合理。
  • 解锁时间=120:标准用户帐户保持锁定状态的时间(秒)。
  • 审计记录身份验证失败信息(在 Debian 系统中,通常是 /var/log/auth.log).
  • even_deny_root:强制将根节点也计入此锁定系统中,应谨慎使用。
  • root_unlock_time=600:root 帐户的特定锁定时间(以秒为单位),与其他用户无关。

当封禁功能启用时,用户会看到一条消息,提示其帐户由于登录失败次数过多而被暂时禁用。这有助于管理员检测可疑行为,并提醒用户帐户出现问题。

查看记录的失败尝试 pam_tally2 对于特定用户(例如 lionel),您可以使用:

pam_tally2 -u lionel

这个命令 显示累计故障次数 它还允许您在需要时手动重置计数器,并提供其他选项。此外,就像在 Red Hat 中一样,您始终可以选择查看。 /var/log/auth.log 查看每次身份验证尝试中发生的具体情况。

使用 MaxAuthTries 限制 SSH 尝试次数

Linux 服务器最常见的入口点之一是 SSH的因此,控制每个连接允许的身份验证尝试次数至关重要。这就是策略发挥作用的地方。 最大验证次数该文件中配置了 的/ etc / SSH / sshd_config中 来自 OpenSSH 服务器。

这个想法很简单: MaxAuthTries 定义了每个 SSH 连接允许的最大身份验证尝试次数。如果超过此限制,服务器将断开连接,迫使攻击者启动新会话以继续尝试组合,这大大减慢了自动暴力破解攻击的速度。

要进行配置,只需编辑配置文件即可:

sudo nano /etc/ssh/sshd_config

接下来,找到或添加类似这样的一行:

MaxAuthTries 3

有了这个值, 每个 SSH 连接仅允许三次身份验证尝试。如果用户多次犯同样的错误,sshd 守护进程会将其注销。要使更改生效,必须重新加载或重启该服务,例如使用以下命令:

sudo systemctl restart sshd

MaxAuthTries 并不会取代 pam_tally2 或 pam_faillock 等 PAM 模块,而是 并行工作SSH 服务器控制单个会话中允许的连续尝试次数,而 PAM 则对每个用户进行全局计数,并可以在系统级别阻止其帐户。

除了 MaxAuthTries 之外,建议结合其他 SSH 安全措施,以使服务更加健壮:

  • 更改默认端口停止使用端口 22 并将 SSH 移至不太明显的端口有助于过滤掉许多基本的自动扫描。
  • 使用公钥而不是密码使用 SSH 密钥进行身份验证可以消除弱密码的问题,并且能够更有效地抵御暴力破解攻击。
  • 使用防火墙限制来源或配置DMZ仅允许从特定 IP 地址或网络范围进行 SSH 连接,可以在网络层面上增加一道非常有效的屏障。

PAM Linux

使用 PAM 限制本地身份验证尝试

除了 SSH 之外, 本地身份验证 (控制台、TTY、sudo、图形显示管理器)也由 PAM 管理。例如,在 Debian 和 Ubuntu 中,文件 /etc/pam.d/common-auth 它是此配置的核心,在红帽系统中,它扮演着至关重要的角色。 系统认证 (有时还需要密码验证)。

除了像 pam_faillock 或 pam_tally2 这样的专用阻塞模块之外,一些发行版还允许直接通过以下方式限制登录尝试次数和时间: 登录定义该文件位于 /etc/login.defs声明的值如下所示:

  • 登录_重试: 在登录提示符处允许的最大重试次数,超过此次数将中止该过程。
  • 登录超时登录会话等待用户输入的最大时间(以秒为单位)。

例如,如果您调整 登录_重试 设置了三次密码尝试限制后,用户在单次登录会话中只有三次输入密码的机会,超过三次系统就会关闭该次尝试,强制用户重新开始登录。这本身并不会锁定账户,但确实会限制账户的输入次数。 限制每次会话的尝试次数.

在同一个文件中 登录定义 您还可以调整其他相关的安全参数,例如:

  • PASS_MAX_DAYS 天:密码在被强制更改之前可以使用的最长时间。
  • 通过最小天数:密码更改之间的最短天数,以避免过于频繁和“连续”更改。
  • PASS_WARN_AGE:在密码过期前几天发出通知,以便用户有时间做出反应。
  • 通行证最小长度 y 通行证最大长度:密码的最小和最大长度。
  • PASS_ALWAYS_WARN:当密码不符合特定强度标准时发出警告。
  • 尝试次数:如果新密码被认为过于简单,则密码更改尝试次数上限。
  • 加密方法用于密码的哈希算法(如今常用的算法是 SHA-512,表示为 $ $ 6).

这些指令主要影响 新用户 这些是在调整 login.defs 之后创建的,因此是为整个组织建立基准策略的便捷方法。

使用 /etc/shadow 和 change 命令管理尝试次数和过期时间

文件 / etc /阴影 系统在此处存储本地用户的加密密码及其所有过期信息。虽然这些密码不会每天手动更改,但了解其结构对审核和完善安全策略大有裨益。

每行 / etc /阴影 出现多个字段,字段之间用冒号分隔。与我们的政策最相关的字段有:

  • 用户名:标识其余字段所属的帐户。
  • 加密密码存储为: $id$salt$hashed哪里 $id$ 表示算法($1 MD5, $2a$/$2y$ 河豚, 5 美元 SHA-256, 6 美元 SHA-512),然后是盐和哈希。
  • 上次更改密码:自 1970 年 1 月 1 日(纪元)上次修改以来经过的天数。
  • 最短和最长使用天数他们控制着密码何时可以再次更改以及密码何时过期。
  • 到期通知天数:在到期前多少天开始通知用户?
  • 数日无活动密码过期后,需要多长时间才能将帐户完全禁用?
  • 绝对账户到期日:也以天数格式表示,自 1970 年以来,标志着不再允许该用户登录的时刻。

要管理这些参数而不直接修改 /etc/shadow 文件,可以使用以下命令: CHAGE (年龄变化),允许您为特定用户调整密码和帐户过期时间。

一些常见的选项 CHAGE 是:

  • -d,–最后一天: 设置上次密码更改的日期(以自纪元以​​来的天数格式或可读日期格式表示)。
  • -E,-expired:设置帐户的到期日期。
  • -我,-不活跃:在密码过期若干天后,将帐户标记为不活跃帐户。
  • -m,-mindays:定义两次密码更改之间的最短天数。
  • -M,-maxdays:表示密码保持有效的最长天数。
  • -W,-warndays:设置到期前多少天开始发出通知。
  • -l,--list:显示用户的当前过期状态。

例如,检查用户的到期信息 胡椒 可以执行:

chage -l pepe

出口处会指示方向。 上次更改日期、密码是否过期、不活动时间以及最短和最长天数……以及其他数据。使用此工具,您可以单独应用策略、逐个用户应用策略,或者在处理整个帐户组的脚本中应用策略。

使用 pam_cracklib 和 pam_pwquality 制定密码复杂度策略

限制密码尝试次数固然很好,但如果密码是像“123456”或“qwerty”这样的,那就没什么用了。这就是为什么限制密码尝试次数至关重要。 强制使用强密码 使用 PAM 模块,例如 pam_cracklib 而且,在更新的版本中, pam_pwquality.

模块 pam_pwquality 它是 cracklib 的升级版,并且可以与诸如以下库集成: 库质量 验证密码是否不在字典中、是否过短、是否重复简单模式或包含用户个人数据。它已原生包含在基于 RHEL 的环境中,也可以使用诸如 apt-get 之类的软件包安装在 Debian/Ubuntu 系统中。 libpam-cracklib y libpam-pwquality.

安装完成后,主要配置通常在文件中完成。 /etc/security/pwquality.conf您可以在此处定义复杂度参数,例如:

  • 迪福克:必须与先前密码不同的字符数。
  • 民伦:新密码可接受的最小长度。
  • 信用证, 优信, 信用证, 信用证包含数字、大写字母、小写字母和其他字符,特此致谢。
  • 小班:所需的最小字符类数量(小写字母、大写字母、数字、符号)。
  • 最大重复次数:允许出现的连续相同字符的最大数量。
  • 最大类重复次数:同一类字符的最大连续数量。
  • 地理检查检查密码是否包含 /etc/passwd 中用户的 GECOS(注释)字段中的单词。
  • 字典路径: 用于检查密码是否属于已知单词的字典路径。
  • 脏话:明确禁止使用的词语列表。

系统 学分 它尤其灵活。基本上,密码包含的字符种类越多,获得的积分就越多;这些积分可以弥补密码长度略短的不足。例如, 最小长度=10 y dcredit=2一个包含 2 位数字的 8 位字符密码可以通过过滤器,因为它会增加 2 个积分。但是,如果您定义了负积分,则至少需要一个负字符(例如, dcredit=-1 (至少需要一位数字,无例外)。

连接器 小班 您可以要求密码包含多种不同类型的元素。例如,值为 2 表示密码必须包含字母和数字的组合,或者字母和符号的组合等等。 最小班级=4 这需要同时使用小写字母、大写字母、数字和特殊字符,这在要求严格的公司政策中非常常见。

像这样的工具 得分 它们允许您根据预定义的策略测试密码强度。当密码通过测试时,它们会进行测试。 得分这会告诉你密钥是否符合要求,如果不符合,则会告诉你它违反了哪条规则(长度不足、太简单、与前一个密钥太相似等)。

使用 pam_cracklib 在 Debian 和 Ubuntu 上配置强大的策略

在 Debian/Ubuntu 系统中,使用这种情况非常普遍。 pam_cracklib (或通过 PAM 使用 pwquality)来强制执行密码策略。此处的关键文件是 /etc/pam.d/通用密码定义了如何管理系统用户的密码更改。

在对任何文件进行修改之前,最好先备份一份文件:

sudo cp /etc/pam.d/common-password /root/

然后,您可以使用您喜欢的文本编辑器(例如 nano、vim 等)以超级用户权限对其进行编辑。您会在里面找到类似这样的一行:

password requisite pam_cracklib.so retry=3 minlen=8 difok=3

这里定义了如下参数:

  • 重试:用户在更改密码时允许的尝试次数,超过此次数后更改将失败。
  • 民伦:密码最短长度。
  • 迪福克:必须与先前密码不同的字符数。
  • 优信, 信用证, 信用证, 信用证:对大写字母、小写字母、数字和其他字符给予正或负的分数。

例如,一项要求较高的政策可能是:

password requisite pam_cracklib.so retry=3 minlen=12 difok=3 ucredit=-3 lcredit=-3 dcredit=-3 ocredit=-3

通过此设置, 每个新密码的长度必须至少为 12 个字符。密码长度必须与前一个密码至少相差 3 个字符,并且必须包含至少 3 个大写字母、3 个小写字母、3 个数字和 3 个符号。这是一项非常严格的策略,但对于防止使用过于简单的密码非常有效。

更改策略后,您可以通过更改自己的密码来测试:

sudo passwd

如果密码不符合要求,系统将显示消息指出原因:例如密码过短、与字典中的单词相似、字符重复过多等。一旦密码符合策略,更改将顺利生效。

除了收紧对新变更的政策外,Debian 和 Ubuntu 还允许 强制现有用户更改密码 适应新规则。使用命令:

passwd -e USUARIO

该用户的密码已被标记为已过期,下次登录时,用户将被要求设置符合当前策略的新密码。您还可以通过以下方式控制全局密码过期:

passwd -w 5 -x 30 USUARIO

哪里 -x 30 密码有效期最长为 30 天。 -w 5 这样系统就会在到期日前 5 天开始通知您。如果您添加 -i 1:

passwd -w 5 -x 30 -i 1 USUARIO

如果用户不更改密码,该帐户将被标记为不活跃状态。 过期一天后迫使管理员介入以重新激活它。

虽然多年来一直建议频繁轮换密码,但现代安全指南(例如 NIST 的指南)对这种做法提出了新的要求: 最好选择长而复杂的密码,并启用双因素身份验证系统。而不是强制频繁更改,最终导致生成可预测的密钥。

仔细配置 PAM 模块(pam_faillock、pam_tally2、pam_cracklib、pam_pwquality)以及密钥文件,例如: /etc/pam.d/common-auth, /etc/pam.d/通用密码, /etc/login.defs, 的/ etc / SSH / sshd_config中 并了解这些决定如何体现在 / etc /阴影这标志着“标准”系统与真正能够抵御未经授权的访问和暴力攻击的强化环境之间的区别。

网络地图
相关文章:
逐步使用 Nmap 和 Wireshark 审核您的本地网络

在 Google 中将其添加为首选来源