18.11. 定义绑定规则
- dns
- 组成员资格或分配的角色
- 条目必须绑定的位置
- 在绑定过程中必须使用的身份验证类型
- 绑定发生的时间或天数
(target_rule) (version 3.0; acl "ACL_name"; permission_rule bind_rules;)
语法
keyword comparison_operator "expression"
- 关键字 :设置绑定操作的类型。请参阅 第 18.11.1 节 “常用的绑定规则”。
- compare_operator: Valid 值为 = 和 !=,并且指明目标是否为表达式中指定的对象。如果关键字支持其他比较运算符,则会在对应的部分中提到。
- 表达式 :设置表达式,且必须用引号括起来。表达式本身取决于您使用的关键字。
18.11.1. 常用的绑定规则
- 用户DN :请参阅 第 18.11.1.1 节 “定义基于用户的访问权限”。
- groupdn :请参阅 第 18.11.1.2 节 “定义基于组的访问”。
18.11.1.1. 定义基于用户的访问权限
userdn comparison_operator "ldap:///distinguished_name || ldap:///distinguished_name || ..."
- LDAP 过滤器:请参阅 第 18.11.1.1.2 节 “使用带有 LDAP 过滤器的 userdn Keyword”。
- 任何人 别名:请参阅 第 18.11.1.1.3 节 “授予匿名访问权限”。
- 所有 别名: 请参阅 第 18.11.1.1.4 节 “授予对经过身份验证的用户的访问权限”。
- 自助服务 : 请参阅 第 18.11.1.1.5 节 “启用用户访问您自己的条目”。
- 父 别名: 请参阅 第 18.11.1.1.6 节 “为用户的 Child 条目设置访问权限”。
18.11.1.1.1. 使用带有 userdn Keyword 的 DN
userdn comparison_operator ldap:///distinguished_name
例 18.12. 使用带有 userdn Keyword 的 DN
管理器
属性:
# ldapmodify -D "cn=Directory Manager" -W -p 389 -h 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";)
18.11.1.1.2. 使用带有 LDAP 过滤器的 userdn Keyword
userdn comparison_operator "ldap:///distinguished_name??scope?(filter)"
例 18.13. 使用带有 LDAP 过滤器的 userdn Keyword
department
的属性被设置为 Human Resources,以便可以更新 ou=People,dc=example,dc=com 条目中的用户的 homePostalAddress
属性:
# ldapmodify -D "cn=Directory Manager" -W -p 389 -h 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)";)
18.11.1.1.3. 授予匿名访问权限
- 没有绑定 DN 和密码
- 有效的绑定 DN 和密码
userdn comparison_operator "ldap:///anyone"
例 18.14. 授予匿名访问权限
sn
, givenName
, 和 telephoneNumber
属性:
# ldapmodify -D "cn=Directory Manager" -W -p 389 -h 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";)
18.11.1.1.4. 授予对经过身份验证的用户的访问权限
userdn comparison_operator "ldap:///all"
例 18.15. 授予对经过身份验证的用户的访问权限
# ldapmodify -D "cn=Directory Manager" -W -p 389 -h 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";)
18.11.1.1.5. 启用用户访问您自己的条目
userdn comparison_operator "ldap:///self"
例 18.16. 启用用户访问您自己的条目
userPassword
属性:
# ldapmodify -D "cn=Directory Manager" -W -p 389 -h 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";)
18.11.1.1.6. 为用户的 Child 条目设置访问权限
userdn comparison_operator "ldap:///parent"
例 18.17. 为用户的 Child 条目设置访问权限
manager
属性,如 cn=example,cn=user,ou=People,dc=example,dc=com :
# ldapmodify -D "cn=Directory Manager" -W -p 389 -h 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";)
18.11.1.2. 定义基于组的访问
成员
uniqueMember
memberURL
memberCertificateDescription
groupdn comparison_operator "ldap:///distinguished_name || ldap:///distinguished_name || ..."
- LDAP 过滤器。请参阅 第 18.11.1.2.2 节 “使用带有 LDAP 过滤器的 groupdn Keyword”。
18.11.1.2.1. 使用带有 groupdn Keyword 的 DN
groupdn comparison_operator ldap:///distinguished_name
例 18.18. 使用带有 groupdn Keyword 的 DN
manager
属性:
# ldapmodify -D "cn=Directory Manager" -W -p 389 -h 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";)
18.11.1.2.2. 使用带有 LDAP 过滤器的 groupdn Keyword
groupdn comparison_operator "ldap:///distinguished_name??scope?(filter)"
例 18.19. 使用带有 LDAP 过滤器的 groupdn Keyword
manager
属性设置为 example,请更新 ou=People,dc=example,dc=com 中的条目的 homePostalAddress
:
# ldapmodify -D "cn=Directory Manager" -W -p 389 -h 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)";)
18.11.2. 进一步绑定规则
18.11.2.1. 根据匹配值定义访问
userattr comparison_operator "attribute_name#bind_type_or_attribute_value
18.11.2.1.1. 使用 USERDN 绑定类型
userattr comparison_operator "attribute_name#USERDN"
例 18.20. 使用 USERDN 绑定类型
telephoneNumber
属性的所有权限:
# ldapmodify -D "cn=Directory Manager" -W -p 389 -h 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";)
manager
属性中的 DN,则前面的 ACI 被评估为 true。
18.11.2.1.2. 使用 GROUPDN 绑定类型
userattr comparison_operator "attribute_name#GROUPDN"
例 18.21. 使用 GROUPDN 绑定类型
# ldapmodify -D "cn=Directory Manager" -W -p 389 -h 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";)
owner
属性中指定的组的成员,则前面的 ACI 会被评估为 true。
userattr comparison_operator "ldap:///distinguished_name?attribute_name#GROUPDN"
18.11.2.1.3. 使用 ROLEDN 绑定类型
userattr comparison_operator "attribute_name#ROLEDN"
例 18.22. 使用 ROLEDN 绑定类型
cn=Administrators,dc=example,dc=com
角色的用户,以搜索和读取 ou=People,dc=example,dc=com 中的条目的 管理器
属性:
# ldapmodify -D "cn=Directory Manager" -W -p 389 -h 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;)
18.11.2.1.4. 使用 SELFDN 绑定类型
userattr comparison_operator "attribute_name#SELFDN"
例 18.23. 使用 SELFDN 绑定类型
ipatokenOwner
属性中设置了绑定用户的 DN:
# ldapmodify -D "cn=Directory Manager" -W -p 389 -h 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";)
18.11.2.1.5. 使用 LDAPURL 绑定类型
userattr comparison_operator "attribute_name#LDAPURL"
例 18.24. 使用 LDAPURL 绑定类型
aciurl
属性设置为 ldap:///ou=People,dc=example,dc=com???one? (uid=userö):
# ldapmodify -D "cn=Directory Manager" -W -p 389 -h 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);)
18.11.2.1.6. 使用带有 Inheritance 的用户attr Keyword
userattr comparison_operator "parent[inheritance_level].attribute_name#bind_type_or_attribute_value
- inheritance_level: Comma 分隔列表,用于指示目标下面多少级别继承 ACI。您可以在目标条目下面包括五个级别(0、1、2、3、4)。零(0)表示目标条目。
- attribute_name :以 userattr 或 groupattr 关键字为目标的属性。
- bind_type_or_attribute_value :设置属性值或绑定类型,如 USERDN。
userattr = "parent[0,1].manager#USERDN"
例 18.25. 使用带有 Inheritance 的用户attr Keyword
owner
属性中设置,以及包含 cn=mail,cn=Profiles,dc=com 和 cn= news,cn=Profiles,dc=com 的第一个子条目级别:
# ldapmodify -D "cn=Directory Manager" -W -p 389 -h 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" ;)
18.11.2.2. 定义从特定 IP 地址或范围的访问
ip comparison_operator "IP_address_or_range"
例 18.26. 在绑定规则中使用 IPv4 地址范围
192.0.2.0/24
网络访问 dc=example,dc=com 条目:
# ldapmodify -D "cn=Directory Manager" -W -p 389 -h 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.");)
例 18.27. 在绑定规则中使用 IPv6 地址范围
2001:db8::/64
网络访问 dc=example,dc=com 条目:
# ldapmodify -D "cn=Directory Manager" -W -p 389 -h 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::");)
18.11.2.3. 定义从特定主机或域的访问
dns comparison_operator "host_name_or_domain_name"
例 18.28. 定义来自特定主机的访问
client.example.com
主机访问 dc=example,dc=com 条目:
# ldapmodify -D "cn=Directory Manager" -W -p 389 -h 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");)
例 18.29. 定义从特定域的访问
example.com
域中的所有主机访问 dc=example,dc=com 条目:
# ldapmodify -D "cn=Directory Manager" -W -p 389 -h 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");)
18.11.2.4. 连接中需要级别安全性
ssf comparison_operator key_strength
- = (等于)
- ! (不等于)
- & lt; (小于)
- > (greater than)
- <= (不小于或等于)
- >=(greater or equal)
例 18.30. 连接中需要级别安全性
userPassword
属性:
# ldapmodify -D "cn=Directory Manager" -W -p 389 -h 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");)
18.11.2.5. 在星期的特定天定义访问权限
dayofweek comparison_operator "comma-separated_list_of_days"
例 18.31. 在星期的特定天数授予访问权限
uid=用户,ou=People,dc=example,dc=com
用户条目的访问,以便在 Saturdays 和 Sundays 上绑定到服务器:
# ldapmodify -D "cn=Directory Manager" -W -p 389 -h 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");)
18.11.2.6. 在一天的特定时间定义访问权限
timeofday comparison_operator "time"
- = (等于)
- ! (不等于)
- & lt; (小于)
- > (greater than)
- <= (不小于或等于)
- >=(greater or equal)
例 18.32. 在一天的特定时间定义访问
uid=用户,ou=People,dc=example,dc=com
用户条目的访问,以便在 6pm 到 0am 之间绑定到服务器:
# ldapmodify -D "cn=Directory Manager" -W -p 389 -h 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");)
18.11.2.7. 根据身份验证方法定义访问
authmethod comparison_operator "authentication_method"
- 无 :不需要身份验证,并代表匿名访问。这是默认值。
- simple :客户端必须提供要绑定到目录的用户名和密码。
- SSL :客户端必须使用数据库、智能卡或其他设备中的 TLS 证书绑定到目录。有关基于证书的身份验证的详情,请参考 第 9.9 节 “使用基于证书的客户端身份验证”。
- SASL :客户端必须通过简单身份验证和安全层(SASL)连接绑定到目录。当您在绑定规则中使用此验证方法时,还要指定 SASL 机制,如 EXTERNAL。
例 18.33. 仅使用 EXTERNAL SASL 身份验证方法为连接启用访问
# ldapmodify -D "cn=Directory Manager" -W -p 389 -h 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");)
18.11.2.8. 根据角色定义访问权限
roledn comparison_operator "ldap:///distinguished_name || ldap:///distinguished_name || ..."
例 18.34. 根据角色定义访问权限
nsRole
属性中设置的 cn=Human Resources,ou=People,dc=example,dc=com 角色的用户,以搜索并读取 ou=People,dc=example,dc=com 中的条目的 管理器
属性:
# ldapmodify -D "cn=Directory Manager" -W -p 389 -h 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";)
18.11.3. 使用布尔值 Operator 组合绑定规则
bind_rule_1 boolean_operator bind_rule_2...
例 18.35. 使用布尔值 Operator 组合绑定规则
# ldapmodify -D "cn=Directory Manager" -W -p 389 -h 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";)
目录服务器评估布尔值 Operator
- 从左到右的所有表达式。在以下示例中,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 运算符没有优先级顺序。