12.8. 目标规则的高级用法

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

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

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

例 12.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");)

出于安全考虑,前面的示例会有一些限制。uid=test,ou=People,dc=example,dc=com 用户:

  • 可以创建必须包含 topgroupOfUniqueNames 对象类的对象。
  • 无法添加额外的对象类,如 account。例如,如果使用 Directory Server 帐户进行本地身份验证,这会防止为 root 用户创建新用户,如 0。

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

12.8.2. 以条目和属性为目标

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

例 12.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");)

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

如果您在两个目标规则中组合了 targetattrtargetfilter 关键字,您可以针对与过滤器匹配的条目的特定属性。

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

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

# 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");)

12.8.4. 以单一目录条目为目标

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

例 12.10. 以单一目录条目为目标

启用 uid=user,ou=People,dc=example,dc=com 用户读取和搜索 ou=Engineering,dc=example,dc=com 条目中的 ou=Engineering,dc=example,dc=com 条目:

# 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");)

要启用上一示例以仅针对 ou=Engineering,dc=example,dc=com 条目,在 ou=Engineering,dc=example,dc=com 中没有将 ou =Engineering,dc=com 的子条目设置为 Engineering

重要

如果您的目录结构改变,这些 ACI 可能会失败。

另外,您可以创建一个与绑定请求中的用户输入匹配的绑定规则,以及一个存储在目标条目中的属性值。请参阅 根据与 匹配的值来定义访问权限