搜索

7.7. 设计访问控制

download PDF

在决定身份验证方案后,决定如何使用这些方案来保护目录中所含的信息。访问控制可以指定某些客户端有权访问特定信息,而其他客户端则不能访问。

使用一个或多个 访问控制列表 (ACL)来定义访问控制。目录 ACL 由一个或多个 访问控制信息 (ACI)语句组成,允许或拒绝权限,如读、写、搜索和比较,与指定的条目及其属性进行比较。

使用 ACL,您可以在目录树的任何级别上设置权限:

  • 整个目录
  • 目录的特定子树
  • 目录中的特定条目
  • 特定的一组条目属性
  • 任何与给定 LDAP 搜索过滤器匹配的条目

另外,您可以为特定用户、属于特定组的所有用户或目录的所有用户设置权限。您可以定义网络位置的访问,如 IP 地址(IPv4 或 IPv6)或 DNS 名称。

7.7.1. 关于 ACI 格式

在设计安全策略时,您需要了解 ACI 在目录中如何表示,以及您可以设置的权限。

目录 ACI 使用以下通用形式:

target permission bind_rule

ACI 变量有以下描述:

目标
指定条目,通常是子树,即 ACI 目标、其目标属性或两者。目标标识 ACI 应用到的目录元素。ACI 只能将一个条目为目标,但可以针对多个属性。此外,目标还可以包含 LDAP 搜索过滤器。您可以为包含通用属性值的广泛分散条目设置权限。
权限
标识 ACI 集合的实际权限。权限变量指出 ACI 允许或拒绝特定类型的目录访问,如读取或搜索,到指定的目标。
绑定规则
标识权限应用到的绑定 DN 或网络位置。绑定规则也可以指定 LDAP 过滤器,如果该过滤器被评估为绑定客户端应用程序,则 ACI 应用到客户端应用程序。

因此,对于目录对象目标,如果绑定规则为 true,ACI 允许或拒绝权限。

权限和绑定规则被设置为对,每个目标可以有多个权限绑定规则对。您可以有效地为任何给定目标设置多个访问控制。例如:

target (permission bind_rule)(permission bind_rule) ...

其他资源

7.7.1.1. 目标

ACI 可以以条目上的目录条目和属性为目标。

定位目录条目包括该条目及其在权限范围内的所有子条目。如果没有为 ACI 显式定义目标条目,则 ACI 目标到包含 ACI 语句的目录条目。ACI 只能以一个条目为目标,或者只有与单个 LDAP 搜索过滤器匹配的条目。

目标属性将权限仅应用到属性值的子集。当您以一组属性为目标时,指定 ACI 目标或 ACI 不明确目标的属性。排除目标设置权限中的属性,但对象类结构允许的一些属性。

7.7.1.2. 权限

权限可以允许或拒绝访问。避免拒绝权限,请参阅 允许或拒绝访问

权限可以是在目录服务上执行的任何操作:

权限描述

指明用户是否可以读取目录数据。

指明用户是否可以更改或创建目录。此外,此权限允许用户删除目录数据,但不能删除条目本身。但是,要删除整个条目,用户必须拥有删除权限。

搜索

指明用户是否可以搜索目录数据。这与 read 权限不同,如果用户作为搜索操作的一部分返回,则允许用户查看目录数据。

例如,如果您允许搜索通用名称(cn)并读取个人房间号码,则目录服务器可以将房间号码作为通用名称搜索的一部分返回。但是,用户无法使用房间号码作为搜索的主题。使用这个组合以防止人员搜索位于特定房间的人员。

比较

指明用户是否可以比较数据。比较权限表示搜索功能,但 Directory 服务器不会返回搜索实际目录信息。相反,Directory 服务器会返回一个简单的布尔值,指示比较值是否匹配。使用 compare 操作在目录身份验证期间匹配 userPassword 属性值。

自我写入

仅对组管理使用自我写入权限。使用这个权限,用户可以向组中添加或从组中删除自己。

添加

指明用户可以在目标条目下创建子条目。

删除

指明用户是否可以删除目标条目。

Proxy

表示用户可以使用除 Directory Manager 之外的任何其他 DN 访问此 DN 的权限的目录。

7.7.1.3. 绑定规则

绑定规则定义 ACI 应用到的绑定 DN (用户)。它还可以指定 bind 属性,如当天或 IP 地址的时间。

另外,轻松绑定规则,使 ACI 仅适用于用户自己的条目。用户可以更新自己的条目,而无需运行更新另一个用户条目的风险。

绑定规则指示 ACI 适用时的以下情况:

  • 如果绑定操作到达特定的 IP 地址(IPv4 或 IPv6)或者 DNS 主机名。您可以使用它来强制从给定机器或网络域进行所有目录更新。
  • 如果用户匿名绑定。为匿名绑定设置权限意味着该权限适用于绑定到该目录的任何人。
  • 对于成功绑定到该目录的任何人。在阻止匿名访问时,您可以使用它来允许常规访问。
  • 如果用户已绑定为条目的直接父项。
  • 如果用户满足特定的 LDAP 搜索标准。

目录服务器为绑定规则提供以下关键字:

如果绑定 DN 是直接父条目,则绑定规则为 true。您可以授予允许目录条目管理其直接子条目的特定权限。
Self
如果绑定 DN 与请求访问的条目相同,则绑定规则为 true。您可以授予特定权限,以允许个人更新自己的条目。
All
对于成功绑定到该目录的任何人,绑定规则是 true。
Anyone
每个人都绑定规则都是 true。使用此关键字来允许或拒绝匿名访问。

7.7.2. 设置权限

默认情况下,Directory 服务器拒绝对所有用户的访问,但 Directory Manager 除外。因此,您必须设置 ACI,以便用户能够访问该目录。

7.7.2.1. 优先级规则

当用户尝试任何对目录条目的访问时,Directory 服务器会检查目录中设置的访问控制。要确定访问,目录服务器应用 优先级规则。此规则指出,当存在两个冲突的权限时,拒绝访问的权限优先于授予访问权限的权限。

例如,如果目录服务器拒绝目录根目录的写入权限,并且该权限适用于访问该目录的任何人,那么无论可能允许写出任何权限,任何用户都可以写入该目录。要允许特定用户对目录写入权限,您需要设置原始 deny-for-write 的范围,使其不包括该用户。然后,您需要为用户设置额外的允许权限。

7.7.2.2. 允许或拒绝访问

您可以允许或拒绝对目录树的访问,但要小心地拒绝访问。由于优先级规则,如果目录服务器找到在更高级别拒绝访问的规则,它将拒绝较低级别的访问,无论可能授予访问权限的冲突权限是什么。

限制允许访问规则的范围只包括用户或客户端应用程序的最小可能子集。例如,您可以设置权限,以允许用户在其目录条目上写入任何属性,但拒绝除 Directory 管理员组成员以外的所有用户写入 uid 属性的权限。

或者,以以下方式编写允许写入访问的两个访问规则:

  • 创建一个规则,允许向每个属性写入特权,但 uid 属性除外。此规则应适用于每个人。
  • 创建一个规则,允许向 uid 属性写入特权。此规则应仅适用于 Directory Administrators 组的成员。

仅允许特权,避免设置显式拒绝特权。

7.7.2.3. 何时拒绝访问

很少需要设置显式拒绝权限,但在以下情况下非常有用:

  • 您有一个大型目录树,其中包括复杂的 ACL。

    为了安全起见,目录服务器可能需要突然拒绝对特定用户、组或物理位置的访问。不必花费时间仔细检查现有的 ACL 以了解如何限制允许权限,而是临时设置显式拒绝特权,直到您有时间进行分析。如果 ACL 变得复杂,则拒绝 ACI 只在以后为管理开销增加成本。在可能的情况下,尽快取消相关的 ACL 以避免显式拒绝特权,然后简化整体访问控制方案。

  • 您可以根据周中的一天或一天的一个小时设置访问控制。

    例如,目录服务器可以在 11:00 p.m 中拒绝从 Sunday 编写活动。(2300)至周一到周一下午 1 点。(0100).从管理的角度来看,管理 ACI 可能更容易地限制此类型的基于时间的访问,而不是搜索所有 allow-for-write ACI 并限制其在这个时间段内的范围。

  • 在委派目录管理机构到多个人时,您可以限制特权。

    要允许一个人或一组人管理目录树的某些部分,而无需修改树的某些方面,请使用明确拒绝特权。

    例如,要确保 Mail Administrators 不允许对通用名称(cn)属性进行写访问,请设置可明确拒绝对通用 name 属性的写访问的 ACI。

7.7.2.4. 放置访问控制规则的位置

您可以为目录中的任何条目添加访问控制规则。通常,管理员将访问控制规则添加到带有对象类 domainComponent,country,organization,organizationalUnit,inetOrgPerson, 或 group 的条目。将规则组织为尽可能多的组,以简化 ACL 管理。规则适用于其目标条目和所有条目子项。因此,最好将访问控制规则放在目录或目录分支点上,而不是跨各个叶条目(如个人)分散它们。

7.7.2.5. 使用过滤的访问控制规则

您可以使用 LDAP 搜索过滤器来设置与一组定义的条件匹配的任何目录条目的访问权限。例如,允许对包含 organizationalUnit 属性的任何条目的读取访问权限,该属性设置为 marketing

过滤的访问控制规则允许预定义的访问级别。例如,该目录包含家地址和电话号码信息。有些人希望发布此信息,而其他人希望取消列出。

您可以使用以下方法配置访问:

  1. 向名为 publishHomeContactInfo 的每个用户目录条目添加一个属性。
  2. 设置一个访问控制规则,仅针对其 publishHomeContactInfo 属性设为 true 的条目授予对 homePhonehomePostalAddress 属性的读访问权限。使用 LDAP 搜索过滤器来表达此规则的目标。
  3. 允许目录用户将自己的 publishHomeContactInfo 属性的值更改为 true 或 false。这样,目录用户可以决定此信息是否公开可用。

其他资源

LDAP 搜索过滤器

7.7.3. 查看 ACI :获取有效的权限

get valid permissions (GER)是一个扩展的 ldapsearch 命令,该命令返回在条目中的每个属性上设置的访问控制权限。通过此搜索,LDAP 客户端可以决定服务器访问控制配置允许用户执行的操作。

访问控制信息被分为两组的访问权限:条目权利和属性权限。条目权限是仅限于该特定条目的权限,如修改或删除。属性权限是该目录中对该属性的每个实例的访问权限。

在以下情况下可能需要进行详细的访问控制:

  • 您可以使用 GER 命令更好地组织目录的访问控制指令。与另一个组相比,通常需要限制一组用户可以查看或编辑的内容。例如,QA Managers 组的成员可能有权限搜索并读 managersalary 等属性,当只有 HR Group 的成员有权限修改或删除它们。检查用户或组的有效权限是验证管理员是否设置适当的访问控制的方法。
  • 您可以使用 GER 命令查看可以在您的个人条目上查看或修改哪些属性。例如,用户应具有对 homePostalAddresscn 等属性的访问权限,但只能具有对 managersalary 属性的读取访问权限。

7.7.4. 使用 ACI:一些提示和技巧

以下提示有助于降低管理目录安全模型的管理负担,并改进目录性能特性:

  • 最小化目录中的 ACI 数量。

    虽然目录服务器可以评估超过 50,000 个 ACI,但难以管理大量 ACI 语句。大量 ACI 可让人工管理员立即决定特定客户端可用的目录对象。

    目录服务器使用宏最小化目录中的 ACI 数量。使用宏在 ACI 目标或绑定规则或两者中代表 DN 或其部分。

  • 平衡允许和拒绝权限。

    虽然默认规则是拒绝对任何没有特别授予访问权限的用户的访问,但最好使用一个 ACI 来减少 ACI 的数量,以允许访问树的根,以及少量拒绝 ACI 条目。这种情境可避免使用多个允许 ACI 接近叶条目。

  • 识别 ACI 中的最小属性集合。

    当允许或拒绝对属性子集的访问时,请选择如果最小列表是允许或拒绝的属性集合。然后设置 ACI,以便它只需要管理最小列表。

    例如,person 对象类包含大量属性。要允许用户仅更新几个属性,请编写 ACI,仅允许对这些属性进行写入访问。但是,要允许用户更新除几个属性外的所有属性,请创建 ACI,允许除这几个命名的属性外进行写入访问。

  • 仔细使用 LDAP 搜索过滤器。

    搜索过滤器不会直接命名您管理访问权限的对象。因此,使用它们可能会导致意外的结果。特别是,当目录变得更为复杂时。在 ACI 中使用搜索过滤器前,使用同一过滤器运行一个 ldapsearch 操作,从而使结果明确。

  • 不要在目录树的不同部分中重复 ACI。

    防止重叠的 ACI。例如,如果目录根点上有一个 ACI,允许组对 commonNamegivenName 属性进行写入访问权限,而另一个 ACI 则仅允许对 commonName 属性进行同一组写入访问权限,然后考虑更新 ACI,以便只有一个控制授予对组的写入访问权限。

    当目录增长更为复杂时,意外重叠的 ACI 的风险也会快速增加。通过避免 ACI 重叠,通过减少目录中包含的 ACI 总数来简化安全管理。

  • 名称 ACI。

    虽然命名 ACI 是可选的,但为每个 ACI 提供一个简短的、有意义的名称有助于管理安全模型。

  • 在目录中尽可能地对 ACI 进行分组。

    尝试将 ACI 位置限制为目录根点和主要目录分支点。对 ACI 进行分组有助于管理 ACI 的总列表,并帮助将目录中的 ACI 总数保持最小。

  • 避免使用双负数,例如,如果绑定 DN 不等于 cn=Joe,则拒绝写入。

    虽然此语法对服务器完全可接受,但它不是人类可读的。

7.7.5. 将 ACI 应用到根 DN (Directory Manager)

通常,访问控制规则不适用于目录管理器用户。Directory Manager 在 dse.ldif 文件中定义,而不是在常规用户数据库中定义,ACI 目标不包括该用户。

目录管理器需要高级别的访问权限才能执行维护任务并响应事件。但是,您可以为 Directory Manager 授予一定级别的访问控制,以防止以 root 用户身份执行未经授权的访问或攻击。

使用 RootDN Access Control 插件设置特定于 Directory Manager 用户的特定访问控制规则:

  • 基于时间的访问控制,允许或拒绝特定天数和特定时间范围的访问。
  • IP 地址规则,用于允许或拒绝从定义的 IP 地址、子网和域的访问。
  • 主机访问规则,以允许或拒绝对特定主机、域和子域的访问。

您只能为目录管理器设置一个访问控制规则。它位于插件条目中,它适用于整个目录。

重要

确保 Directory Manager 帐户具有适当的访问权限级别。此管理用户可能需要在非小时内或响应故障时执行维护操作。在这种情况下,设置太强的时间或一天规则可以防止 Directory Manager 用户有效地管理该目录。

Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

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

让开源更具包容性

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

關於紅帽

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

© 2024 Red Hat, Inc.