7.6. 设计密码策略


密码策略是一组规则,用于管理在给定系统中如何使用密码。目录服务器密码策略指定密码必须满足的条件,如年龄、长度以及用户是否可以重复使用密码。

7.6.1. 密码策略如何工作

目录服务器支持精细的密码策略,这意味着 Directory 服务器在目录树中的任意点定义密码策略。目录服务器在以下级别上定义密码策略:

整个目录

这样的策略称为 全局 密码策略。当您配置和启用此策略时,Directory 服务器会将其应用到目录中的所有用户,但 Directory Manager 条目和启用了本地密码策略的用户条目除外。

此策略类型可以为所有目录用户定义通用、单一密码策略。

目录的特定子树

此类策略称为 子树级别或 本地密码策略。当您配置和启用此策略时,Directory 服务器会将其应用到指定子树下的所有用户。

此策略类型在托管环境中很好,为每个托管公司支持不同的密码策略,而不是为所有托管公司实施单一策略。

目录的特定用户

此类策略称为 用户级别或 本地密码策略。当您配置和启用此策略时,Directory 服务器只会将其应用到指定用户。

此策略类型可以为不同的目录用户定义不同的密码策略。例如,指定一些用户每天更改其密码,一些用户每月更改,而所有其他用户每六个月更改一次。

默认情况下,Directory 服务器包含与全局密码策略相关的条目和属性,这意味着将相同的策略应用于所有用户。要为子树或用户设置密码策略,请在子树或用户级别添加额外的条目,并启用 cn=config 条目的 nsslapd-pwpolicy-local 属性。此属性充当交换机,打开和关闭细粒度密码策略。

您可以使用命令行或 Web 控制台更改密码策略。在命令行中,dsconf pwpolicy 命令更改全局策略,dsconf localpwp 命令会更改本地策略。您可以在 配置密码策略部分找到 设置密码策略 的步骤。

密码策略检查过程

您添加到目录的密码策略条目决定了 Directory 服务器应强制执行的密码策略的类型(global 或 local)。

当用户尝试绑定到目录时,Directory 服务器决定是否为用户条目定义并启用本地策略。目录服务器按以下顺序检查策略设置:

  1. 目录服务器决定是否启用精细的密码策略。服务器检查 cn=config 条目中 nsslapd-pwpolicy-local 属性的值(onoff)。如果值设为 off,服务器会忽略子树和用户级别定义的策略,并强制实施全局密码策略。
  2. 目录服务器确定是否为子树或用户定义本地策略。服务器检查对应用户条目中的 pwdPolicysubentry 属性:

    1. 如果属性存在,服务器会强制为用户配置本地密码策略。如果条目具有属性,但值为空或无效(例如,指向不存在的条目),服务器会记录错误消息。
    2. 如果在用户条目中没有找到 pwdPolicysubentry 属性,服务器会在达到顶部前检查父条目、grandparent 条目和其他上一级条目。
    3. 如果任何上级条目中都未找到 pwdPolicysubentry 属性,则服务器会应用全局策略。
  3. 服务器将用户提供的密码与用户条目中指定的值进行比较,以确保它们匹配。服务器也使用密码策略定义的规则来确保密码在允许用户绑定到目录之前有效。

除了绑定请求外,如果请求中存在 userPassword 属性,则在添加和修改操作过程中也会进行密码策略检查。

修改 userPassword 的值会检查两个密码策略设置:

  • 激活密码过期策略。如果没有满足最低期限要求,服务器会返回 约束Violation 错误。密码更新操作失败。
  • 激活了密码历史记录策略。如果 userPassword 属性的新值位于密码历史记录中,或者与当前密码相同,服务器会返回 约束Violation 错误。密码更新操作失败。

添加和修改 userPassword 的值会检查为密码语法设置的密码策略:

  • 激活密码最小长度策略。如果 userPassword 属性的新值小于所需的最小值长度,服务器会返回 约束Violation 错误。密码更新操作失败。
  • 激活密码语法检查策略。如果 userPassword 的新值与条目的 another 属性相同,服务器会返回 约束Violation 错误。密码更新操作失败。

7.6.2. 密码策略属性

了解可用于为服务器创建密码策略的属性。目录服务器在 cn=config 条目中保存密码策略属性,您可以使用 dsconf 实用程序更改这些设置。

故障的最大数量

此设置在密码策略中启用基于密码的帐户锁定。如果用户尝试登录一定次数并失败,Directory 服务器会锁定该帐户,直到管理员解锁或有选择地通过了一定的时间。使用 passwordMaxFailure 配置参数设置最大故障数。

当登录尝试达到限制时,目录服务器有两种方法来计数登录尝试并锁定帐户:

  • 当数字命中时,目录服务器会锁定帐户(n)
  • 目录服务器仅在计数超过时锁定帐户(n+1)。

例如,如果失败限制是三次尝试,可以在第三个失败尝试时锁定帐户(n),或者在第四次失败尝试时锁定(n+1)。n+1 行为是 LDAP 服务器的历史行为,因此被视为传统行为。较新的 LDAP 客户端预期有一个更严格的硬限制。默认情况下,Directory 服务器使用严格的限制(n),但您可以在 passwordLegacyPolicy 配置参数中更改旧的行为。

重置后更改密码

目录服务器密码策略可以指定用户在首次登录时或管理员重置密码后更改密码。管理员设置的默认密码通常遵循公司惯例,如用户初始、用户 ID 或公司名称。如果发现这个惯例,这通常是恶意参与者试图破坏系统的第一个值。因此,建议在管理员重置这些密码后要求用户更改密码。

如果您为密码策略配置此设置,则即使禁用了用户定义的密码,用户需要更改密码。如果密码策略不需要或者不允许用户更改密码,则管理员分配的密码不应遵循任何明显的惯例,应该很难发现。

默认配置不需要用户在重置后更改密码。

用户定义的密码

您可以设置密码策略来允许或不允许用户更改自己的密码。良好的密码是强密码策略的关键。良好的密码不应使用普通词语,如字典单词、pet 或子代的名称、生日、用户 ID 或任何可轻松发现的用户的信息(或存储在目录本身中)。良好的密码应包含字母、数字和特殊字符的组合。但是,为了方便起见,用户通常使用易于记住的密码。因此,一些企业选择为用户设置密码,以满足强大密码条件,也不允许用户更改密码。

为用户设置密码有以下缺陷:

  • 它需要大量的管理员时间。
  • 因为管理员指定的密码通常更难以记住,用户更有可能写出密码,从而增加发现的风险。

默认情况下,允许用户定义的密码。

密码过期

密码策略可允许用户无限期地使用相同的密码,或指定在给定时间后过期的密码。通常,使用较长的密码会被发现。但是,如果密码经常过期,用户可能很难记住它们,并采取措施写出密码。常见策略是使密码每 30 到 90 天过期。即使禁用密码过期时间,服务器也会记住密码过期规格。如果重新启用了密码过期,则密码只在最后一次禁用前设定的时间有效。例如,如果您将密码配置为每 90 天过期,然后禁用并重新启用密码过期,则默认的密码过期持续时间会保留 90 天。

默认情况下,用户密码永不过期。

过期警告

如果您设置了密码过期周期,最好在用户密码过期前向用户发送警告。

当用户绑定到服务器时,目录服务器会显示警告。如果启用了密码过期,默认情况下,Directory 服务器通过使用 LDAP 消息向用户发送警告信息,在用户密码过期前一天。用户客户端应用应支持此功能。

密码过期警告的有效范围为从一到 24,855 天。

注意

在 Directory 服务器发送过期警告前,密码 永不 过期。

宽限期限制

过期的密码 宽限期 意味着用户仍然可以登录到系统,即使其密码已过期。要允许某些用户使用过期密码登录,请在密码过期后指定允许用户的宽限期尝试次数。

默认情况下,Directory 服务器不允许宽限期。

密码语法检查

密码语法检查强制实施密码字符串的规则,以便任何密码都必须满足或超过某些条件。所有密码语法检查都可以在全局、每个子树或每个用户应用。passwordCheckSyntax 属性管理密码语法检查。

默认密码语法要求最小密码长度为八个字符,且密码中没有使用任何普通词语。微小的词语是存储在 uid,cn,sn,givenName,ou, 或 mailattributes 中的任何值。

另外,您可以使用其他形式的密码语法强制,为密码语法提供不同的可选类别:

  • 密码中需要的最小字符数(passwordMinLength)。
  • 最小数字字符数,即零到 9 之间的数字(passwordMinDigits)。
  • 最小 ASCII 字母字符数,包括大写和小写(passwordMinAlphas)。
  • 最小大写 ASCII 字母字符数(passwordMinUppers)。
  • 最小小写 ASCII 字母字符数(passwordMinLowers)。
  • 最少的特殊 ASCII 字符数,如 !@#$ (passwordMinSpecials)。
  • 最小 8 位字符数(passwordMin8 位)。
  • 可以立即重复相同字符的次数上限,如 aaabbb (passwordMaxRepeats)。
  • 密码需要的最小字符类别数;类别可以是大写或小写字母、特殊字符、数字或 8 位字符(passwordMinCategories)。
  • 目录服务器针对 CrackLib 字典(passwordDictCheck)检查密码。
  • 目录服务器检查密码是否包含 palindrome (passwordPalindrome)。
  • 目录服务器可防止设置同一类别中有更多连续字符的密码(passwordMaxClassChars)。
  • 目录服务器可防止设置包含特定字符串的密码(passwordBadWords)。
  • 目录服务器可防止设置包含管理员定义属性中设置的字符串的密码(passwordUserAttributes)。

需要的更多语法类别,其密码越高。

默认情况下禁用密码语法检查。

密码长度

密码策略可能需要用户密码的最短长度。通常,较短的密码更易于破解。密码的建议最小长度为八个字符。这很难破解但很短,用户可以在不写出密码的情况下记住密码。此属性的有效值范围从两个到 512 个字符。

默认情况下,服务器没有最小密码长度。

密码最短期限

密码策略可以阻止用户更改指定时间的密码。当您将 passwordMinAge 属性与 passwordHistory 属性结合使用时,用户无法重复使用旧密码。例如,如果密码最短期限(passwordMinAge)属性为两天,则用户在单个会话期间无法重复更改密码。这可以防止它们通过密码历史记录加以利用,以便他们可以重复利用旧密码。

passwordMinAge 属性的值的有效范围从零到 24 855 天。值为零(0)表示用户可以立即更改密码。

密码历史记录

目录服务器可以在密码历史记录中存储两个到 24 密码。如果密码位于历史记录中,用户无法将其密码重置为旧密码。这可防止用户重复使用容易记住的一些密码。或者,您可以禁用密码历史记录,从而允许用户重复使用密码。

即使密码历史记录关闭,密码也会停留在历史记录中。如果重新打开密码历史记录,用户无法在禁用密码历史记录前重复使用历史记录中的密码。

默认情况下,服务器不会维护密码历史记录。

密码存储方案

密码存储方案指定了在目录中存储目录服务器密码的加密类型。目录服务器支持多个不同的密码存储方案:

基于密码的 Key Derivation Function 2 (PBKDF2_SHA256, PBKDF2-SHA1, PBKDF2-SHA256, PBKDF2-SHA512)
这是最安全的密码存储方案。默认存储方案为 PBKDF2-SHA512。
Salted Secure Hash Algorithm (SSHA、SSHA-256、SSHA-384 和 SSHA-512)
推荐的 SSHA 方案是 SSHA-256 或更强大的。
CLEAR
这意味着没有加密,它是 SASL Digest-MD5 唯一选项,因此使用 SASL 需要 CLEAR 密码存储方案。虽然目录存储的密码可以通过使用访问控制信息(ACI)指令来保护,但它仍然不是将纯文本密码存储在目录中的最佳选择。
安全哈希算法(SHA、SHA-256、SHA-384 和 SHA-512)
这比 SSHA 的安全性较低。
UNIX 加密
这个算法提供与 UNIX 密码的兼容性。
MD5
此存储方案比 SSHA 不太安全,但对于需要 MD5 的传统应用程序包括该存储方案。
Salted MD5
这个存储方案比普通 MD5 哈希更安全,但安全性仍低于 SSHA。此存储方案不包含与新密码搭配使用,但有助于从支持 salted MD5 的目录迁移用户帐户。

密码上次更改时间

passwordTrackUpdateTime 配置属性告知服务器记录最后一次目录服务器更新条目密码的时间戳。目录服务器将密码更改时间保存为用户条目中的操作属性 pwdUpdateTime,它与 modifyTimestamplastModified 操作属性分开。

默认情况下,服务器不会存储上次更改时间的密码。

7.6.3. 在复制环境中设计密码策略

目录服务器在复制环境中强制使用密码和帐户锁定策略,如下所示:

  • 在数据供应商中强制执行密码策略。
  • 在复制设置中的所有服务器上强制使用帐户锁定。

目录服务器在目录中复制密码策略信息,如密码年龄、帐户锁定计数器和过期警告计数器。但是,目录服务器不会复制配置信息,如密码语法和密码修改的历史记录。目录服务器在本地存储此信息。

在复制环境中配置密码策略时,请考虑以下点:

  • 所有副本都发出 impending password expiration 的警告。目录服务器在每台服务器上保留此信息,因此如果用户依次绑定到多个副本,用户会多次收到相同的警告。另外,如果用户更改密码,副本可能需要一些时间才能接收此信息。如果用户更改密码,然后立即重新绑定,绑定可能会失败,直到副本注册更改为止。
  • 同一绑定行为应该在所有服务器上发生,包括供应商和副本。始终在每台服务器上创建相同的密码策略配置信息。
  • 帐户锁定计数器在多层次环境中可能无法按预期工作。
返回顶部
Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。 了解我们当前的更新.

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

Theme

© 2025 Red Hat