第 2 章 管理访问控制


了解如何定义哪些用户可以对 Red Hat Directory Server 中的后缀和条目执行特定的操作。这些任务由访问控制指令(ACI)控制。了解不同的 ACI 类型、ACI 用例、绑定规则和检查条目访问权限的方法。

2.1. 管理访问控制指令

当目录服务器收到请求时,它使用绑定操作中的用户提供的身份验证信息,以及目录中定义的访问控制指令(ACI)来允许或拒绝访问请求的条目或属性。服务器可以允许或拒绝操作的权限,如 读取写入搜索 和比较。授予用户的权限级别取决于提供的身份验证信息。

Directory 服务器中的访问控制可让您在 ACI 适用时设置精确规则:

  • 对于整个目录、子树或特定条目
  • 对于特定用户,属于特定组或角色的所有用户,或者目录中的所有用户
  • 对于特定位置,如 IP 地址、IP 范围或 DNS 名称。

    请注意,负载均衡器可能会影响特定于位置的规则。

重要

复杂的 ACI 很难读和理解。您可以编写多个简单规则,而不是编写一个复杂的 ACI,以实现同样的效果。但是,大量 ACI 也会增加 ACI 处理的成本。

2.1.1. ACI 放置

目录服务器将访问控制指令(ACI)存储在目录条目中的多值 aci 操作属性中。要设置 ACI,请将 aci 属性添加到对应的目录条目中。目录服务器应用 ACI:

  • 如果它没有任何子条目,则只适用于包含 ACI 的条目。例如,如果客户端需要访问 uid=user_name,ou=People,dc=example,dc=com 对象,且 ACI 仅在 dc=example,dc=com 上设置,而不会影响任何子条目。

    注意

    带有 add 权限的 ACI 也应用到将来创建的子条目。

  • 对于包含 ACI 的条目以及它下的所有条目,如果它有子条目。因此,当服务器评估对任何给定条目的访问权限时,它会验证一个请求的和目录后缀之间的每个条目的 ACI,以及条目本身上的 ACI。

    例如,ACI 在 dc=example,dc=comou=People,dc=example,dc=com 条目上设置:如果客户端想要访问 uid=user_name,ou=People,dc=example,dc=com 对象,它没有 ACI 设置,目录服务器首先验证 ou=People,dc=example,dc=com 条目上的 ACI。如果这个 ACI 授予访问权限,则评估将停止并授予访问权限。如果没有,目录服务器会在 ou=People,dc=example,dc=com 上验证 ACI。如果这个 ACI 成功授权客户端,它可以访问该对象。

注意

rootDSE 条目中设置的 ACI 仅适用于此条目。

在条目中创建的 ACI 无法直接应用到该条目,而是应用到以下子树中的某些或所有条目。这种方法的优点是,可以将常规 ACI 放置到目录树中,使其对位于树中的条目的影响。例如,目标条目为包含 inetOrgPerson 对象类的 ACI,可以在 organizationalUnit 条目或 locality 条目级别创建。

注意

通过将常规规则放在高级别分支点来最小化目录树中的 ACI 数量。要限制更多特定规则的范围,请尽可能将其放在叶条目中。

2.1.2. ACI 的结构

aci 属性使用以下语法:

(target_rule) (version 3.0; acl "ACL_name"; permission_rule bind_rules;)
Copy to Clipboard Toggle word wrap
  • target_rule 指定控制访问的条目、属性或一组条目和属性。
  • 版本 3.0 是一个必需的字符串,用于标识访问控制指令(ACI)版本。
  • ACL "ACL name" 设置描述 ACI 的名称或字符串。
  • permission_rule 设置允许或拒绝的权限,如 读取或写入
  • bind_rules 指定在绑定期间必须匹配哪些规则来允许或拒绝访问。

权限和绑定规则对称为访问控制规则。

要有效地为给定目标设置多个访问控制,您可以为每个目标设置多个访问控制规则:

(target_rule)(version 3.0; acl "ACL_name"; permission_rule bind_rules; permission_rule bind_rules; ... ;)
Copy to Clipboard Toggle word wrap

2.1.3. ACI 评估

要评估对特定条目的访问权限,服务器会创建条目本身和父条目上存在的访问控制指令(ACI)的列表,备份到 Directory Server 中存储的顶级条目。ACI 在特定实例的所有数据库中评估,但不在不同实例间进行评估。

目录服务器根据 ACI 的语义评估这个 ACI 列表,而不是在目录树中的放置。这意味着,接近目录树根目录的 ACI 不优先于与目录树留下的 ACI。

在目录服务器中,ACI 中的 deny 权限优先于 允许 权限。例如,如果您拒绝在目录的根目录中写入权限,则任何用户都可以写入该目录,无论其他 ACI 是否授予这个权限。要为特定用户授予目录的写入权限,您必须在原始拒绝规则中添加例外,以允许该用户在该目录中写入。

注意

对于改进的 ACI,请使用精细的 allow 规则,而不是 拒绝规则

2.1.4. ACI 的限制

当您设置访问控制指令(ACI)时,会有以下限制:

  • 如果您的目录数据库在多个服务器上分发,则以下限制适用于您可以在 ACI 中使用的关键字:

    • 根据使用 groupdn 关键字的组条目,ACI 必须位于与组条目相同的服务器上。

      如果组是动态的,则组的所有成员都必须在服务器上有一个条目。静态组的成员条目可以位于远程服务器中。

    • 使用 roledn 关键字的 ACI 根据角色定义定义,必须位于与角色定义条目相同的服务器上。要具有该角色的每个条目也必须位于同一服务器上。

    但是,您可以使用 userattr 关键字将目标条目中存储的值与存储在绑定用户条目中的值匹配。在这种情况下,即使 bind 用户在存储 ACI 的服务器上没有条目,也会正常评估访问。

  • 在以下 ACI 关键字中,您无法使用虚拟属性,如 Service (CoS)属性:

    • targetfilter
    • targattrfilters
    • userattr
  • 访问控制规则仅在本地服务器上评估。例如,如果您在 ACI 关键字的 LDAP URL 中指定服务器的主机名,则 URL 将被忽略。

2.1.5. 目录服务器在复制拓扑中处理 ACI

访问控制指令(ACI)存储在条目 的辅助 属性中。因此,如果包含 ACI 的条目是复制的数据库的一部分,则会复制 ACI。

ACI 始终在解析传入 LDAP 请求的服务器上评估。当消费者服务器收到更新请求时,它会在评估请求是否可以在供应商上提供服务前向供应商服务器返回引用。

2.1.6. 显示、添加、删除和更新 ACI

您可以使用 ldapsearch 工具来搜索,以及 ldapmodify 工具来添加、删除和更新访问控制指令(ACI)。

显示 ACI :

例如,要显示 dc=example,dc=com 和子条目上设置的 ACI,请输入:

# ldapsearch -D "cn=Directory Manager" -W -H ldap://server.example.com -x -b "dc=example,dc=com" -s sub '(aci=*)' aci
Copy to Clipboard Toggle word wrap

添加 ACI

例如,要将 ACI 添加到 ou=People,dc=example,dc=com 条目,请输入:

# ldapmodify -D "cn=Directory Manager" -W -H ldap://server.example.com -x

dn: ou=People,dc=example,dc=com
changetype: modify
add: aci
aci: (targetattr="userPassword") (version 3.0; acl
  "Allow users updating their password";
  allow (write) userdn= "ldap:///self";)
Copy to Clipboard Toggle word wrap

删除 ACI

删除 ACI:

  • 如果在条目上只设置了一个 aci 属性,或者您想要从条目中删除所有 ACI:

    # ldapmodify -D "cn=Directory Manager" -W -H ldap://server.example.com -x
    
    dn: ou=People,dc=example,dc=com
    changetype: delete
    delete: aci
    Copy to Clipboard Toggle word wrap
  • 如果条目中存在多个 ACI,并且您要删除一个特定的 ACI,请指定准确的 ACI:

    # ldapmodify -D "cn=Directory Manager" -W -H ldap://server.example.com -x
    
    dn: ou=People,dc=example,dc=com
    changetype: modify
    delete: aci
    aci: (targetattr="userPassword") (version 3.0; acl "Allow users
      updating their password"; allow (write) userdn= "ldap:///self";)
    Copy to Clipboard Toggle word wrap

更新 ACI

更新 ACI:

  • 删除现有的 ACI。
  • 使用更新的设置添加新的 ACI。

2.1.7. 定义 ACI 目标

访问控制指令(ACI)中的目标规则定义哪个条目服务器应用 ACI。如果您没有设置目标,ACI 应用到包含 aci 属性和以下条目的条目。

在 ACI 中,以下突出显示的部分是目标规则:

(target_rule)(version 3.0; acl "ACL_name"; permission_rule bind_rules;)
Copy to Clipboard Toggle word wrap

对于复杂的 ACI,目录服务器在 ACI 中支持多个带有不同关键字的目标规则:

(target_rule_1)(target_rule_2)(...)(version 3.0; acl "ACL_name"; permission_rule bind_rules;)
Copy to Clipboard Toggle word wrap

如果您指定多个目标规则,则顺序不相关。请注意,您只能在 ACI 中使用每个关键字一次:

  • target
  • targetattr
  • targetattrfilters
  • targetfilter
  • target_from
  • target_to

2.1.7.1. 目标规则的语法

目标规则的一般语法为:

(keyword comparison_operator "expression")
Copy to Clipboard Toggle word wrap
  • 关键字 :设置目标的类型。
  • comparison_operator: Valid 值是 =!=,指明目标是否为表达式中指定的对象。

    警告

    为了安全起见,红帽建议不要使用 != operator,因为它允许对所有其他条目或属性进行指定操作。例如:

    (targetattr != "userPassword");(version 3.0; acl "example"); allow (write) ... );
    Copy to Clipboard Toggle word wrap

    前面的示例允许用户设置、更新或删除除设置 ACI 的 Distinguished Name (DN)下的 userPassword 属性外的任何属性。但是,这还可让用户添加额外的 aci 属性,以允许对此属性进行写入访问权限。

  • 表达式 :设置目标,且必须用引号括起来。表达式本身取决于您使用的关键字。

2.1.7.2. 定位目录条目

要根据可辨识名称(DN)及其下面的条目来控制访问,请在访问控制指令(ACI)中使用 target 关键字。使用 target 关键字的目标规则将 DN 作为表达式:

(target comparison_operator "ldap:///distinguished_name")
Copy to Clipboard Toggle word wrap
注意

您必须在您要为目标的 DN 或更高级别的 DN 上使用 target 关键字设置 ACI。例如,如果您以 ou=People,dc=example,dc=com 为目标,您必须在 ou=People,dc=example,dc=com 或 dc=example,dc=com 中设置 ACI。

例 2.1. 使用 target 关键字

要启用存储在 ou=People,dc=example,dc=com 条目中的用户搜索并显示其自己的条目中的所有属性:

# ldapmodify -D "cn=Directory Manager" -W -H ldap://server.example.com -x

dn: ou=People,dc=example,dc=com
changetype: modify
add: aci
aci: (target = "ldap:///ou=People,dc=example,dc=com") (version 3.0;
 acl "Allow users to read and search attributes of own entry"; allow (search, read)
 (userdn = "ldap:///self");)
Copy to Clipboard Toggle word wrap

使用带有 target 关键字的通配符

您可以使用 * 通配符以多个条目为目标。

以下目标规则示例与 ou=People,dc=example,dc=com 中的所有条目匹配,其 uid 属性设为以字母顺序开头的值:

(target = "ldap:///uid=a*,ou=People,dc=example,dc=com")
Copy to Clipboard Toggle word wrap

根据通配符的位置,规则不仅适用于属性值,也应用到完整的 DN。因此,您可以使用通配符来替代 DN 的部分。

例 2.2. 使用通配符目标目录条目

以下规则以带有匹配 uid 属性的 dc=example,dc=com 树中的所有条目为目标,而不仅仅是存储在 dc=example,dc=com 条目本身中的条目:

(target = "ldap:///uid=user_name*,dc=example,dc=com")
Copy to Clipboard Toggle word wrap

前面的目标规则与多个条目匹配,例如:

  • uid=user_name,dc=example,dc=com
  • uid=user_name,ou=People,dc=example,dc=com
  • uid=user_name2,dc=example,dc=com
重要

目录服务器不支持 DN 的后缀部分中的通配符。例如,如果您的目录的后缀为 dc=example,dc=com,则无法使用此后缀中的通配符目标,如 (target = "ldap:///dc vendor.com")

2.1.7.3. 目标属性

要将访问控制指令(ACI)中的访问限制为某些属性,请使用 targetattr 关键字。例如,此关键字定义:

  • 在读取操作中,将哪些属性返回到客户端
  • 在搜索操作中,将搜索哪些属性
  • 在写入操作中,可以将哪些属性写入对象
  • 在 add 操作中,创建新对象时可以添加哪些属性

在某些情况下,您可以通过将其他目标关键字与 targetattr 结合使用,来使用 targetattr 关键字来保护 ACI。请参阅目标规则的高级使用

重要

和搜索 操作中,默认目标 no 属性。没有 targetattr 关键字的 ACI 仅适用于具有影响完整条目的 ACI,如 adddelete

要分隔使用 targetattr 关键字的目标规则中的多个属性,请使用 ||

(targetattr comparison_operator "attribute_1 || attribute_2 || ...")
Copy to Clipboard Toggle word wrap

表达式中设置的属性必须在 schema 中定义。

表达式中指定的属性适用于创建 ACI 的条目,如果进一步的目标规则不限制,则它的所有条目都应用到它。

例 2.3. 使用 targetattr 关键字

要启用存储在 dc=example,dc=com 中的用户,以及要更新他们自己条目中 userPassword 属性的所有子条目,请输入:

# ldapmodify -D "cn=Directory Manager" -W -H ldap::server.example.com -x

dn: dc=example,dc=com
changetype: modify
add: aci
aci: (targetattr = "userPassword") (version 3.0;
 acl "Allow users updating own userPassword";
 allow (write) (userdn = "ldap:///self");)
Copy to Clipboard Toggle word wrap

将通配符与 targetattr 关键字一起使用

使用 * 通配符,您可以以所有属性为目标:

(targetattr = "*")
Copy to Clipboard Toggle word wrap
警告

为安全起见,请不要将通配符与 targetattr 一起使用,因为它允许访问所有属性,包括操作属性。例如,如果用户可以添加或修改所有属性,用户可以创建额外的 ACI 并增加他们自己的权限。

2.1.7.4. 使用 LDAP 过滤器目标条目和属性

要以与特定条件匹配的一组条目为目标,请将 targetfilter 关键字与 LDAP 过滤器一起使用:

(targetfilter comparison_operator "LDAP_filter")
Copy to Clipboard Toggle word wrap

过滤器表达式是一个标准的 LDAP 搜索过滤器。

例 2.4. 使用 targetfilter 关键字

要为 cn=Human Resources,dc=example,dc.com 组的成员授予权限,以修改将 department 属性设置为 EngineeringSales 的所有条目:

# ldapmodify -D "cn=Directory Manager" -W -H ldap://server.example.com -x

dn: dc=example,dc=com
changetype: modify
add: aci
aci: (targetfilter = "(|(department=Engineering)(department=Sales)")
 (version 3.0; acl "Allow HR updating engineering and sales entries";
 allow (write) (groupdn = "ldap:///cn=Human Resources,dc=example,dc.com");)
Copy to Clipboard Toggle word wrap

targetfilter 关键字以整个条目为目标。如果您将它与 targetattr 关键字相结合,访问控制指令(ACI)仅适用于目标条目的属性子集。请参阅针对与过滤器匹配的条目的某些属性

注意

当目标条目和属性分散到目录中时,使用 LDAP 过滤器非常有用。但是,结果有时无法预测,因为过滤器不会直接命名您要管理访问权限的对象。过滤的 ACI 的目标条目集合可能会随着属性被添加或删除而改变。因此,如果您在 ACI 中使用 LDAP 过滤器,请使用同一过滤器验证它们是否以正确的条目和属性为目标,例如在 ldapsearch 操作中。

使用带有 targetfilter 关键字的通配符

targetfilter 关键字支持通配符,类似于标准的 LDAP 过滤器。例如,要以其值以 adm 开头的所有 uid 属性为目标,请使用:

(targetfilter = "(uid=adm*) ...)
Copy to Clipboard Toggle word wrap

2.1.7.5. 使用 LDAP 过滤器来目标属性值

您可以使用访问控制来针对特定属性值。这意味着,如果该属性的值满足访问控制指令(ACI)中定义的条件,您可以对属性授予或拒绝权限。根据属性的值授予或拒绝访问的 ACI 被称为基于值的 ACI。这只适用于 ADDDEL 操作。您不能根据特定值限制搜索权限。

要创建基于值的 ACI,请使用以下语法的 targattrfilters 关键字:

  • 对于只有一个属性和过滤器组合的操作:

    (targattrfilters="operation=attribute:filter")
    Copy to Clipboard Toggle word wrap
  • 对于具有多个属性和过滤器组合的一个操作:

    (targattrfilters="operation=attribute_1:filter_1 && attribute_2:filter_2 ... && attribute_m:filter_m")
    Copy to Clipboard Toggle word wrap
  • 对于两个操作,每个操作都有多个属性和过滤器组合:

    (targattrfilters="operation_1=attribute_1_1:filter_1_1 && attribute_1_2:filter_1_2 ... && attribute_1_m:filter_1_m , operation_2=attribute_2_1:filter_2_1 && attribute_2_2:filter_2_2 ... & attribute_2_n:filter_2_n ")
    Copy to Clipboard Toggle word wrap

在前面的语法示例中,您可以设置 adddel 的操作。attribute:filter 组合设置过滤器,以及过滤器应用到的属性。

下面描述了过滤器如何匹配:

  • 在创建条目和过滤器时,过滤器应用到新条目中的属性,该属性的每个实例都必须与过滤器匹配。
  • 当删除条目和过滤器应用到条目中的属性时,该属性的每个实例也必须与过滤器匹配。
  • 当修改条目和操作会添加一个属性时,应用到该属性的 add 过滤器必须匹配。
  • 如果操作删除某个属性,则应用到该属性的 del 过滤器必须匹配。如果条目中已存在的属性单独值都被替换,则 adddel 过滤器必须匹配。

例 2.5. 使用 targattrfilters 关键字

要创建一个 ACI,它允许用户将任何角色添加到自己的条目中,但 Admin 角色除外,并添加 telephone 属性,只要值以 123 前缀开头,请输入:

# ldapmodify -D "cn=Directory Manager" -W -H ldap::server.example.com -x

dn: dc=example,dc=com
changetype: modify
add: aci
aci: (targattrfilters="add=nsroledn:(!(nsroledn=cn=Admin)) &&
 telephoneNumber:(telephoneNumber=123*)") (version 3.0;
 acl "Allow adding roles and telephone";
 allow (add) (userdn = "ldap:///self");)
Copy to Clipboard Toggle word wrap

2.1.7.6. 目标源和目标 DN

在某些情况下,管理员希望允许用户移动目录条目。在访问控制指令(ACI)中使用 target_fromtarget_to 关键字,但您可以在不启用用户的情况下指定操作的源和目标:

  • 要将条目从不同的源移动,如 ACI 中设置。
  • 要将条目移到 ACI 中设置的不同目的地。
  • 要从源可辨识名称(DN)中删除现有条目。
  • 要向目标 DN 添加新条目,请执行以下操作:

例 2.6. 使用 target_from 和 target_to 关键字

要启用 uid=user,dc=example,dc=com 帐户,将用户帐户从 cn=staging,dc=example,dc=com 条目移到 cn=people,dc=example,dc=com,请输入:

# ldapmodify -D "cn=Directory Manager" -W -H ldap:server.example.com -x

dn: dc=example,dc=com
changetype: modify
add: aci
aci: (target_from="ldap:///uid=*,cn=staging,dc=example,dc=com")
 (target_to="ldap:///cn=People,dc=example,dc=com")
 (version 3.0; acl "MODDN from"; allow (moddn))
 userdn="ldap:///uid=user,dc=example,dc=com";)
Copy to Clipboard Toggle word wrap

ACI 仅适用于定义它们的子树。在上例中,ACI 仅适用于 dc=example,dc=com 子树。

如果没有设置 target_fromtarget_to 关键字,ACI 会与任何源或目的地匹配。

2.1.8. 目标规则的高级使用

通过组合多个关键字,您可以创建复杂的目标规则。本节提供了目标规则的高级用法示例。

2.1.8.1. 委派权限以创建和维护组

在某些情况下,管理员希望将权限委派给其他帐户或组。通过组合目标关键字,您可以创建可解决此请求的安全访问控制指令(ACI)。

例 2.7. 委派权限以创建和维护组

要启用 uid=user,ou=People,dc=example,dc=com" 帐户,以便在 ou=groups,dc=example,dc=com 条目中创建或更新组:

# ldapmodify -D "cn=Directory Manager" -W -H ldap://server.example.com -x

dn: dc=example,dc=com
changetype: modify
add: aci
aci: (target = "ldap:///cn=*,ou=Groups,dc=example,dc=com")
 (targattrfilters="add=objectclass:(|(objectclas=top)(objectclass=groupOfUniqueNames)))
 (targetattr="cn || uniqueMember || objectClass")
 (version 3.0; acl "example"; allow (read, search, write, add)
 (userdn = "ldap:///uid=test,ou=People,dc=example,dc=com");)
Copy to Clipboard Toggle word wrap

为了安全起见,前面的示例添加了某些限制。uid=test,ou=People,dc=example,dc=com 用户:

  • 可以创建需要包含 topgroupOfUniqueNames 对象类的对象。
  • 无法添加额外的对象类,如 帐户。例如,这可以防止使用 Directory Server 帐户进行本地身份验证,创建具有无效用户 ID 的新用户,如 root 用户的 0。

targetfilter 规则确保 ACI 条目只适用于带有 groupofuniquenames 对象类和 targetattrfilter 规则的条目,确保无法添加其他对象类。

2.1.8.2. 定位条目和属性

目标 根据可分辨名称(DN)控制访问。但是,如果您将其与通配符和 targetattr 关键字结合使用,您可以以条目和属性为目标。

例 2.8. 定位条目和属性

要启用 uid=user,ou=People,dc=example,dc.com 用户,在 dc=example,dc=com 子树中的所有机构单元中读取和搜索组成员:

# ldapmodify -D "cn=Directory Manager" -W -H ldap://server.example.com -x

dn: dc=example,dc=com
changetype: modify
add: aci
aci: (target="ldap:///cn=*,dc=example,dc=com")(targetattr="member" || "cn") (version 3.0;
 acl "Allow uid=user to search and read members of groups";
 allow (read, search) (userdn = "ldap:///uid=user,ou=People,dc=example,dc.com");)
Copy to Clipboard Toggle word wrap

2.1.8.3. 针对与过滤器匹配的条目的某些属性

如果您将 targetattrtargetfilter 关键字组合成两个目标规则,您可以以与过滤器匹配的条目中的某些属性为目标。

例 2.9. 针对与过滤器匹配的条目的某些属性

要允许 cn=Engineering Admins,dc=example,dc=com 组的成员修改所有将 department 属性设置为 EngineeringjpegPhotomanager 属性,请输入:

# ldapmodify -D "cn=Directory Manager" -W -H ldap://server.example.com -x

dn: dc=example,dc=com
changetype: modify
add: aci
aci: (targetattr = "jpegPhoto || manager")
 (targetfilter = "(department=Engineering)") (version 3.0;
 acl "Allow engineering admins updating jpegPhoto and manager of department members";
 allow (write) (groupdn = "ldap:///cn=Engineering Admins,dc=example,dc.com");)
Copy to Clipboard Toggle word wrap

2.1.8.4. 定位单个目录条目

要以单个目录条目为目标,请组合 targetattrtargetfilter 关键字。

例 2.10. 定位单个目录条目

要启用 uid=user,ou=People,dc=example,dc=com 用户,在 ou=Engineering,dc=example,dc=com 条目中读和搜索 ou 和 cn 属性:

# ldapmodify -D "cn=Directory Manager" -W -H ldap://server.example.com -x

dn: ou=Engineering,dc=example,dc=com
changetype: modify
add: aci
aci: (targetattr = "ou || cn")
 (targetfilter = "(ou=Engineering)") (version 3.0;
 acl "Allow uid=user to search and read engineering attributes";
 allow (read, search) (userdn = "ldap:///uid=user,ou=People,dc=example,dc.com");)
Copy to Clipboard Toggle word wrap

要启用前面的示例,仅以 ou=Engineering,dc=example,dc=com 条目为目标,ou=Engineering,dc=example,dc=com 中的子条目不能将 ou 属性设置为 Engineering

重要

如果目录的结构发生变化,这些 ACI 可能会失败。

或者,您可以创建一个绑定规则,该规则与 bind 请求中的用户输入匹配,并带有一个存储在目标条目中的属性值。请参阅 根据值匹配定义访问权限

2.1.9. 定义 ACI 权限

权限规则定义与访问控制指令(ACI)关联的权限,以及是否允许或拒绝访问。

在 ACI 中,以下突出显示的部分是权限规则:

(target_rule) (version 3.0; acl "ACL_name"; permission_rule bind_rules;)
Copy to Clipboard Toggle word wrap

2.1.9.1. 权限规则的语法

权限规则的一般语法是:

permission (rights)
Copy to Clipboard Toggle word wrap
  • Permission: 设置访问控制指令(ACI)是否允许或拒绝权限。
  • rights :设置 ACI 允许或拒绝的权利。请参阅 权限规则中的用户权限

例 2.11. 定义权限

要启用存储在 ou=People,dc=example,dc=com 条目中的用户搜索并显示其自己的条目中的所有属性:

# *ldapmodify -D "cn=Directory Manager" -W -H ldap://server.example.com -x`

dn: ou=People,dc=example,dc=com
changetype: modify
add: aci
aci: (target = "ldap:///ou=People,dc=example,dc=com") (version 3.0;
 acl "Allow users to read and search attributes of own entry"; allow (search, read)
 (userdn = "ldap:///self");)
Copy to Clipboard Toggle word wrap

2.1.9.2. 权限规则中的用户权限

权限规则中的权限定义哪些操作被赋予或拒绝。在 ACI 中,您可以设置以下一个或多个权限:

Expand
表 2.1. 用户权限
rightDescription

读取

设置用户是否可以读取目录数据。此权限只适用于 LDAP 中的搜索操作。

write

通过添加、修改或删除属性来设置用户是否可以修改条目。此权限适用于 LDAP 中的 修改和 modrdn 操作。

add

设置用户是否可以创建条目。此权限只适用于 LDAP 中的 add 操作。

delete

设置用户可以删除条目。此权限只适用于 LDAP 中的 删除操作

search

设置用户可以搜索目录数据。要查看作为搜索结果的一部分返回的数据,请分配搜索和 读取权限此权限只适用于 LDAP 中的搜索操作。

compare

设置用户是否可以比较他们提供的数据与目录中存储的数据。通过 比较 权限,目录会返回成功或失败消息,以响应查询,但用户无法看到 entry 或 属性的值。此权限只适用于 LDAP 中的比较操作。

selfwrite

设置用户是否可以从组中添加或删除自己的可分辨名称(DN)。此右侧仅用于组管理。

proxy

设置指定的 DN 是否可以使用另一个条目的权限访问目标。代理 权限在 ACL 范围内授予,并且正确授予的用户或组都可以以任何 Directory Server 用户的身份运行命令。您不能将 代理 权限限制为特定用户。为了安全起见,请在目录的最目标级别设置使用代理的 ACI。

all

设置除 代理 外的所有权利。

2.1.9.3. LDAP 操作所需的权限

This section describes the rights you must grant to users depending on the type of LDAP operation you want to authorize them to perform.
Copy to Clipboard Toggle word wrap
  • 添加一个条目:

    • 对您要添加的条目授予 add 权限。
    • 为条目中的每个属性值授予 写入权限。默认情况下授予这个右边,但可以使用 targattrfilters 关键字来限制。
  • 删除条目:

    • 对您要删除的条目授予删除权限。
    • 为条目中的每个属性值授予 写入权限。默认情况下授予这个右边,但可以使用 targattrfilters 关键字来限制。
  • 修改条目中的属性:

    • 授予属性类型 的写入权限
    • 授予每个属性类型值 的写入权限。默认情况下授予这个右边,但可以使用 targattrfilters 关键字来限制。
  • 修改条目的 RDN:

    • 授予条目 的写入权限
    • 为新 RDN 中使用的属性类型授予 写入权限
    • 如果要授予删除旧 RDN 的权利,请授予旧 RDN 属性类型 的写入权限
    • 对新 RDN 中使用的属性类型值授予 写入权限。默认情况下授予这个右边,但可以使用 targattrfilters 关键字来限制。
  • 比较属性值:

    • 授予属性类型 比较 权限。
  • 搜索条目:

    • 对搜索过滤器中使用的每个属性类型授予搜索权限。
    • 授予条目中使用的属性类型 的读取权限

2.1.10. 定义 ACI 绑定规则

访问控制指令(ACI)中的绑定规则定义必须满足所需的绑定参数,以便目录服务器应用 ACI。例如,您可以根据以下内容设置绑定规则:

  • dns
  • 组成员资格或分配角色
  • 条目必须绑定的位置
  • 绑定过程中必须使用的身份验证类型
  • 绑定发生的时间或天数

在 ACI 中,以下突出显示的部分是绑定规则:

(target_rule) (version 3.0; acl "ACL_name"; permission_rule bind_rules;)
Copy to Clipboard Toggle word wrap

2.1.10.1. 绑定规则的语法

绑定规则的一般语法是:

keyword comparison_operator "expression"
Copy to Clipboard Toggle word wrap
  • 关键字 :设置 bind 操作的类型。
  • comparison_operator: Valid 值是 =!=,指明目标是否为表达式中指定的对象。如果关键字支持额外的比较运算符,则在对应的部分中提到了它。
  • 表达式 :设置表达式,且必须用引号括起来。表达式本身取决于您使用的关键字。

2.1.10.2. 定义基于用户的访问

userdn 关键字允许您根据一个或多个 DN 授予或拒绝访问,并使用以下语法:

userdn comparison_operator "ldap:///distinguished_name || ldap:///distinguished_name || ..."
Copy to Clipboard Toggle word wrap

将表达式中的 DN 设置为:

注意

不要在 LDAP URL 中指定主机名或端口号。URL 始终应用到本地服务器。

2.1.10.2.1. 使用带有 userdn 关键字的 DN

userdn 关键字设置为可分辨名称(DN),将 ACI 仅应用到匹配的条目。要匹配多个条目,请在 DN 中使用 * 通配符。

userdn 关键字与 DN 搭配使用必须匹配以下语法:

userdn comparison_operator ldap:///distinguished_name
Copy to Clipboard Toggle word wrap

例 2.12. 使用带有 userdn 关键字的 DN

要启用 uid=admin,ou=People,dc=example,dc=com 用户,读取 ou=People,dc=example,dc=com 条目中所有其他用户的 manager 属性:

# ldapmodify -D "cn=Directory Manager" -W -H ldap://server.example.com -x

dn: ou=People,dc=example,dc=com
changetype: modify
add: aci
aci: (targetattr="manager") (version 3.0; acl "Allow uid=admin reading manager attribute";
 allow (search, read) userdn = "ldap:///uid=admin,ou=People,dc=example,dc=com";)
Copy to Clipboard Toggle word wrap
2.1.10.2.2. 使用带有 LDAP 过滤器的 userdn 关键字

如果要动态允许或拒绝用户的权限,请使用带有 LDAP 过滤器的 userdn 关键字:

userdn comparison_operator "ldap:///distinguished_name??scope?(filter)"
Copy to Clipboard Toggle word wrap
注意

LDAP 过滤器支持 * 通配符。

例 2.13. 使用带有 LDAP 过滤器的 userdn 关键字

要启用将 department 属性设置为 Human Resources 的用户,以更新 ou=People,dc=example,dc=com 条目中的用户的 homePostalAddress 属性:

# ldapmodify -D "cn=Directory Manager" -W -H ldap://server.example.com -x

dn: ou=People,dc=example,dc=com
changetype: modify
add: aci
aci: (targetattr="homePostalAddress") (version 3.0;
 acl "Allow HR setting homePostalAddress"; allow (write)
 userdn = "ldap:///ou=People,dc=example,dc=com??sub?(department=Human Resources)";)
Copy to Clipboard Toggle word wrap
2.1.10.2.3. 授予匿名访问权限

在某些情况下,管理员希望配置目录中数据的匿名访问。匿名访问意味着可以通过提供以下内容绑定到目录:

  • 没有绑定 DN 和密码
  • 有效绑定 DN 和密码

要配置匿名访问,请在绑定 规则中使用 ldap:/// anyone 表达式和 userdn 关键字:

userdn comparison_operator "ldap:///anyone"
Copy to Clipboard Toggle word wrap

例 2.14. 授予匿名访问权限

要启用没有身份验证的任何人都可以读取和搜索 ou=People,dc=example,dc=com 条目中的 sn,givenName, 和 telephoneNumber 属性:

# ldapmodify -D "cn=Directory Manager" -W -H ldap://server.example.com` -x dn: ou=People,dc=example,dc=com__
changetype: modify
add: aci
aci: (targetattr="sn" || targetattr="givenName" || targetattr = "telephoneNumber")
 (version 3.0; acl "Anonymous read, search for names and phone numbers";
 allow (read, search) userdn = "ldap:///anyone")
Copy to Clipboard Toggle word wrap

在某些情况下,管理员希望向任何能够成功绑定到目录服务器的用户授予权限,但匿名绑定除外。要配置此功能,请在绑定规则中使用 ldap:///all 表达式和 userdn 关键字:

userdn comparison_operator "ldap:///all"
Copy to Clipboard Toggle word wrap

例 2.15. 授予对经过身份验证的用户的访问权限

要启用经过身份验证的用户,将自身作为成员添加到 ou=example,ou=groups,dc=example,dc=com 组中:

# ldapmodify -D "cn=Directory Manager" -W -H ldap://server.example.com -x

dn: ou=example,ou=Groups,dc=example,dc=com
changetype: modify
add: aci
aci: (targetattr="member") (version 3.0;
 acl "Allow users to add/remove themselves from example group";
 allow (selfwrite) userdn = "ldap:///all")
Copy to Clipboard Toggle word wrap
2.1.10.2.5. 允许用户访问自己的条目

要设置 ACI,允许或拒绝用户访问其自身条目,请使用带绑定规则中的 userdn 关键字的 ldap:///self 表达式:

userdn comparison_operator "ldap:///self"
Copy to Clipboard Toggle word wrap

例 2.16. 允许用户访问自己的条目

要启用 ou=People,dc=example,dc=com 条目中的用户,以更新自己的 userPassword 属性:

# ldapmodify -D "cn=Directory Manager" -W -H ldap://server.example.com -x

dn: ou=People,dc=example,dc=com
changetype: modify
add: aci
aci: (targetattr="userPassword") (version 3.0;
 acl "Allow users updating their password";
 allow (write) userdn = "ldap:///self")
Copy to Clipboard Toggle word wrap
2.1.10.2.6. 为用户的子条目设置访问权限

要指定用户只有在其绑定 DN 是目标条目的父项时才会被赋予或拒绝访问,请在绑定规则中使用带有 userdn 关键字的 self:///parent 表达式:

userdn comparison_operator "ldap:///parent"
Copy to Clipboard Toggle word wrap

例 2.17. 为用户的子条目设置访问权限

要启用 cn=user,ou=People,dc=example,dc=com 用户,以更新其自身子项目的 manager 属性,如 cn=example,cn=user,ou=People,dc=example,dc=com

# ldapmodify -D "cn=Directory Manager" -W -H ldap://server.example.com -x

dn: cn=user,ou=People,dc=example,dc=com
changetype: modify
add: aci
aci: (targetattr="manager") (version 3.0;
 acl "Allow cn=user to update manager attributes";
 allow (write) userdn = "ldap:///parent")
Copy to Clipboard Toggle word wrap

2.1.10.3. 定义基于组的访问

基于组的访问控制指令(ACI)允许您通过向组中添加或删除用户来管理访问权限。要配置基于组成员资格的 ACI,请使用 groupdn 关键字。如果用户是指定组或多个组的成员,ACI 会匹配。

使用 groupdn 关键字时,Directory 服务器根据以下属性验证组成员资格:

  • 成员
  • uniqueMember
  • memberURL
  • memberCertificateDescription

使用 groupdn 关键字绑定规则,语法如下:

groupdn comparison_operator "ldap:///distinguished_name || ldap:///distinguished_name || ..."
Copy to Clipboard Toggle word wrap

将表达式中的可分辨名称(DN)设置为:

如果您在一个绑定规则中设置了多个 DN,如果经过身份验证的用户是这些组的成员,则目录服务器会应用 ACI。要将用户设置为多个组的成员,请使用多个 groupdn 关键字,并使用布尔值和运算符组合它们。详情请参阅 使用布尔值 Operator 组合绑定规则

注意

不要在 LDAP URL 中指定主机名或端口号。URL 始终应用到本地服务器。

2.1.10.3.1. 使用带有 groupdn 关键字的 DN

要将 ACI 应用到组的成员,请将 groupdn 关键字设置为组的 DN。

groupdn 关键字设置为 DN 使用以下语法:

groupdn comparison_operator ldap:///distinguished_name
Copy to Clipboard Toggle word wrap

例 2.18. 使用带有 groupdn 关键字的 DN

要启用 cn=example,ou=Groups,dc=example,dc=com 组的成员搜索和读取 ou=People,dc=example,dc=com 中条目的 manager 属性:

# ldapmodify -D "cn=Directory Manager" -W -H ldap://server.example.com -x

dn: ou=People,dc=example,dc=com
changetype: modify
add: aci
aci: (targetattr="manager") (version 3.0;
 acl "Allow example group to read manager attribute";
 allow (search, read) groupdn = "ldap:///cn=example,ou=Groups,dc=example,dc=com";)
Copy to Clipboard Toggle word wrap

使用带有 groupdn 关键字的 LDAP 过滤器,您可以定义经过身份验证的用户必须至少是过滤器搜索返回的其中一个组的成员,以匹配 ACI。

带有 LDAP 过滤器的 groupdn 关键字使用以下语法:

groupdn comparison_operator "ldap:///distinguished_name??scope?(filter)"
Copy to Clipboard Toggle word wrap
注意

LDAP 过滤器支持 * 通配符。

例 2.19. 使用带有 LDAP 过滤器的 groupdn 关键字

要在 dc=example,dc=com 和 subtrees 中启用组的成员,其 manager 属性设为 example,更新 ou=People,dc=example,dc=com 中条目的 homePostalAddress

# ldapmodify -D "cn=Directory Manager" -W -H ldap://server.example.com -x

dn: ou=People,dc=example,dc=com
changetype: modify
add: aci
aci: (targetattr="homePostalAddress") (version 3.0;
 acl "Allow manager=example setting homePostalAddress"; allow (write)
 userdn = "ldap:///dc=example,dc=com??sub?(manager=example)";)
Copy to Clipboard Toggle word wrap

2.1.10.4. 根据值匹配定义访问

在绑定规则中使用 userattr 关键字,指定用于绑定到目录和目标条目的条目的哪个属性必须匹配。

userattr 关键字使用以下语法:

userattr comparison_operator "attribute_name#bind_type_or_attribute_value
Copy to Clipboard Toggle word wrap

如需了解更多详细信息,请参阅:

重要

默认情况下,Directory 服务器评估创建它们的条目的访问权限。但是,为了防止同一级别上的用户对象,在使用 userattr 关键字时,Directory 服务器不会向设置访问控制指令(ACI)的条目授予 添加权限。要配置此行为,请将 userattr 关键字与 parent 关键字结合使用,并在级别 0 上授予权限。

有关继承的详情,请参阅根据匹配值定义访问权限

2.1.10.4.1. 使用 USERDN 绑定类型

当绑定用户区分名称(DN)与属性中存储的 DN 匹配时,要应用 ACI,请使用 USERDN 绑定类型。

带有 USERDN 绑定类型的 userattr 关键字需要以下语法:

userattr comparison_operator "attribute_name#USERDN"
Copy to Clipboard Toggle word wrap

例 2.20. 使用 USERDN 绑定类型

要为管理器授予其自己员工的 telephoneNumber 属性的所有权限:

# ldapmodify -D "cn=Directory Manager" -W -H ldap://server.example.com -x

dn: ou=People,dc=example,dc=com
changetype: modify
add: aci
aci: (targetattr = "telephoneNumber")
 (version 3.0; acl "Manager: telephoneNumber";
 allow (all) userattr = "manager#USERDN";)
Copy to Clipboard Toggle word wrap

如果对 ou=People,dc=example,dc=com 中的条目执行操作的用户的 DN 与此条目的 manager 属性中存储的 DN 匹配,则之前的 ACI 会评估为 true。

2.1.10.4.2. 使用 GROUPDN 绑定类型

当绑定用户 DN 是属性中设置的组的成员时,要应用 ACI,请使用 GROUPDN 绑定类型。

带有 GROUPDN 绑定类型的 userattr 关键字需要以下语法:

userattr comparison_operator "attribute_name#GROUPDN"
Copy to Clipboard Toggle word wrap

例 2.21. 使用 GROUPDN 绑定类型

要授予用户删除他们在 ou=Social Committee,ou=Groups,dc=example,dc=com 条目下拥有的组条目的权限:

# ldapmodify -D "cn=Directory Manager" -W -H ldap://server.example.com -x

dn: ou=Social Committee,ou=Groups,dc=example,dc=com
changetype: modify
add: aci
aci: (target="ou=Social Committee,ou=Groups,dc=example,dc=com)
 (targattrfilters="del=objectClass:(objectClass=groupOfNames)")
 (version 3.0; acl "Delete Group";
 allow (delete) userattr = "owner#GROUPDN";)
Copy to Clipboard Toggle word wrap

如果执行操作的用户的 DN 是 owner 属性中指定的组的成员,则之前的 ACI 被评估为 true。

指定组可以是动态组,并且组的 DN 可以在数据库中的任何后缀下。但是,服务器对此类 ACI 的评估非常高。

如果您使用与目标条目相同的静态组,请使用以下表达式来提高性能:

userattr comparison_operator "ldap:///distinguished_name?attribute_name#GROUPDN"
Copy to Clipboard Toggle word wrap
2.1.10.4.3. 使用 ROLEDN 绑定类型

要在绑定用户属于属性中指定的角色时应用 ACI,请使用 ROLEDN 绑定类型。

带有 ROLEDN 绑定类型的 userattr 关键字需要以下语法:

userattr comparison_operator "attribute_name#ROLEDN"
Copy to Clipboard Toggle word wrap

例 2.22. 使用 ROLEDN 绑定类型

要启用带有 cn=Administrators,dc=example,dc=com 角色的用户搜索和读取 ou=People,dc=example,dc=com 中的条目的 manager 属性:

# ldapmodify -D "cn=Directory Manager" -W -H ldap://server.example.com -x

dn: ou=People,dc=example,dc=com
changetype: modify
add: aci
aci: (version 3.0; acl "Allow example role owners to read manager attribute";
 allow (search, read) userattr = manager#ROLEDN;)
Copy to Clipboard Toggle word wrap

指定的角色可以在数据库中的任何后缀下。如果您也使用过滤的角色,则这类 ACI 的评估会使用服务器上的大量资源。

如果您使用静态角色定义,且角色条目与目标条目的后缀相同,请使用以下表达式来提高性能:

2.1.10.4.4. 使用 SELFDN 绑定类型

SELFDN 绑定类型允许您在条目的单值属性中设置绑定用户的 DN 时授予权限。

带有 SELFDN 绑定类型的 userattr 关键字需要以下语法:

userattr comparison_operator "attribute_name#SELFDN"
Copy to Clipboard Toggle word wrap

例 2.23. 使用 SELFDN 绑定类型

要启用用户来添加 ipatokenuniqueid swig,cn=otp,dc=example,dc=com 条目,其在 ipatokenOwner 属性中设置绑定用户的 DN:

# ldapmodify -D "cn=Directory Manager" -W -H ldap://server.example.com -x

dn: ou=otp,dc=example,dc=com
changetype: modify
add: aci
aci: (target = "ldap:///ipatokenuniqueid=*,cn=otp,dc=example,dc=com")
 (targetfilter = "(objectClass=ipaToken)")(version 3.0;
 acl "token-add-delete"; allow (add) userattr = "ipatokenOwner#SELFDN";)
Copy to Clipboard Toggle word wrap
2.1.10.4.5. 使用 LDAPURL 绑定类型

要在绑定 DN 与目标条目的属性中指定的过滤器匹配时应用 ACL,请使用 LDAPURL 绑定类型。

带有 LDAPURL 绑定类型的 userattr 关键字需要以下语法:

userattr comparison_operator "attribute_name#LDAPURL"
Copy to Clipboard Toggle word wrap

例 2.24. 使用 LDAPURL 绑定类型

要为包含 aciurl 属性设置为 ldap:///ou=People,dc=example,dc=com??one? (uid=user*) 的用户对象授予读和搜索权限:

# ldapmodify -D "cn=Directory Manager" -W -H ldap://server.example.com -x
dn: ou=People,dc=example,dc=com
changetype: modify
add: aci
aci: (targetattr = "*")
 (version 3.0; acl "Allow read,search "; allow (read,search)
 (userattr = "aciurl#LDAPURL);)
Copy to Clipboard Toggle word wrap
2.1.10.4.6. 使用带有继承的 userattr 关键字

当您使用 userattr 关键字将用来与目标条目绑定的条目时,ACI 仅适用于指定的目标,而不是它下面的条目。在某些情况下,管理员希望在目标条目下扩展 ACI 的不同级别的应用程序。这可以通过使用 parent 关键字并指定应继承 ACI 的目标下的级别数量。

userattr 关键字与 parent 关键字搭配使用时,语法如下:

userattr comparison_operator "parent[inheritance_level].attribute_name#bind_type_or_attribute_value
Copy to Clipboard Toggle word wrap
  • inheritance_level: Comma 分隔列表,指示目标下多少级别继承 ACI。您可以在目标条目下包括 5 级(01234)。零(0)表示目标条目。
  • attribute_nameuserattrgroupattr 关键字目标的属性。
  • bind_type_or_attribute_value :设置属性值或绑定类型,如 USERDN

例如:

userattr = "parent[0,1].manager#USERDN"
Copy to Clipboard Toggle word wrap

如果绑定 DN 与目标条目的 manager 属性匹配,则此绑定规则评估为 true。当将绑定规则评估为 true 时授予的权限适用于目标条目,并立即应用到其下的所有条目。

例 2.25. 使用带有继承的 userattr 关键字

要让用户读取和搜索 cn=Profiles,dc=example,dc=com 条目,其中用户的 DN 在 owner 属性中设置,以及第一个包括 cn=mail,cn=Profiles,dc=example,dc=comcn=news,cn=Profiles,dc=example,dc=com 的子条目级别:

# ldapmodify -D "cn=Directory Manager" -W -H ldap://server.example.com` -x

dn: cn=Profiles,dc=example,dc=com
changetype: modify
add: aci
aci: (targetattr="*") (version 3.0; acl "Profile access",
 allow (read,search) userattr="parent[0,1].owner#USERDN" ;)
Copy to Clipboard Toggle word wrap

2.1.10.5. 定义来自特定 IP 地址或范围的访问

绑定规则中的 ip 关键字可让您从特定 IP 地址或 IP 地址范围授予或拒绝访问。

使用 ip 关键字绑定规则使用以下语法:

ip comparison_operator "IP_address_or_range"
Copy to Clipboard Toggle word wrap

例 2.26. 在绑定规则中使用 IPv4 地址范围

拒绝从 192.0.2.0/24 网络访问 dc=example,dc=com 条目:

# ldapmodify -D "cn=Directory Manager" -W -H ldap://server.example.com -x

dn: dc=example,dc=com
changetype: modify
add: aci
aci: (targetattr = "*") (version 3.0;acl "Deny 192.0.2.0/24"; deny (all)
 (userdn = "ldap:///anyone") and (ip != "192.0.2.");)
Copy to Clipboard Toggle word wrap

例 2.27. 在绑定规则中使用 IPv6 地址范围

拒绝从 2001:db8::/64 网络访问 dc=example,dc=com 条目:

# ldapmodify -D "cn=Directory Manager" -W -H ldap://server.example.com -x

dn: dc=example,dc=com
changetype: modify
add: aci
aci: (targetattr = "*") (version 3.0;acl "Deny 2001:db8::/64"; deny (all)
 (userdn = "ldap:///anyone") and (ip != "2001:db8::");)
Copy to Clipboard Toggle word wrap

2.1.10.6. 定义从特定主机或域的访问

绑定规则中的 dns 关键字可让您向特定主机或域授予或拒绝访问。

警告

如果目录服务器无法使用 DNS 将连接 IP 地址解析为其完全限定域名(FQDN),服务器不会使用这个客户端的 dns 绑定规则应用访问控制指令(ACI)。

如果无法使用 DNS 解析客户端 IP 地址,请使用 ip 关键字和 IP 地址。请参阅 定义来自特定 IP 地址或范围的访问

使用 dns 关键字绑定规则使用以下语法:

dns comparison_operator "host_name_or_domain_name"
Copy to Clipboard Toggle word wrap

例 2.28. 定义从特定主机的访问

拒绝从 client.example.com 主机访问 dc=example,dc=com 条目:

# ldapmodify -D "cn=Directory Manager" -W -H ldap://server.example.com -x

dn: dc=example,dc=com
changetype: modify
add: aci
aci: (targetattr = "*") (version 3.0;acl "Deny client.example.com"; deny (all)
 (userdn = "ldap:///anyone") and (dns != "client.example.com");)
Copy to Clipboard Toggle word wrap

例 2.29. 定义来自特定域的访问

拒绝从 example.com 域中的所有主机访问 dc=example,dc=com 条目:

# ldapmodify -D "cn=Directory Manager" -W -H ldap://server.example.com -x

dn: dc=example,dc=com
changetype: modify
add: aci
aci: (targetattr = "") (version 3.0;acl "Deny example.com"; deny (all) (userdn = "ldap:///anyone") and (dns != ".example.com");)
Copy to Clipboard Toggle word wrap

2.1.10.7. 在连接中需要一定级别的安全性

连接的安全性由其安全强度因子(SSF)决定,它设定了处理操作所需的最小关键强度。在绑定规则中使用 ssf 关键字,您可以设置连接必须使用一定级别的安全性。这可让您强制操作(如密码更改)通过加密连接来执行。

任何操作的 SSF 的值是 TLS 连接和 SASL 绑定之间的值更高的值。这意味着,如果服务器被配置为通过 TLS 运行,并且为 SASL/GSSAPI 配置复制协议,则操作的 SSF 都会更安全。

使用 ssf 关键字绑定规则,语法如下:

ssf comparison_operator key_strength
Copy to Clipboard Toggle word wrap

您可以使用以下比较运算符:

  • = (等于)
  • ! (不等于)
  • & lt; (无)
  • > (greater than)
  • 5-6 (无小于或等于)
  • >= (同意或等于)

如果将 key_strength 参数设置为 0, 则 LDAP 操作不需要安全操作。

例 2.30. 在连接中需要一定级别的安全性

要在 dc=example,dc=com 条目中配置该用户,只能在 SSF 为 128 或更高版本时更新其 userPassword 属性:

# ldapmodify -D "cn=Directory Manager" -W -H ldap://server.example.com -x

dn: dc=example,dc=com
changetype: modify
add: aci
aci: (targetattr = "userPassword") (version 3.0;
 acl "Allow users updating own userPassword";
 allow (write) (userdn = "ldap:///self") and (ssf >= "128");)
Copy to Clipboard Toggle word wrap

2.1.10.8. 在周的一天定义访问

绑定规则中的 dayofweek 关键字可让您根据星期几来授予或拒绝访问。

注意

目录服务器使用服务器上的时间评估访问控制指令(ACI),而不是客户端上的时间。

使用 dayofweek 关键字绑定规则,语法如下:

dayofweek comparison_operator "comma-separated_list_of_days"
Copy to Clipboard Toggle word wrap

例 2.31. 在周的指定天授予访问权限

要拒绝访问 uid=user,ou=People,dc=example,dc=com 用户条目,以绑定到 Saturdays 和 Sundays 上的服务器:

# ldapmodify -D "cn=Directory Manager" -W -H ldap://server.example.com -x

dn: ou=People,dc=example,dc=com
changetype: modify
add: aci
aci: (version 3.0; acl "Deny access on Saturdays and Sundays";
 deny (all)
 (userdn = "ldap:///uid=user,ou=People,dc=example,dc=com") and
 (dayofweek = "Sun,Sat");)
Copy to Clipboard Toggle word wrap

2.1.10.9. 在一天的特定时间定义访问

绑定规则中的 timeofday 关键字可让您根据当天的时间授予或拒绝访问。

注意

目录服务器使用服务器上的时间评估访问控制指令(ACI),而不是客户端上的时间。

使用 timeofday 关键字绑定规则,语法如下:

timeofday comparison_operator "time"
Copy to Clipboard Toggle word wrap

您可以使用以下比较运算符:

  • = (等于)
  • ! (不等于)
  • & lt; (无)
  • > (greater than)
  • 5-6 (无小于或等于)
  • >= (同意或等于)
重要

timeofday 关键字要求您以 24 小时格式指定时间。

例 2.32. 在一天的特定时间定义访问

要拒绝访问 uid=user,ou=People,dc=example,dc=com 用户条目,来绑定到 6pm 到 0am 之间的服务器:

# ldapmodify -D "cn=Directory Manager" -W -H ldap://server.example.com -x

dn: ou=People,dc=example,dc=com
changetype: modify
add: aci
 aci: (version 3.0; acl "Deny access between 6pm and 0am";
 deny (all)
 (userdn = "ldap:///uid=user,ou=People,dc=example,dc=com") and
 (timeofday >= "1800" and timeofday < "2400");)
Copy to Clipboard Toggle word wrap

2.1.10.10. 根据身份验证方法定义访问权限

绑定规则中的 authmethod 关键字设置在连接到服务器时客户端必须使用什么身份验证方法应用访问控制指令(ACI)。

使用 authmethod 关键字绑定规则使用以下语法:

authmethod comparison_operator "authentication_method"
Copy to Clipboard Toggle word wrap

您可以设置以下验证方法:

  • none: 不需要身份验证并代表匿名访问。这是默认值。
  • 简单 :客户端必须提供要绑定到目录的用户名和密码。
  • SSL :客户端必须使用数据库、智能卡或其他设备的 TLS 证书绑定到目录。
  • SASL :客户端必须通过简单身份验证和安全层(SASL)连接绑定到目录。当您在绑定规则中使用此验证方法时,还要指定 SASL 机制,如 EXTERNAL

例 2.33. 仅为使用 EXTERNAL SASL 身份验证方法的连接启用访问

如果连接没有使用基于证书的身份验证方法或 SASL,则拒绝对服务器的访问:

# ldapmodify -D "cn=Directory Manager" -W -H ldap://server.example.com` -x

dn: ou=People,dc=example,dc=com
changetype: modify
add: aci
aci: (version 3.0; acl "Deny all access without certificate"; deny (all)
 (authmethod = "none" or authmethod = "simple");)
Copy to Clipboard Toggle word wrap

2.1.10.11. 根据角色定义访问权限

绑定规则中的 roledn 关键字可让您为具有一个或多个角色集的用户授予或拒绝访问。

注意

红帽建议使用组而不是角色。

使用 roledn 关键字绑定规则使用以下语法:

roledn comparison_operator "ldap:///distinguished_name || ldap:///distinguished_name || ..."
Copy to Clipboard Toggle word wrap

如果可分辨名称(DN)包含逗号,请使用反斜杠转义逗号。

例 2.34. 根据角色定义访问权限

要启用具有 nsRole 属性中设置的 cn=Human Resources,ou=People,dc=example,dc=com 角色的用户,搜索并读取 ou=People,dc=example,dc=com 中条目的 manager 属性:

# ldapmodify -D "cn=Directory Manager" -W -H ldap://server.example.com -x

dn: ou=People,dc=example,dc=com
changetype: modify
add: aci
aci: (targetattr="manager") (version 3.0;
 acl "Allow manager role to update manager attribute";
 allow (search, read) roledn = "ldap:///cn=Human Resources,ou=People,dc=example,dc=com";)
Copy to Clipboard Toggle word wrap

2.1.10.12. 使用布尔值运算符组合绑定规则

在创建复杂的绑定规则时,可以使用 ANDORNOT 布尔值运算符组合多个关键字。

绑定规则与布尔值运算符具有以下语法:

bind_rule_1 boolean_operator bind_rule_2...
Copy to Clipboard Toggle word wrap

例 2.35. 使用布尔值运算符组合绑定规则

要配置属于 cn=Administrators,ou=Groups,dc=example,comcn=Operators,ou=Groups,dc=example,com] 组的用户,可以 'read , search, add ,add,update, 和 delete entries in ou=People,dc=example,dc=com

# ldapmodify -D "cn=Directory Manager" -W -H ldap://server.example.com -x

dn: ou=People,dc=example,dc=com
changetype: modify
add: aci
aci: (target="ldap:///ou=People,dc=example,dc=com") (version 3.0;
 acl "Allow members of administrators and operators group to manage users";
 allow (read, search, add, write, delete)
 groupdn = "ldap:///cn=Administrators,ou=Groups,dc=example,com" AND
 groupdn = "ldap:///cn=Operators,ou=Groups,dc=example,com";)
Copy to Clipboard Toggle word wrap

目录服务器如何评估布尔值运算符

目录服务器使用以下规则评估布尔值运算符:

  • 所有表达式从左到右。

    在以下示例中,首先评估 bind_rule_1

    (bind_rule_1) OR (bind_rule_2)
    Copy to Clipboard Toggle word wrap
  • 从内部到最外的父表达式,首先是.

    在以下示例中,首先评估 bind_rule_2bind_rule_3 秒:

    (bind_rule_1) OR ((bind_rule_2) AND (bind_rule_3))
    Copy to Clipboard Toggle word wrap
  • 不在 ANDOR 运算符之前。

    在以下示例中,首先评估 bind_rule_2

    (bind_rule_1) AND NOT (bind_rule_2)
    Copy to Clipboard Toggle word wrap

    ANDOR 运算符没有优先级顺序。

返回顶部
Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

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

让开源更具包容性

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

關於紅帽

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

Theme

© 2025 Red Hat