12.7. 定义 ACI 目标


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

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

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

对于复杂的 ACI,Directory 服务器支持使用 ACI 中具有不同关键字的多个目标规则:

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

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

  • 目标
  • targetattr
  • targetattrfilters
  • targetfilter
  • target_from
  • target_to

12.7.1. 目标规则的语法

目标规则的一般语法是:

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

    警告

    出于安全考虑,红帽建议不要使用 != 运算符,因为它允许在所有其他条目或属性上进行指定操作。例如:

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

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

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

12.7.2. 以目录条目为目标

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

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

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

例 12.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 属性设为以字母 a 开头的值:

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

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

例 12.2. 使用通配符以目录条目为目标

以下规则以 dc=example,dc=com 树中的所有条目为目标,其具有匹配的 uid 属性,而不仅存储于 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=*.com")

12.7.3. 目标属性

要将访问控制指令(ACI)中的访问限制到特定属性,请使用 targetattr 关键字。例如,这个关键字定义了:

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

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

重要

读取和 搜索 操作中,默认目标 no 属性。没有 targetattr 关键字的 ACI 只对带有正确影响一个完整条目的 ACI 有用,例如 adddelete

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

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

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

表达式中指定的属性适用于您创建 ACI 以及其它目标规则的所有条目的条目。

例 12.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 并增加自己的权限。

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

要针对一组与特定条件匹配的条目为目标,请使用带 LDAP 过滤器的 target filter 关键字:

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

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

例 12.4. 使用 targetfilter 关键字

要为 cn=Human Resources,dc=example,dc.com 组的成员授予权限,修改该部门属性设置为 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

12.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

在前面的语法示例中,您可以设置 要添加del 的操作。属性:filter 组合设置过滤器,并将过滤器应用到的属性。

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

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

例 12.5. 使用 targattrfilters 关键字

要创建 ACI,让用户可以在自己的条目中添加任何角色,但 Admin 角色除外,并添加 电话 属性,只要值以 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

12.7.6. 目标源和目标 DN

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

  • 要从 ACI 中设置的不同源移动条目。
  • 将条目移到 ACI 中设置的不同目的地。
  • 要从来源区分名称(DN)中删除现有条目。
  • 将新条目添加到目标 DN 中:

例 12.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 与任何源或目的地匹配。

返回顶部
Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

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

让开源更具包容性

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

關於紅帽

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

Theme

© 2025 Red Hat