2.3. 使用宏访问控制指令


宏访问控制指令(ACI)可让您自动定制对 LDAP 条目区分名称(DN)或其部分的访问,并减少 ACI 的数量。

2.3.1. 宏访问控制说明示例

下图显示带有后缀 dc=hostedCompany1,dc=example,dc=comdc=hostedCompany2,dc=example,dc=com 的目录树,其重复子域模式。每个子域都有相同的 ou=groups,ou=people 条目的结构。目录树使用宏访问控制指令(ACI)来减少 ACI 的总数。

在目录树中应用的 ACI 也具有重复的模式。例如,以下 ACI 位于 dc=hostedCompany1,dc=example,dc=com 节点上,并将 DomainAdmins 组的读和搜索权限授予该树中的任何条目:

aci: (targetattr="*")(targetfilter=(objectClass=nsManagedDomain))
     (version 3.0; acl "Domain access"; allow (read,search)
     groupdn="ldap:///cn=DomainAdmins,ou=Groups,dc=hostedCompany1,dc=example,dc=com";)
Copy to Clipboard Toggle word wrap

图 2.1. 宏 ACI 的目录树示例

以下 ACI 在 groupdn 关键字中显示 DN 的不同部分:

  • dc=hostedCompany1,dc=example,dc=com 节点包含以下 ACI:
aci: (targetattr="*")(targetfilter=(objectClass=nsManagedDomain))
    (version 3.0; acl "Domain access"; allow (read,search)
    groupdn="ldap:///cn=DomainAdmins,ou=Groups,dc=hostedCompany1,dc=example,dc=com";)
Copy to Clipboard Toggle word wrap
  • dc=subdomain1,dc=hostedCompany1,dc=example,dc=com 节点包含以下 ACI:
aci: (targetattr="*")(targetfilter=(objectClass=nsManagedDomain))
     (version 3.0; acl "Domain access"; allow (read,search)
     groupdn="ldap:///cn=DomainAdmins,ou=Groups,dc=subdomain1,dc=hostedCompany1,dc=example,dc=com";)
Copy to Clipboard Toggle word wrap
  • dc=hostedCompany2,dc=example,dc=com 节点包含以下 ACI:
aci: (targetattr="*")(targetfilter=(objectClass=nsManagedDomain))
     (version 3.0; acl "Domain access"; allow (read,search)
     groupdn="ldap:///cn=DomainAdmins,ou=Groups,dc=hostedCompany2,dc=example,dc=com";)
Copy to Clipboard Toggle word wrap
  • dc=subdomain1,dc=hostedCompany2,dc=example,dc=com 节点包含以下 ACI:
aci: (targetattr="*")(targetfilter=(objectClass=nsManagedDomain))
     (version 3.0; acl "Domain access"; allow (read,search)
     groupdn="ldap:///cn=DomainAdmins,ou=Groups,dc=subdomain1,dc=hostedCompany2,dc=example,dc=com";)
Copy to Clipboard Toggle word wrap

使用宏替换多个 ACI 用于重复模式。例如,要将上面的 ACI 减为一个,请使用以下宏:

aci: (target="ldap:///ou=Groups,($dn),dc=example,dc=com")
     (targetattr="*")(targetfilter=(objectClass=nsManagedDomain))
     (version 3.0; acl "Domain access"; allow (read,search)
     groupdn="ldap:///cn=DomainAdmins,ou=Groups,[$dn],dc=example,dc=com";)
Copy to Clipboard Toggle word wrap

2.3.2. 宏访问控制指令语法

宏访问控制指令(ACI)包含以下类型的表达式来替换 DN 或 DN 的一部分:

  • ($DN),
  • [$DN],
  • ($attr.attrName),其中 attrName 代表属性,它是目标条目的一部分。

ACI 关键字提供绑定凭证,它们是 ACI 主题。主题决定 ACI 的适用位置。

Expand
表 2.2. ACI 关键字的宏
MacroACI 关键字描述

($dn)

target, targetfilter, userdn, roledn, groupdn, userattr

主题中的匹配和直接替换。它将与 targettargetfilter 匹配,并将匹配值替换为 userdngroupdnuserattr

[$dn]

targetfilter, userdn, roledn, groupdn, userattr

替换主题子树中的多个 RDN。

($attr.attrName)

userDN, roledn, groupdn, userattr

attributeName 属性值从目标条目替换到主题中。

请注意,如果使用任何宏,则必须定义包含 ($dn) 宏的目标。您可以组合 ($dn)($attr.attrName) 宏。

2.3.3. [$dn] 宏示例

[$dn] 宏多次检查目标源的 DN。此宏丢弃每个迭代的最新 RDN 组件,直到找到匹配项为止。

例如,您在 cn=all,ou=groups,dc=subdomain1,dc=hostedCompany1,dc=example,dc=com 子树中带有目标的 LDAP 请求,以及以下 ACI:

aci: (target="ldap:///ou=groups,($dn),dc=example,dc=com")
     (targetattr = "*") (version 3.0; acl "Domain access"; allow (read,search)
     groupdn="ldap:///cn=domainAdmins,ou=groups,[$dn],dc=example,dc=com";)
Copy to Clipboard Toggle word wrap

宏扩展如下:

  1. 目标中的 ($dn)dc=subdomain1,dc=hostedCompany1 匹配。
  2. 主题中的 [$dn] 替换为 dc=subdomain1,dc=hostedCompany1

    结果为 groupdn="ldap:///cn=domainAdmins,ou=Groups,dc=subdomain1,dc=hostedCompany1,dc=example,dc=com"。如果绑定 DN 是该组的成员,则匹配过程将停止,并且评估 ACI。如果结果不匹配,则进程将继续并丢弃最左边的部分。

  3. 主题中的 [$dn] 是 dc=hostedCompany1

    结果为 groupdn="ldap:///cn=domainAdmins,ou=Groups,dc=hostedCompany1,dc=example,dc=com"。如果绑定 DN 不是该组的成员,则不会评估 ACI。如果是一个成员,则会评估 ACI。

[$dn] 宏授予对目录树中所有子域的访问权限。它可用于表达域之间的分层关系。例如,请考虑以下 ACI:

aci: (target="ldap:///ou=*, ($dn),dc=example,dc=com")
     (targetattr="*")(targetfilter=(objectClass=nsManagedDomain))
     (version 3.0; acl "Domain access"; allow (read,search)
     groupdn="ldap:///cn=domainAdmins,ou=groups,[$dn],dc=example,dc=com";)
Copy to Clipboard Toggle word wrap

此 ACI 向 dc=hostedCompany1 下的所有子域授予 cn=domainAdmins,ou=groups,dc=hostedCompany1,dc=example,dc=com 的访问权限。属于该组成员的管理员可以访问 ou=body,dc=subdomain1.1,dc=subdomain1 等子树。但是 cn=domainAdmins,ou=groups,dc=subdomain1.1 的成员无法访问 ou=people,dc=hostedCompany1ou=people,dc=subdomain1,dc=hostedCompany1 节点。

2.3.4. ($dn)宏示例

($dn) 宏将替换值与 LDAP 请求中的条目进行比较。例如,LDAP 请求以条目为目标:

cn=all,ou=groups,dc=subdomain1,dc=hostedCompany1,dc=example,dc=com
Copy to Clipboard Toggle word wrap

ACI 定义以下目标:

(target="ldap:///ou=groups,($dn),dc=example,dc=com")
Copy to Clipboard Toggle word wrap

($dn) 宏与本例中的 dc=subdomain1,dc=hostedCompany1 匹配。

当 ACI 主题使用 ($dn) 宏时,与目标匹配的子字符串会扩展主题:

aci: (target="ldap:///ou=*,($dn),dc=example,dc=com")
     (targetattr = "*") (version 3.0; acl "Domain access"; allow (read,search)
     groupdn="ldap:///cn=domainAdmins,ou=groups,($dn),dc=example,dc=com";)
Copy to Clipboard Toggle word wrap

ACI 扩展如下:

aci: (target="ldap:///ou=groups,dc=subdomain1,dc=hostedCompany1,
     dc=example,dc=com") (targetattr = "*") (version 3.0; acl "Domain
     access"; allow (read,search) groupdn="ldap:///cn=domainAdmins,ou=groups,
     dc=subdomain1,dc=hostedCompany1,dc=example,dc=com";)
Copy to Clipboard Toggle word wrap

宏扩展后,红帽目录服务器会根据正常过程评估 ACI,以确定是否授予访问权限。

2.3.5. ($attr.attrName)宏示例

您始终使用 ($attr.attrName) 宏作为 DN 的一部分。例如,定义以下 roledn

roledn = "ldap:///cn=DomainAdmins,($attr.ou),dc=HostedCompany1,dc=example,dc=com"
Copy to Clipboard Toggle word wrap

假设服务器接收以以下条目为目标的 LDAP 操作:

dn: cn=Jane Doe,ou=People,dc=HostedCompany1,dc=example,dc=com
cn: Jane Doe
sn: Doe
ou: Engineering...
Copy to Clipboard Toggle word wrap

要评估 ACI 的 roledn 部分,服务器会在目标条目中查看 ou 属性,并使用此属性的值来扩展宏。roledn 扩展如下:

roledn = "ldap:///cn=DomainAdmins,ou=Engineering,dc=HostedCompany1,dc=example,dc=com"
Copy to Clipboard Toggle word wrap

Red Hat Directory Server 根据正常的 ACI 评估算法评估 ACI。

如果属性具有多个值,则 RHDS 使用每个值来扩展宏,并使用第一次成功与扩展宏匹配的值。例如:

dn: cn=Jane Doe,ou=People,dc=HostedCompany1,dc=example,dc=com
cn: Jane Doe
sn: Doe
ou: Engineering
ou: People...
Copy to Clipboard Toggle word wrap

当红帽目录服务器评估 ACI 时,它会在以下扩展表达式上执行逻辑 OR

roledn = "ldap:///cn=DomainAdmins,ou=Engineering,dc=HostedCompany1,dc=example,dc=com"

roledn = "ldap:///cn=DomainAdmins,ou=People,dc=HostedCompany1,dc=example,dc=com"
Copy to Clipboard Toggle word wrap
返回顶部
Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

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

让开源更具包容性

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

關於紅帽

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

Theme

© 2025 Red Hat