1.10. 定义 ACI 绑定规则
访问控制指令(ACI)中的绑定规则定义必须满足所需的绑定参数,以便目录服务器应用 ACI。例如,您可以基于以下方法设置绑定规则:
- DNS
- 组成员资格或分配角色
- 条目要从中绑定的位置
- 在绑定过程中必须使用的验证类型
- 绑定发生的时间或天
在 ACI 中,以下突出显示的部分是绑定规则:
(target_rule) (version 3.0; acl "ACL_name"; permission_rule bind_rules;)
1.10.1. 绑定规则的语法
绑定规则的一般语法是:
keyword comparison_operator "expression"
-
关键字
:设置 bind 操作的类型。 -
comparison_operator
: 有效值为=
和!=
,并指明目标是表达式中指定的对象。如果关键字支持额外的比较运算符,则相应的部分将提到它。 -
表达式
:设置表达式,且必须使用引号括起。表达式本身取决于您使用的关键字。
1.10.2. 定义基于用户的访问
userdn
关键字允许您根据一个或多个 DN 授予或拒绝访问,并使用以下语法:
userdn comparison_operator "ldap:///distinguished_name || ldap:///distinguished_name || ..."
将表达式中的 DN 设置为:
- DN:请参阅 使用带有 userdn 关键字的 DN。
- LDAP 过滤器:请参阅在 LDAP 过滤器中使用 userdn 关键字。
-
任何人都
别名:请参阅 授予匿名访问。 -
all
别名:请参阅 授予经过身份验证的用户访问权限。 -
自我
别名: 请参阅启用用户来访问他们自己的条目。 -
父
别名: 请参阅设置用户 的子条目访问权限。
不要在 LDAP URL 中指定主机名或端口号。URL 始终适用于本地服务器。
使用 userdn 关键字的 DN
将 userdn
关键字设置为可分辨名称(DN),将 ACI 仅应用到匹配的条目。要匹配多个条目,请在 DN 中使用 *
通配符。
将 userdn
关键字与 DN 搭配使用必须匹配以下语法:
userdn comparison_operator ldap:///distinguished_name
例 1.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";)
将 userdn 关键字与 LDAP 过滤器一起使用
如果要动态允许或拒绝用户的权限,请使用 userdn
关键字和 LDAP 过滤器:
userdn comparison_operator "ldap:///distinguished_name??scope?(filter)"
LDAP 过滤器支持 *
通配符。
例 1.13. 将 userdn 关键字与 LDAP 过滤器一起使用
要启用将 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 和密码
要配置匿名访问,请使用 ldap:///anyone
表达式在绑定规则中使用 userdn
关键字:
userdn comparison_operator "ldap:///anyone"
例 1.14. 授予匿名访问
要启用没有身份验证的任何人,请在 ou=People,dc=example,dc=com
条目中读取和搜索 sn
、givenName
和 Tel Number
属性:
# 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")
授予经过身份验证的用户访问权限
在某些情况下,管理员希望向能够成功绑定到目录服务器的任何用户授予权限,但匿名绑定除外。要配置此功能,请在绑定规则中使用 ldap:///all
表达式以及 userdn
关键字:
userdn comparison_operator "ldap:///all"
例 1.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 规则中使用 ldap:///self
表达式以及 bind 规则中的 userdn
关键字:
userdn comparison_operator "ldap:///self"
例 1.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"
例 1.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")
1.10.3. 定义基于组的访问
基于组的访问控制指令(ACI)可让您通过在组中添加或删除用户来管理访问权限。要配置基于组成员资格的 ACI,请使用 groupdn
关键字。如果用户是一个或多个指定组的成员,则 ACI 将匹配。
当使用 groupdn
关键字时,Directory 服务器会根据以下属性验证组成员资格:
- 成员
- uniqueMember
- memberURL
- memberCertificateDescription
使用 groupdn
关键字绑定规则使用以下语法:
groupdn comparison_operator "ldap:///distinguished_name || ldap:///distinguished_name || ..."
将表达式中的可分辨名称(DN)设置为:
- A DN.请参阅 使用带有 groupdn 关键字的 DN。
- LDAP 过滤器。请参阅使用 groupdn 关键字与 LDAP 过滤器
如果您在一个绑定规则中设置多个 DN,如果经过身份验证的用户是这些组的成员,则 Directory 服务器会应用 ACI。要将用户设置为多个组的成员,请使用多个 groupdn
关键字,并使用 Boolean 和
operator 合并它们。详情请参阅 使用布尔值 Operator 组合绑定规则。
不要在 LDAP URL 中指定主机名或端口号。URL 始终适用于本地服务器。
使用带有 groupdn 关键字的 DN
要将 ACI 应用到组的成员,请将 groupdn
关键字设置为组的 DN。
groupdn
关键字设置为 DN 使用以下语法:
groupdn comparison_operator ldap:///distinguished_name
例 1.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 过滤器支持 *
通配符。
例 1.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)";)
1.10.4. 基于值匹配定义访问权限
在绑定规则中使用 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
绑定类型。
userattr
关键字及 USERDN
绑定类型需要以下语法:
userattr comparison_operator "attribute_name#USERDN"
例 1.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";)
如果执行 ou=People,dc=example,dc=example,dc=com
的一个条目中的操作的用户的 DN 与存在这个条目中的 manager
属性中的 DN 匹配,则上一 ACI 被评估为 true。
使用 GROUPDN 绑定类型
要在绑定用户 DN 是属性中设置的组成员时应用 ACI,请使用 GROUPDN
绑定类型。
带有 GROUPDN
绑定类型的 userattr
关键字需要以下语法:
userattr comparison_operator "attribute_name#GROUPDN"
例 1.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"
例 1.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
绑定类型允许您在条目的单值属性中设置绑定用户的 DN 时授予权限。
带有 SELFDN
绑定类型的 userattr
关键字需要以下语法:
userattr comparison_operator "attribute_name#SELFDN"
例 1.23. 使用 SELFDN 绑定类型
要让用户添加 ipatokenuniqueid=*,cn=otp,dc=example,dc=com
条目,这些条目在 ipatokenOwner
属性中设置的 bind 用户 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
绑定类型的 userattr
关键字需要以下语法:
userattr comparison_operator "attribute_name#LDAPURL"
例 1.24. 使用 LDAPURL 绑定类型
要为包含 aciurl
属性设为 ldap:///ou=People,dc=example,dc=com?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);)
使用带有继承的用户attr 关键字
当您使用 userattr
关键字将用于绑定目标条目的条目关联时,ACI 仅适用于指定的目标,而不应用到下面的条目。在某些情况下,管理员希望在目标条目下扩展 ACI 的几个级别的应用程序。这可以通过使用 parent
关键字并指定应该继承 ACI 的目标下方的级别数量。
使用带有 parent
关键字 的用户attr
关键字时,其语法如下:
userattr comparison_operator "parent[inheritance_level].attribute_name#bind_type_or_attribute_value
-
inheritance_level
: Comma- separated list,它指示目标中有多少级别继承 ACI。您可以在目标条目下面包含五个级别(0
、1
、2
、3
、4
)。零(0)
表示目标条目。 -
attribute_name
:以userattr
或groupattr
关键字为目标的属性。 -
bind_type_or_attribute_value
:设置属性值或绑定类型,如USERDN
。
例如:
userattr = "parent[0,1].manager#USERDN"
如果绑定 DN 与目标条目的 manager 属性匹配,则此绑定规则被评估为 true。当绑定规则被评估为 true 时,授予的权限适用于目标条目,并立即应用到目标条目。
例 1.25. 使用带有继承的用户attr 关键字
要让用户读取和搜索 cn=Profiles,dc=example,dc=com
条目,其中用户的 DN 在 owner
属性中设置,以及包含 cn=mail,cn=Profiles,dc=example,dc=com
和 cn=news,cn=Profiles,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" ;)
1.10.5. 定义来自特定 IP 地址或范围的访问
绑定规则中的 ip
关键字可让您授予或拒绝来自特定 IP 地址或 IP 地址的访问。
带有 ip
关键字的绑定规则使用以下语法:
ip comparison_operator "IP_address_or_range"
例 1.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.");)
例 1.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::");)
1.10.6. 定义特定主机或域的访问
绑定规则中的 dns
关键字允许您授予或拒绝来自特定主机或域的访问。
如果目录服务器无法使用 DNS 解析连接 IP 地址到其完全限定域名(FQDN),服务器不会应用使用此客户端的 dns
绑定规则的访问控制指令(ACI)。
如果无法使用 DNS 解析客户端 IP 地址,请使用 ip
关键字和 IP 地址。请参阅 定义来自特定 IP 地址或范围的访问权限。
使用 dns
关键字绑定规则使用以下语法:
dns comparison_operator "host_name_or_domain_name"
例 1.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");)
例 1.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");)
1.10.7. 在连接中需要一定级别的安全性
连接的安全性由其安全强号(SSF)决定,它设定了处理操作所需的最低关键强度。在绑定规则中使用 ssf
关键字,您可以设置连接必须使用一定级别的安全性。这可让您强制操作,例如密码更改,通过加密连接来执行。
任何操作的 SSF 的值是 TLS 连接和 SASL 绑定之间的高值。这意味着,如果服务器被配置为通过 TLS 运行,并且为 SASL/GSSAPI 配置复制协议,则操作的 SSF 是哪些可用加密类型更为安全。
使用 ssf
关键字绑定规则使用以下语法:
ssf comparison_operator key_strength
您可以使用以下比较运算符:
-
=
(等同于) -
!
(不等于) -
&
lt;(不超过) -
&
gt;(多于) -
abrt
(不等于或等于) -
>
;=(等于或等于)
如果将 key_strength
参数设置为 0,
则 LDAP 操作不需要安全操作。
例 1.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");)
1.10.8. 定义特定星期几的访问
绑定规则中的 dayofweek
关键字允许您根据星期几授予或拒绝访问。
目录服务器使用服务器上的时间来评估访问控制指令(ACI);而不是客户端上的时间。
使用 dayofweek
关键字绑定规则使用以下语法:
dayofweek comparison_operator "comma-separated_list_of_days"
例 1.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");)
1.10.9. 在特定时间定义访问
绑定规则中的 timeofday
关键字允许您根据当日来授予或拒绝访问。
目录服务器使用服务器上的时间来评估访问控制指令(ACI);而不是客户端上的时间。
使用 timeofday
关键字绑定规则使用以下语法:
timeofday comparison_operator "time"
您可以使用以下比较运算符:
-
=
(等同于) -
!
(不等于) -
&
lt;(不超过) -
&
gt;(多于) -
abrt
(不等于或等于) -
>
;=(等于或等于)
timeofday
关键字要求您以 24 小时格式指定时间。
例 1.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");)
1.10.10. 根据验证方法定义访问权限
bind 规则中的 authmethod
关键字会设置客户端在连接到服务器时必须使用的身份验证方法,以应用访问控制指令(ACI)。
使用 authmethod
关键字绑定规则使用以下语法:
authmethod comparison_operator "authentication_method"
您可以设置以下验证方法:
-
none
:不需要身份验证,代表匿名访问。这是默认值。 -
simple
:客户端必须提供要绑定到目录的用户名和密码。 -
SSL
:客户端必须在数据库、智能卡或其他设备中使用 TLS 证书绑定到目录。有关基于证书的身份验证的详情,请参考 基于验证方法定义访问权限。 -
SASL
:客户端必须通过简单验证和安全层(SASL)连接绑定到 目录。当您在绑定规则中使用这个验证方法时,还指定 SASL 机制,如EXTERNAL
。
例 1.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");)
1.10.11. 基于角色定义访问权限
绑定规则中的 roledn
关键字允许您授予或拒绝对拥有一个或多个角色集的用户的访问。
红帽建议使用组而不是角色。
使用 roledn
关键字绑定规则使用以下语法:
roledn comparison_operator "ldap:///distinguished_name || ldap:///distinguished_name || ..."
如果可分辨的名称(DN)包含逗号,请使用反斜杠转义逗号。
例 1.34. 基于角色定义访问权限
要启用在 nsRole
属性中设置的 cn=Human Resources、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 manager role to update manager attribute";
allow (search, read) roledn = "ldap:///cn=Human Resources,ou=People,dc=example,dc=com";)
1.10.12. 使用布尔值运算符组合绑定规则
在创建复杂的绑定规则时,可以使用 AND
、OR
和 NOT
布尔值运算符组合多个关键字。
绑定规则与布尔值运算符组合有以下语法:
bind_rule_1 boolean_operator bind_rule_2...
例 1.35. 使用布尔值运算符组合绑定规则
要配置是 cn=Administrators,ou=Groups,dc=example,com
和 cn=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";)
目录服务器评估布尔值运算符的方式
目录服务器使用以下规则评估布尔值运算符:
所有表达式(从左到右)
在以下示例中,首先评估
bind_rule_1
:(bind_rule_1) OR (bind_rule_2)
从左边到最外围的父表达式首先。
在以下示例中,先评估
bind_rule_2
,再评估bind_rule_3
秒:(bind_rule_1) OR ((bind_rule_2) AND (bind_rule_3))
不早于
AND
或OR
运算符。在以下示例中,首先评估 bind_rule_2 :
(bind_rule_1) AND NOT (bind_rule_2)
AND
和OR
运算符没有优先级顺序。