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 节 “将 userdn 关键字与 LDAP 过滤器一起使用”。
- 任何 别名:请参阅 第 18.11.1.1.3 节 “授予匿名访问权限”。
- 所有 别名:请参阅 第 18.11.1.1.4 节 “授予对经过身份验证的用户的访问权限”。
- 自我 别名:请参阅 第 18.11.1.1.5 节 “允许用户访问自己的条目”。
- 父 别名:请参阅 第 18.11.1.1.6 节 “设置用户级条目的访问权限”。
18.11.1.1.1. 使用带有 userdn 关键字的 DN 复制链接链接已复制到粘贴板!
userdn comparison_operator ldap:///distinguished_name
例 18.12. 使用带有 userdn 关键字的 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 uid=admin reading manager attribute";
allow (search, read) userdn = "ldap:///uid=admin,ou=People,dc=example,dc=com";)
18.11.1.1.2. 将 userdn 关键字与 LDAP 过滤器一起使用 复制链接链接已复制到粘贴板!
userdn comparison_operator "ldap:///distinguished_name??scope?(filter)"
例 18.13. 将 userdn 关键字与 LDAP 过滤器一起使用
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. 设置用户级条目的访问权限 复制链接链接已复制到粘贴板!
userdn comparison_operator "ldap:///parent"
例 18.17. 设置用户级条目的访问权限
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. 定义基于组的访问 复制链接链接已复制到粘贴板!
成员uniqueMembermemberURLmemberCertificateDescription
groupdn comparison_operator "ldap:///distinguished_name || ldap:///distinguished_name || ..."
- A DN.请参阅 第 18.11.1.2.1 节 “使用带有 groupdn 关键字的 DN”。
- LDAP 过滤器。请参阅 第 18.11.1.2.2 节 “将 groupdn 关键字与 LDAP Filter 搭配使用”。
18.11.1.2.1. 使用带有 groupdn 关键字的 DN 复制链接链接已复制到粘贴板!
groupdn comparison_operator ldap:///distinguished_name
例 18.18. 使用带有 groupdn 关键字的 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. 将 groupdn 关键字与 LDAP Filter 搭配使用 复制链接链接已复制到粘贴板!
groupdn comparison_operator "ldap:///distinguished_name??scope?(filter)"
例 18.19. 将 groupdn 关键字与 LDAP Filter 搭配使用
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 Bind Type 复制链接链接已复制到粘贴板!
userattr comparison_operator "attribute_name#USERDN"
例 18.20. 使用 USERDN Bind Type
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 Bind Type 复制链接链接已复制到粘贴板!
userattr comparison_operator "attribute_name#GROUPDN"
例 18.21. 使用 GROUPDN Bind Type
# 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 Bind Type 复制链接链接已复制到粘贴板!
userattr comparison_operator "attribute_name#ROLEDN"
例 18.22. 使用 ROLEDN Bind Type
cn=Administrators,dc=example,dc=com 角色的用户搜索和读取 ou=People,dc=example,dc=com 中的条目的 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: (version 3.0; acl "Allow example role owners to read manager attribute";
allow (search, read) userattr = manager#ROLEDN;)
18.11.2.1.4. 使用 SELFDN Bind Type 复制链接链接已复制到粘贴板!
userattr comparison_operator "attribute_name#SELFDN"
例 18.23. 使用 SELFDN Bind Type
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. 使用 userattr Keyword with Inheritance 复制链接链接已复制到粘贴板!
userattr comparison_operator "parent[inheritance_level].attribute_name#bind_type_or_attribute_value
- inheritance_level: Comma 分隔列表,指示目标下多少级别继承 ACI。您可以在目标条目下包括 5 级(0、1、2、3、4)。零(0)表示目标条目。
- attribute_name : userattr 或 groupattr 关键字目标的属性。
- bind_type_or_attribute_value :设置属性值或绑定类型,如 USERDN。
userattr = "parent[0,1].manager#USERDN"
例 18.25. 使用 userattr Keyword with Inheritance
owner 属性中设置,以及第一个包括 cn=mail,cn=Profiles,dc=example,dc=com 和 cn=news,cn=Profiles,dc=example,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. 在连接中需要 Certain Security 复制链接链接已复制到粘贴板!
ssf comparison_operator key_strength
- = (等于)
- ! (不等于)
- & lt; (无)
- > (greater than)
- & lt;= (小于或等于)
- >= (同意或等于)
例 18.30. 在连接中需要 Certain Security
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. 在 Week 的特定天定义访问 复制链接链接已复制到粘贴板!
dayofweek comparison_operator "comma-separated_list_of_days"
例 18.31. 授予 Week 特定天的访问权限
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)
- & lt;= (小于或等于)
- >= (同意或等于)
例 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"
- none: 不需要身份验证并代表匿名访问。这是默认值。
- 简单 :客户端必须提供要绑定到目录的用户名和密码。
- 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 中条目的 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 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 运算符没有优先级顺序。