12.10. 定义 ACI 绑定规则

访问控制指令(ACI)中的绑定规则定义所需的绑定参数,该参数必须符合该参数,以便 Directory 服务器应用 ACI。例如,您可以基于以下方法设置绑定规则:

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

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

(target_rule) (version 3.0; acl "ACL_name"; permission_rule bind_rules;)

12.10.1. 绑定规则的语法

绑定规则的一般语法是:

keyword comparison_operator "expression"
  • 关键字 :设置 bind 操作的类型。
  • comparison_operator: Valid 值是 =!=,并指明目标是否为表达式中指定的对象。如果关键字支持其他比较运算符,则会在相应的部分中介绍它。
  • 表达式 :设置表达式,必须通过引号括起。表达式本身取决于您使用的关键字。

12.10.2. 定义基于用户的访问权限

userdn 关键字可让您基于一个或多个 DN 授予或拒绝访问,并使用以下语法:

userdn comparison_operator "ldap:///distinguished_name || ldap:///distinguished_name || ..."

将表达式中的 DN 设置为:

注意

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

使用 userdn 关键字的 DN

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

在 DN 中使用 userdn 关键字必须使用以下语法:

userdn comparison_operator ldap:///distinguished_name

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

在 LDAP 过滤器中使用 userdn 关键字

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

userdn comparison_operator "ldap:///distinguished_name??scope?(filter)"
注意

LDAP 过滤器支持 * 通配符。

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

授予匿名访问

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

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

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

userdn comparison_operator "ldap:///anyone"

例 12.14. 授予匿名访问

启用没有身份验证的任何人读取和搜索 sngivenName电话Number 属性(在 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="sn" || targetattr="givenName" || targetattr = "telephoneNumber")
 (version 3.0; acl "Anonymous read, search for names and phone numbers";
 allow (read, search) userdn = "ldap:///anyone")

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

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

userdn comparison_operator "ldap:///all"

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

允许用户访问自己的条目

要设置允许或拒绝对他们自己的条目的访问的 ACI,请使用 bind 规则中的 userdn 关键字的 ldap:///self 表达式:

userdn comparison_operator "ldap:///self"

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

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

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

userdn comparison_operator "ldap:///parent"

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

12.10.3. 定义基于组的访问

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

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

  • 成员
  • uniqueMember
  • memberURL
  • memberCertificateDescription

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

groupdn comparison_operator "ldap:///distinguished_name || ldap:///distinguished_name || ..."

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

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

注意

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

使用 groupdn 关键字的 DN

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

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

groupdn comparison_operator ldap:///distinguished_name

例 12.18. 使用带组关键字的 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";)

将 groupdn 关键字用于 LDAP 过滤器

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

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

groupdn comparison_operator "ldap:///distinguished_name??scope?(filter)"
注意

LDAP 过滤器支持 * 通配符。

例 12.19. 将 groupdn 关键字用于 LDAP 过滤器

要启用 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)";)

12.10.4. 根据值匹配定义访问权限

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

userattr 关键字使用以下语法:

userattr comparison_operator "attribute_name#bind_type_or_attribute_value

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

重要

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

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

使用 USERDN 绑定类型

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

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

userattr comparison_operator "attribute_name#USERDN"

例 12.20. 使用 USERDN 绑定类型

为经理授予自己同事 的电话 属性所有权限:

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

如果该条目的 DN 在 ou=People,dc=example,dc=com 中的条目上执行操作,则上一 ACI 的 DN 与该条目的 manager 属性中存储的 DN 匹配。

使用 GROUPDN 绑定类型

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

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

userattr comparison_operator "attribute_name#GROUPDN"

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

如果执行该操作的 DN 是 owner 属性中指定的组的成员,则上一 ACI 将评估为 true。

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

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

userattr comparison_operator "ldap:///distinguished_name?attribute_name#GROUPDN"

使用 ROLEDN 绑定类型

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

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

userattr comparison_operator "attribute_name#ROLEDN"

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

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

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

使用 SELFDN 绑定类型

SELFDN 绑定类型可让您在条目的 single-value 属性中设置绑定用户的 DN。

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

userattr comparison_operator "attribute_name#SELFDN"

例 12.23. 使用 SELFDN 绑定类型

要让用户添加 ipatokenuniqueid=*,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";)

使用 LDAPURL 绑定类型

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

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

userattr comparison_operator "attribute_name#LDAPURL"

例 12.24. 使用 LDAPURL 绑定类型

为包含 aciurl 属性设为 ldap:///ou=People,dc=example,dc=com?one?one?one?one?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);)

使用具有继承的 userattr 关键字

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

当在 parent 关键字中使用 userattr 关键字时,其语法如下:

userattr comparison_operator "parent[inheritance_level].attribute_name#bind_type_or_attribute_value
  • inheritance_level: Comma-separated list,它代表目标下面的多少个级别继承 ACI。您可以在目标条目的下面包括五个级别(01234)。零( 0)表示目标条目。
  • attribute_name :由 userattrgroupattr 关键字目标的属性。
  • bind_type_or_attribute_value: 设置属性值或绑定类型,如 USERDN

例如:

userattr = "parent[0,1].manager#USERDN"

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

例 12.25. 使用具有继承的 userattr 关键字

要让用户读取和搜索 cn=Profiles,dc=example,dc=com 条目,其中用户的 DN 在 owner 属性中设置,以及包括 cn=mail,cn=Profiles,dc=example,dc=example,dc=example,dc=example,dc=example ,dc=example,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" ;)

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

通过 bind 规则中的 ip 关键字,您可以授予或拒绝来自特定 IP 地址或 IP 地址范围内的访问。

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

ip comparison_operator "IP_address_or_range"

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

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

12.10.6. 定义来自特定主机或域的访问

绑定规则中的 dns 关键字允许您授予或拒绝来自特定主机或域的访问。

警告

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

如果无法使用 DNS 解析客户端 IP 地址,则改为使用 ip 关键字和 IP 地址。请参阅从特定 IP 地址或范围 进行访问

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

dns comparison_operator "host_name_or_domain_name"

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

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

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

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

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

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

ssf comparison_operator key_strength

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

  • = (首要)
  • ! (不等于)
  • & lt; (少于)
  • > (而不是greater)
  • & lt;.> (不代表或等于)
  • >=(greater than or equal)

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

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

12.10.8. 在一周的某一天定义访问

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

注意

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

将规则与 dayofweek 关键字绑定规则使用以下语法:

dayofweek comparison_operator "comma-separated_list_of_days"

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

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

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

注意

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

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

timeofday comparison_operator "time"

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

  • = (首要)
  • ! (不等于)
  • & lt; (少于)
  • > (而不是greater)
  • & lt;.> (不代表或等于)
  • >=(greater than or equal)
重要

timeofday 关键字要求您以 24 小时格式显示时间。

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

12.10.10. 根据验证方法定义访问权限

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

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

authmethod comparison_operator "authentication_method"

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

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

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

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

通过 bind 规则中的 roledn 关键字,您可以授予或拒绝对拥有一个或多个角色集合的用户的访问权限。

注意

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

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

roledn comparison_operator "ldap:///distinguished_name || ldap:///distinguished_name || ..."

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

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

要启用具有 cn=Human Resources,ou=People,dc=example,dc=com 角色的用户,在 nsRole 属性中设置dc=com 角色以搜索并读取 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="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";)

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

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

将规则与布尔值运算符组合使用的语法如下:

bind_rule_1 boolean_operator bind_rule_2...

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

要配置属于 cn=Administrators,ou=Groups,dc=example,comcn=Operators,ou=Groups,dc=example,com] 组成员的用户可以 [command]`read, search, 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";)

Directory Server 如何评估布尔值运算符

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

  • 来自左到右的所有表达式。

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

    (bind_rule_1) OR (bind_rule_2)
  • 首先是最位于最主要的表达式中。

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

    (bind_rule_1) OR ((bind_rule_2) AND (bind_rule_3))
  • 不允许在 ANDOR 运算符前。

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

    (bind_rule_1) AND NOT (bind_rule_2)

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