12.7. 定义 ACI 目标
访问控制指令(ACI)中的目标规则定义了 Directory 服务器应用 ACI 条目。如果没有设置目标,则 ACI 会应用到包含 aci 属性和以下条目的条目。
在 ACI 中,以下突出显示的部分是目标规则:
(target_rule)(version 3.0; acl "ACL_name"; permission_rule bind_rules;)
(target_rule)(version 3.0; acl "ACL_name"; permission_rule bind_rules;)
对于复杂的 ACI,Directory 服务器支持使用 ACI 中具有不同关键字的多个目标规则:
(target_rule_1)(target_rule_2)(...)(version 3.0; acl "ACL_name"; permission_rule bind_rules;)
(target_rule_1)(target_rule_2)(...)(version 3.0; acl "ACL_name"; permission_rule bind_rules;)
如果您指定多个目标规则,则顺序不相关。请注意,您只能在 ACI 中一次使用以下关键字:
-
目标 -
targetattr -
targetattrfilters -
targetfilter -
target_from -
target_to
12.7.1. 目标规则的语法 复制链接链接已复制到粘贴板!
目标规则的一般语法是:
(keyword comparison_operator "expression")
(keyword comparison_operator "expression")
-
关键字:设置目标的类型。 comparison_operator: Valid 值是=和!=,并指明目标是否为表达式中指定的对象。警告出于安全考虑,红帽建议不要使用
!=运算符,因为它允许在所有其他条目或属性上进行指定操作。例如:(targetattr != "userPassword");(version 3.0; acl "example"); allow (write) ... );
(targetattr != "userPassword");(version 3.0; acl "example"); allow (write) ... );Copy to Clipboard Copied! Toggle word wrap Toggle overflow 前面的示例允许用户设置、更新或删除任何属性,但
userPassword属性除您设置 ACI 的 Distinguished Name (DN)下。然而,这也允许用户添加额外的aci属性,以允许写入此属性的写入访问权限。-
表达式:设置目标,且必须通过引号来周围。表达式本身取决于您使用的关键字。
12.7.2. 以目录条目为目标 复制链接链接已复制到粘贴板!
要根据可辨识的名称(DN)和下面的条目控制访问权限,请在访问控制指令(ACI)中使用 target 关键字。使用 target 关键字的目标规则将 DN 作为表达式进行:
(target comparison_operator "ldap:///distinguished_name")
(target comparison_operator "ldap:///distinguished_name")
您必须在 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 条目中的用户来搜索并显示其自己条目中的所有属性:
使用带有 target 关键字的通配符
您可以使用 * 通配符字符目标多个条目。
以下目标规则示例与 ou=People,dc=example,dc=com 中的所有条目匹配:它的 uid 属性设为以字母 a 开头的值:
(target = "ldap:///uid=a*,ou=People,dc=example,dc=com")
(target = "ldap:///uid=a*,ou=People,dc=example,dc=com")
根据通配符的位置,该规则不仅适用于属性值,也应用于完整的 DN。因此,您可以使用通配符作为 DN 的部分内容替代。
例 12.2. 使用通配符以目录条目为目标
以下规则以 dc=example,dc=com 树中的所有条目为目标,其具有匹配的 uid 属性,而不仅存储于 dc=example,dc=com 条目本身的条目:
(target = "ldap:///uid=user_name*,dc=example,dc=com")
(target = "ldap:///uid=user_name*,dc=example,dc=com")
前面的目标规则匹配多个条目,例如:
-
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 有用,例如 add 或 delete。
要在使用 targetattr 关键字的目标规则中分隔多个属性,请使用 || :
(targetattr comparison_operator "attribute_1 || attribute_2 || ...")
(targetattr comparison_operator "attribute_1 || attribute_2 || ...")
表达式中设置的属性必须在 schema 中定义。
表达式中指定的属性适用于您创建 ACI 以及其它目标规则的所有条目的条目。
例 12.3. 使用 targetattr 关键字
要启用存储在 dc=example,dc=com 中的用户,且所有子项都试图更新其自己条目中的 userPassword 属性,请输入:
使用带有 targetattr 关键字的通配符
使用 * 通配符字符,例如,针对所有属性:
(targetattr = "*")
(targetattr = "*")
为安全起见,请不要将通配符与 targetattr 搭配使用,因为它允许访问所有属性,包括操作属性。例如,如果用户可以添加或修改所有属性,用户可能会创建额外的 ACI 并增加自己的权限。
12.7.4. 使用 LDAP 过滤器目标条目和属性 复制链接链接已复制到粘贴板!
要针对一组与特定条件匹配的条目为目标,请使用带 LDAP 过滤器的 target filter 关键字:
(targetfilter comparison_operator "LDAP_filter")
(targetfilter comparison_operator "LDAP_filter")
过滤器表达式是一个标准 LDAP 搜索过滤器。
例 12.4. 使用 targetfilter 关键字
要为 cn=Human Resources,dc=example,dc.com 组的成员授予权限,修改该部门属性设置为 Engineering 或 Sales 的所有条目:
targetfilter 关键字以整个条目为目标。如果您将其与 targetattr 关键字结合,则访问控制指令(ACI)仅适用于目标条目的属性子集。请参阅目标与过滤器匹配的条目的特定属性。
使用 LDAP 过滤器在目标在目录中分布的条目和属性时很有用。但是,有时结果无法预测,因为过滤器不会直接命名您要管理访问权限的对象。过滤 ACI 的目标条目集合可能会在添加或删除属性时改变。因此,如果您在 ACI 中使用 LDAP 过滤器,使用同一过滤器(例如在 ldapsearch 操作中)验证它们是否以正确的条目和属性为目标。
使用 targetfilter 关键字的通配符
targetfilter 关键字支持通配符与标准 LDAP 过滤器类似。例如,要针对其值以 adm 开头的所有 uid 属性为目标,请使用:
(targetfilter = "(uid=adm*) ...)
(targetfilter = "(uid=adm*) ...)
12.7.5. 使用 LDAP 过滤器目标属性值 复制链接链接已复制到粘贴板!
您可以使用访问控制来针对属性的具体值。这意味着,如果该属性的值满足在访问控制指令(ACI)中定义的条件,您可以对属性授予或拒绝权限。根据属性值授予或拒绝访问的 ACI 称为基于值的 ACI。这只适用于 ADD 和 DEL 操作。您无法根据特定值限制搜索权利。
要创建基于值的 ACI,请使用以下语法使用 targattrfilters 关键字:
对于一个带有一个属性和过滤组合的操作:
(targattrfilters="operation=attribute:filter")
(targattrfilters="operation=attribute:filter")Copy to Clipboard Copied! Toggle word wrap Toggle overflow 对于一个带有多个属性和过滤器组合的操作:
(targattrfilters="operation=attribute_1:filter_1 && attribute_2:filter_2 ... && attribute_m:filter_m")
(targattrfilters="operation=attribute_1:filter_1 && attribute_2:filter_2 ... && attribute_m:filter_m")Copy to Clipboard Copied! Toggle word wrap Toggle overflow 对于两个操作,每个都有多个属性和过滤器组合:
(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 ")
(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 Copied! Toggle word wrap Toggle overflow
在前面的语法示例中,您可以设置 要添加 或 del 的操作。属性:filter 组合设置过滤器,并将过滤器应用到的属性。
下面描述了如何过滤匹配:
- 在创建条目和过滤器应用到新条目中的属性时,该属性的每个实例都必须与过滤器匹配。
- 当删除条目和过滤器应用到条目中的属性时,该属性的每个实例也必须与过滤器匹配。
-
当修改条目和操作添加一个属性时,适用于该属性的
add过滤器必须匹配。 -
如果操作删除了属性,则适用于该属性的
del过滤器必须匹配。如果条目中已存在属性的不同值被替换,则add和del过滤器都必须匹配。
例 12.5. 使用 targattrfilters 关键字
要创建 ACI,让用户可以在自己的条目中添加任何角色,但 Admin 角色除外,并添加 电话 属性,只要值以 123 前缀开头,请输入:
12.7.6. 目标源和目标 DN 复制链接链接已复制到粘贴板!
在某些情况下,管理员希望允许用户移动目录条目。在访问控制指令(ACI)中使用 target_from 和 target_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,输入:
ACI 只适用于定义的子树。在上例中,ACI 仅应用到 dc=example,dc=com 子树。
如果没有设置 target_from 或 target_to 关键字,则 ACI 与任何源或目的地匹配。