第 2 章 管理访问控制
了解如何定义哪些用户可以对 Red Hat Directory Server 中的后缀和条目执行特定的操作。这些任务由访问控制指令(ACI)控制。了解不同的 ACI 类型、ACI 用例、绑定规则和检查条目访问权限的方法。
2.1. 管理访问控制指令 复制链接链接已复制到粘贴板!
当目录服务器收到请求时,它使用绑定操作中的用户提供的身份验证信息,以及目录中定义的访问控制指令(ACI)来允许或拒绝访问请求的条目或属性。服务器可以允许或拒绝操作的权限,如 读取
、写入
、搜索
和比较
。授予用户的权限级别取决于提供的身份验证信息。
Directory 服务器中的访问控制可让您在 ACI 适用时设置精确规则:
- 对于整个目录、子树或特定条目
- 对于特定用户,属于特定组或角色的所有用户,或者目录中的所有用户
对于特定位置,如 IP 地址、IP 范围或 DNS 名称。
请注意,负载均衡器可能会影响特定于位置的规则。
复杂的 ACI 很难读和理解。您可以编写多个简单规则,而不是编写一个复杂的 ACI,以实现同样的效果。但是,大量 ACI 也会增加 ACI 处理的成本。
2.1.1. ACI 放置 复制链接链接已复制到粘贴板!
目录服务器将访问控制指令(ACI)存储在目录条目中的多值 aci
操作属性中。要设置 ACI,请将 aci
属性添加到对应的目录条目中。目录服务器应用 ACI:
如果它没有任何子条目,则只适用于包含 ACI 的条目。例如,如果客户端需要访问
uid=user_name,ou=People,dc=example,dc=com
对象,且 ACI 仅在dc=example,dc=com
上设置,而不会影响任何子条目。注意带有
add
权限的 ACI 也应用到将来创建的子条目。对于包含 ACI 的条目以及它下的所有条目,如果它有子条目。因此,当服务器评估对任何给定条目的访问权限时,它会验证一个请求的和目录后缀之间的每个条目的 ACI,以及条目本身上的 ACI。
例如,ACI 在
dc=example,dc=com
和ou=People,dc=example,dc=com
条目上设置:如果客户端想要访问uid=user_name,ou=People,dc=example,dc=com
对象,它没有 ACI 设置,目录服务器首先验证ou=People,dc=example,dc=com
条目上的 ACI。如果这个 ACI 授予访问权限,则评估将停止并授予访问权限。如果没有,目录服务器会在ou=People,dc=example,dc=com
上验证 ACI。如果这个 ACI 成功授权客户端,它可以访问该对象。
rootDSE
条目中设置的 ACI 仅适用于此条目。
在条目中创建的 ACI 无法直接应用到该条目,而是应用到以下子树中的某些或所有条目。这种方法的优点是,可以将常规 ACI 放置到目录树中,使其对位于树中的条目的影响。例如,目标条目为包含 inetOrgPerson
对象类的 ACI,可以在 organizationalUnit
条目或 locality 条目级别创建。
通过将常规规则放在高级别分支点来最小化目录树中的 ACI 数量。要限制更多特定规则的范围,请尽可能将其放在叶条目中。
2.1.2. ACI 的结构 复制链接链接已复制到粘贴板!
aci
属性使用以下语法:
(target_rule) (version 3.0; acl "ACL_name"; permission_rule bind_rules;)
(target_rule) (version 3.0; acl "ACL_name"; permission_rule bind_rules;)
-
target_rule
指定控制访问的条目、属性或一组条目和属性。 -
版本 3.0
是一个必需的字符串,用于标识访问控制指令(ACI)版本。 -
ACL "ACL name"
设置描述 ACI 的名称或字符串。 -
permission_rule
设置允许或拒绝的权限,如读取或写入
-
bind_rules
指定在绑定期间必须匹配哪些规则来允许或拒绝访问。
权限和绑定规则对称为访问控制规则。
要有效地为给定目标设置多个访问控制,您可以为每个目标设置多个访问控制规则:
(target_rule)(version 3.0; acl "ACL_name"; permission_rule bind_rules; permission_rule bind_rules; ... ;)
(target_rule)(version 3.0; acl "ACL_name"; permission_rule bind_rules; permission_rule bind_rules; ... ;)
2.1.3. ACI 评估 复制链接链接已复制到粘贴板!
要评估对特定条目的访问权限,服务器会创建条目本身和父条目上存在的访问控制指令(ACI)的列表,备份到 Directory Server 中存储的顶级条目。ACI 在特定实例的所有数据库中评估,但不在不同实例间进行评估。
目录服务器根据 ACI 的语义评估这个 ACI 列表,而不是在目录树中的放置。这意味着,接近目录树根目录的 ACI 不优先于与目录树留下的 ACI。
在目录服务器中,ACI 中的 deny
权限优先于 允许
权限。例如,如果您拒绝在目录的根目录中写入权限,则任何用户都可以写入该目录,无论其他 ACI 是否授予这个权限。要为特定用户授予目录的写入权限,您必须在原始拒绝规则中添加例外,以允许该用户在该目录中写入。
对于改进的 ACI,请使用精细的 allow
规则,而不是 拒绝规则
。
2.1.4. ACI 的限制 复制链接链接已复制到粘贴板!
当您设置访问控制指令(ACI)时,会有以下限制:
如果您的目录数据库在多个服务器上分发,则以下限制适用于您可以在 ACI 中使用的关键字:
根据使用
groupdn
关键字的组条目,ACI 必须位于与组条目相同的服务器上。如果组是动态的,则组的所有成员都必须在服务器上有一个条目。静态组的成员条目可以位于远程服务器中。
-
使用
roledn
关键字的 ACI 根据角色定义定义,必须位于与角色定义条目相同的服务器上。要具有该角色的每个条目也必须位于同一服务器上。
但是,您可以使用
userattr
关键字将目标条目中存储的值与存储在绑定用户条目中的值匹配。在这种情况下,即使 bind 用户在存储 ACI 的服务器上没有条目,也会正常评估访问。在以下 ACI 关键字中,您无法使用虚拟属性,如 Service (CoS)属性:
-
targetfilter
-
targattrfilters
-
userattr
-
- 访问控制规则仅在本地服务器上评估。例如,如果您在 ACI 关键字的 LDAP URL 中指定服务器的主机名,则 URL 将被忽略。
2.1.5. 目录服务器在复制拓扑中处理 ACI 复制链接链接已复制到粘贴板!
访问控制指令(ACI)存储在条目 的辅助
属性中。因此,如果包含 ACI 的条目是复制的数据库的一部分,则会复制 ACI。
ACI 始终在解析传入 LDAP 请求的服务器上评估。当消费者服务器收到更新请求时,它会在评估请求是否可以在供应商上提供服务前向供应商服务器返回引用。
2.1.6. 显示、添加、删除和更新 ACI 复制链接链接已复制到粘贴板!
您可以使用 ldapsearch
工具来搜索,以及 ldapmodify
工具来添加、删除和更新访问控制指令(ACI)。
显示 ACI :
例如,要显示 dc=example,dc=com
和子条目上设置的 ACI,请输入:
ldapsearch -D "cn=Directory Manager" -W -H ldap://server.example.com -x -b "dc=example,dc=com" -s sub '(aci=*)' aci
# ldapsearch -D "cn=Directory Manager" -W -H ldap://server.example.com -x -b "dc=example,dc=com" -s sub '(aci=*)' aci
添加 ACI
例如,要将 ACI 添加到 ou=People,dc=example,dc=com
条目,请输入:
删除 ACI
删除 ACI:
如果在条目上只设置了一个
aci
属性,或者您想要从条目中删除所有 ACI:ldapmodify -D "cn=Directory Manager" -W -H ldap://server.example.com -x
# ldapmodify -D "cn=Directory Manager" -W -H ldap://server.example.com -x dn: ou=People,dc=example,dc=com changetype: delete delete: aci
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 如果条目中存在多个 ACI,并且您要删除一个特定的 ACI,请指定准确的 ACI:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
更新 ACI
更新 ACI:
- 删除现有的 ACI。
- 使用更新的设置添加新的 ACI。
2.1.7. 定义 ACI 目标 复制链接链接已复制到粘贴板!
访问控制指令(ACI)中的目标规则定义哪个条目服务器应用 ACI。如果您没有设置目标,ACI 应用到包含 aci
属性和以下条目的条目。
在 ACI 中,以下突出显示的部分是目标规则:
(target_rule)(version 3.0; acl "ACL_name"; permission_rule bind_rules;)
(target_rule)(version 3.0; acl "ACL_name"; permission_rule bind_rules;)
对于复杂的 ACI,目录服务器在 ACI 中支持多个带有不同关键字的目标规则:
(target_rule_1)(target_rule_2)(...)(version 3.0; acl "ACL_name"; permission_rule bind_rules;)
(target_rule_1)(target_rule_2)(...)(version 3.0; acl "ACL_name"; permission_rule bind_rules;)
如果您指定多个目标规则,则顺序不相关。请注意,您只能在 ACI 中使用每个关键字一次:
-
target
-
targetattr
-
targetattrfilters
-
targetfilter
-
target_from
-
target_to
2.1.7.1. 目标规则的语法 复制链接链接已复制到粘贴板!
目标规则的一般语法为:
(keyword comparison_operator "expression")
(keyword comparison_operator "expression")
-
关键字
:设置目标的类型。 comparison_operator
: Valid 值是=
和!=
,指明目标是否为表达式中指定的对象。警告为了安全起见,红帽建议不要使用
!=
operator,因为它允许对所有其他条目或属性进行指定操作。例如:(targetattr != "userPassword");(version 3.0; acl "example"); allow (write) ... );
(targetattr != "userPassword");(version 3.0; acl "example"); allow (write) ... );
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 前面的示例允许用户设置、更新或删除除设置 ACI 的 Distinguished Name (DN)下的
userPassword
属性外的任何属性。但是,这还可让用户添加额外的aci
属性,以允许对此属性进行写入访问权限。-
表达式
:设置目标,且必须用引号括起来。表达式本身取决于您使用的关键字。
2.1.7.2. 定位目录条目 复制链接链接已复制到粘贴板!
要根据可辨识名称(DN)及其下面的条目来控制访问,请在访问控制指令(ACI)中使用 target
关键字。使用 target
关键字的目标规则将 DN 作为表达式:
(target comparison_operator "ldap:///distinguished_name")
(target comparison_operator "ldap:///distinguished_name")
您必须在您要为目标的 DN 或更高级别的 DN 上使用 target
关键字设置 ACI。例如,如果您以 ou=People,dc=example,dc=com 为目标,您必须在 ou=People,dc=example,dc=com 或 dc=example,dc=com 中设置 ACI。
例 2.1. 使用 target 关键字
要启用存储在 ou=People,dc=example,dc=com 条目中的用户搜索并显示其自己的条目中的所有属性:
使用带有 target 关键字的通配符
您可以使用 *
通配符以多个条目为目标。
以下目标规则示例与 ou=People,dc=example,dc=com
中的所有条目匹配,其 uid 属性设为以字母顺序开头的值:
(target = "ldap:///uid=a*,ou=People,dc=example,dc=com")
(target = "ldap:///uid=a*,ou=People,dc=example,dc=com")
根据通配符的位置,规则不仅适用于属性值,也应用到完整的 DN。因此,您可以使用通配符来替代 DN 的部分。
例 2.2. 使用通配符目标目录条目
以下规则以带有匹配 uid
属性的 dc=example,dc=com
树中的所有条目为目标,而不仅仅是存储在 dc=example,dc=com
条目本身中的条目:
(target = "ldap:///uid=user_name*,dc=example,dc=com")
(target = "ldap:///uid=user_name*,dc=example,dc=com")
前面的目标规则与多个条目匹配,例如:
-
uid=user_name,dc=example,dc=com
-
uid=user_name,ou=People,dc=example,dc=com
-
uid=user_name2,dc=example,dc=com
目录服务器不支持 DN 的后缀部分中的通配符。例如,如果您的目录的后缀为 dc=example,dc=com
,则无法使用此后缀中的通配符目标,如 (target = "ldap:///dc vendor.com")
。
2.1.7.3. 目标属性 复制链接链接已复制到粘贴板!
要将访问控制指令(ACI)中的访问限制为某些属性,请使用 targetattr
关键字。例如,此关键字定义:
- 在读取操作中,将哪些属性返回到客户端
- 在搜索操作中,将搜索哪些属性
- 在写入操作中,可以将哪些属性写入对象
- 在 add 操作中,创建新对象时可以添加哪些属性
在某些情况下,您可以通过将其他目标关键字与 targetattr
结合使用,来使用 targetattr
关键字来保护 ACI。请参阅目标规则的高级使用。
在 读
和搜索
操作中,默认目标 no 属性。没有 targetattr
关键字的 ACI 仅适用于具有影响完整条目的 ACI,如 add
或 delete
。
要分隔使用 targetattr
关键字的目标规则中的多个属性,请使用 ||
:
(targetattr comparison_operator "attribute_1 || attribute_2 || ...")
(targetattr comparison_operator "attribute_1 || attribute_2 || ...")
表达式中设置的属性必须在 schema 中定义。
表达式中指定的属性适用于创建 ACI 的条目,如果进一步的目标规则不限制,则它的所有条目都应用到它。
例 2.3. 使用 targetattr 关键字
要启用存储在 dc=example,dc=com
中的用户,以及要更新他们自己条目中 userPassword
属性的所有子条目,请输入:
将通配符与 targetattr 关键字一起使用
使用 *
通配符,您可以以所有属性为目标:
(targetattr = "*")
(targetattr = "*")
为安全起见,请不要将通配符与 targetattr
一起使用,因为它允许访问所有属性,包括操作属性。例如,如果用户可以添加或修改所有属性,用户可以创建额外的 ACI 并增加他们自己的权限。
2.1.7.4. 使用 LDAP 过滤器目标条目和属性 复制链接链接已复制到粘贴板!
要以与特定条件匹配的一组条目为目标,请将 targetfilter
关键字与 LDAP 过滤器一起使用:
(targetfilter comparison_operator "LDAP_filter")
(targetfilter comparison_operator "LDAP_filter")
过滤器表达式是一个标准的 LDAP 搜索过滤器。
例 2.4. 使用 targetfilter 关键字
要为 cn=Human Resources,dc=example,dc.com
组的成员授予权限,以修改将 department 属性设置为 Engineering
或 Sales
的所有条目:
targetfilter
关键字以整个条目为目标。如果您将它与 targetattr
关键字相结合,访问控制指令(ACI)仅适用于目标条目的属性子集。请参阅针对与过滤器匹配的条目的某些属性。
当目标条目和属性分散到目录中时,使用 LDAP 过滤器非常有用。但是,结果有时无法预测,因为过滤器不会直接命名您要管理访问权限的对象。过滤的 ACI 的目标条目集合可能会随着属性被添加或删除而改变。因此,如果您在 ACI 中使用 LDAP 过滤器,请使用同一过滤器验证它们是否以正确的条目和属性为目标,例如在 ldapsearch
操作中。
使用带有 targetfilter 关键字的通配符
targetfilter
关键字支持通配符,类似于标准的 LDAP 过滤器。例如,要以其值以 adm
开头的所有 uid 属性为目标,请使用:
(targetfilter = "(uid=adm*) ...)
(targetfilter = "(uid=adm*) ...)
2.1.7.5. 使用 LDAP 过滤器来目标属性值 复制链接链接已复制到粘贴板!
您可以使用访问控制来针对特定属性值。这意味着,如果该属性的值满足访问控制指令(ACI)中定义的条件,您可以对属性授予或拒绝权限。根据属性的值授予或拒绝访问的 ACI 被称为基于值的 ACI。这只适用于 ADD
和 DEL
操作。您不能根据特定值限制搜索权限。
要创建基于值的 ACI,请使用以下语法的 targattrfilters
关键字:
对于只有一个属性和过滤器组合的操作:
(targattrfilters="operation=attribute:filter")
(targattrfilters="operation=attribute:filter")
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 对于具有多个属性和过滤器组合的一个操作:
(targattrfilters="operation=attribute_1:filter_1 && attribute_2:filter_2 ... && attribute_m:filter_m")
(targattrfilters="operation=attribute_1:filter_1 && attribute_2:filter_2 ... && attribute_m:filter_m")
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 对于两个操作,每个操作都有多个属性和过滤器组合:
(targattrfilters="operation_1=attribute_1_1:filter_1_1 && attribute_1_2:filter_1_2 ... && attribute_1_m:filter_1_m , operation_2=attribute_2_1:filter_2_1 && attribute_2_2:filter_2_2 ... & attribute_2_n:filter_2_n ")
(targattrfilters="operation_1=attribute_1_1:filter_1_1 && attribute_1_2:filter_1_2 ... && attribute_1_m:filter_1_m , operation_2=attribute_2_1:filter_2_1 && attribute_2_2:filter_2_2 ... & attribute_2_n:filter_2_n ")
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
在前面的语法示例中,您可以设置 add
或 del
的操作。attribute:filter
组合设置过滤器,以及过滤器应用到的属性。
下面描述了过滤器如何匹配:
- 在创建条目和过滤器时,过滤器应用到新条目中的属性,该属性的每个实例都必须与过滤器匹配。
- 当删除条目和过滤器应用到条目中的属性时,该属性的每个实例也必须与过滤器匹配。
-
当修改条目和操作会添加一个属性时,应用到该属性的
add
过滤器必须匹配。 -
如果操作删除某个属性,则应用到该属性的
del
过滤器必须匹配。如果条目中已存在的属性单独值都被替换,则add
和del
过滤器必须匹配。
例 2.5. 使用 targattrfilters 关键字
要创建一个 ACI,它允许用户将任何角色添加到自己的条目中,但 Admin
角色除外,并添加 telephone
属性,只要值以 123
前缀开头,请输入:
2.1.7.6. 目标源和目标 DN 复制链接链接已复制到粘贴板!
在某些情况下,管理员希望允许用户移动目录条目。在访问控制指令(ACI)中使用 target_from
和 target_to
关键字,但您可以在不启用用户的情况下指定操作的源和目标:
- 要将条目从不同的源移动,如 ACI 中设置。
- 要将条目移到 ACI 中设置的不同目的地。
- 要从源可辨识名称(DN)中删除现有条目。
- 要向目标 DN 添加新条目,请执行以下操作:
例 2.6. 使用 target_from 和 target_to 关键字
要启用 uid=user,dc=example,dc=com
帐户,将用户帐户从 cn=staging,dc=example,dc=com
条目移到 cn=people,dc=example,dc=com
,请输入:
ACI 仅适用于定义它们的子树。在上例中,ACI 仅适用于 dc=example,dc=com
子树。
如果没有设置 target_from
或 target_to
关键字,ACI 会与任何源或目的地匹配。
2.1.8. 目标规则的高级使用 复制链接链接已复制到粘贴板!
通过组合多个关键字,您可以创建复杂的目标规则。本节提供了目标规则的高级用法示例。
2.1.8.1. 委派权限以创建和维护组 复制链接链接已复制到粘贴板!
在某些情况下,管理员希望将权限委派给其他帐户或组。通过组合目标关键字,您可以创建可解决此请求的安全访问控制指令(ACI)。
例 2.7. 委派权限以创建和维护组
要启用 uid=user,ou=People,dc=example,dc=com" 帐户,以便在 ou=groups,dc=example,dc=com 条目中创建或更新组:
为了安全起见,前面的示例添加了某些限制。uid=test,ou=People,dc=example,dc=com
用户:
-
可以创建需要包含
top
和groupOfUniqueNames
对象类的对象。 -
无法添加额外的对象类,如
帐户
。例如,这可以防止使用 Directory Server 帐户进行本地身份验证,创建具有无效用户 ID 的新用户,如root
用户的 0。
targetfilter
规则确保 ACI 条目只适用于带有 groupofuniquenames
对象类和 targetattrfilter
规则的条目,确保无法添加其他对象类。
2.1.8.2. 定位条目和属性 复制链接链接已复制到粘贴板!
目标
根据可分辨名称(DN)控制访问。但是,如果您将其与通配符和 targetattr
关键字结合使用,您可以以条目和属性为目标。
例 2.8. 定位条目和属性
要启用 uid=user,ou=People,dc=example,dc.com
用户,在 dc=example,dc=com
子树中的所有机构单元中读取和搜索组成员:
2.1.8.3. 针对与过滤器匹配的条目的某些属性 复制链接链接已复制到粘贴板!
如果您将 targetattr
和 targetfilter
关键字组合成两个目标规则,您可以以与过滤器匹配的条目中的某些属性为目标。
例 2.9. 针对与过滤器匹配的条目的某些属性
要允许 cn=Engineering Admins,dc=example,dc=com
组的成员修改所有将 department
属性设置为 Engineering
的 jpegPhoto
和 manager
属性,请输入:
2.1.8.4. 定位单个目录条目 复制链接链接已复制到粘贴板!
要以单个目录条目为目标,请组合 targetattr
和 targetfilter
关键字。
例 2.10. 定位单个目录条目
要启用 uid=user,ou=People,dc=example,dc=com 用户,在 ou=Engineering,dc=example,dc=com 条目中读和搜索 ou 和 cn 属性:
要启用前面的示例,仅以 ou=Engineering,dc=example,dc=com
条目为目标,ou=Engineering,dc=example,dc=com
中的子条目不能将 ou
属性设置为 Engineering
。
如果目录的结构发生变化,这些 ACI 可能会失败。
或者,您可以创建一个绑定规则,该规则与 bind 请求中的用户输入匹配,并带有一个存储在目标条目中的属性值。请参阅 根据值匹配定义访问权限。
2.1.9. 定义 ACI 权限 复制链接链接已复制到粘贴板!
权限规则定义与访问控制指令(ACI)关联的权限,以及是否允许或拒绝访问。
在 ACI 中,以下突出显示的部分是权限规则:
(target_rule) (version 3.0; acl "ACL_name"; permission_rule bind_rules;)
(target_rule) (version 3.0; acl "ACL_name"; permission_rule bind_rules;)
2.1.9.1. 权限规则的语法 复制链接链接已复制到粘贴板!
权限规则的一般语法是:
permission (rights)
permission (rights)
-
Permission
: 设置访问控制指令(ACI)是否允许或拒绝权限。 -
rights
:设置 ACI 允许或拒绝的权利。请参阅 权限规则中的用户权限。
例 2.11. 定义权限
要启用存储在 ou=People,dc=example,dc=com
条目中的用户搜索并显示其自己的条目中的所有属性:
2.1.9.2. 权限规则中的用户权限 复制链接链接已复制到粘贴板!
权限规则中的权限定义哪些操作被赋予或拒绝。在 ACI 中,您可以设置以下一个或多个权限:
right | Description |
---|---|
| 设置用户是否可以读取目录数据。此权限只适用于 LDAP 中的搜索操作。 |
|
通过添加、修改或删除属性来设置用户是否可以修改条目。此权限适用于 LDAP |
|
设置用户是否可以创建条目。此权限只适用于 LDAP 中的 |
|
设置用户可以删除条目。此权限只适用于 LDAP 中的 |
|
设置用户可以搜索目录数据。要查看作为搜索结果的一部分返回的数据,请分配搜索和 |
|
设置用户是否可以比较他们提供的数据与目录中存储的数据。通过 |
| 设置用户是否可以从组中添加或删除自己的可分辨名称(DN)。此右侧仅用于组管理。 |
|
设置指定的 DN 是否可以使用另一个条目的权限访问目标。 |
|
设置除 |
2.1.9.3. LDAP 操作所需的权限 复制链接链接已复制到粘贴板!
This section describes the rights you must grant to users depending on the type of LDAP operation you want to authorize them to perform.
This section describes the rights you must grant to users depending on the type of LDAP operation you want to authorize them to perform.
添加一个条目:
-
对您要添加的条目授予
add
权限。 -
为条目中的每个属性值授予
写入权限
。默认情况下授予这个右边,但可以使用targattrfilters
关键字来限制。
-
对您要添加的条目授予
删除条目:
-
对您要删除的条目授予删除权限。
-
为条目中的每个属性值授予
写入权限
。默认情况下授予这个右边,但可以使用targattrfilters
关键字来限制。
-
对您要删除的条目授予删除权限。
修改条目中的属性:
-
授予属性类型
的写入权限
。 -
授予每个属性类型值
的写入权限
。默认情况下授予这个右边,但可以使用targattrfilters
关键字来限制。
-
授予属性类型
修改条目的 RDN:
-
授予条目
的写入权限
。 -
为新 RDN 中使用的属性类型授予
写入权限
。 -
如果要授予删除旧 RDN 的权利,请授予旧 RDN 属性类型
的写入权限
。 -
对新 RDN 中使用的属性类型值授予
写入权限
。默认情况下授予这个右边,但可以使用targattrfilters
关键字来限制。
-
授予条目
比较属性值:
-
授予属性类型
比较
权限。
-
授予属性类型
搜索条目:
-
对搜索过滤器中使用的每个属性类型授予搜索权限。
-
授予条目中使用的属性类型
的读取权限
。
-
对搜索过滤器中使用的每个属性类型授予搜索权限。
2.1.10. 定义 ACI 绑定规则 复制链接链接已复制到粘贴板!
访问控制指令(ACI)中的绑定规则定义必须满足所需的绑定参数,以便目录服务器应用 ACI。例如,您可以根据以下内容设置绑定规则:
- dns
- 组成员资格或分配角色
- 条目必须绑定的位置
- 绑定过程中必须使用的身份验证类型
- 绑定发生的时间或天数
在 ACI 中,以下突出显示的部分是绑定规则:
(target_rule) (version 3.0; acl "ACL_name"; permission_rule bind_rules;)
(target_rule) (version 3.0; acl "ACL_name"; permission_rule bind_rules;)
2.1.10.1. 绑定规则的语法 复制链接链接已复制到粘贴板!
绑定规则的一般语法是:
keyword comparison_operator "expression"
keyword comparison_operator "expression"
-
关键字
:设置 bind 操作的类型。 -
comparison_operator
: Valid 值是=
和!=
,指明目标是否为表达式中指定的对象。如果关键字支持额外的比较运算符,则在对应的部分中提到了它。 -
表达式
:设置表达式,且必须用引号括起来。表达式本身取决于您使用的关键字。
2.1.10.2. 定义基于用户的访问 复制链接链接已复制到粘贴板!
userdn
关键字允许您根据一个或多个 DN 授予或拒绝访问,并使用以下语法:
userdn comparison_operator "ldap:///distinguished_name || ldap:///distinguished_name || ..."
userdn comparison_operator "ldap:///distinguished_name || ldap:///distinguished_name || ..."
将表达式中的 DN 设置为:
- DN: 请参阅使用带有 userdn 关键字的 DN。
- LDAP 过滤器: 请参阅使用带有 LDAP 过滤器的 userdn 关键字。
-
任何人
别名:请参阅 授予匿名访问。 -
所有
别名:请参阅 授予经过身份验证的用户的访问权限。 -
自我
别名: 请参阅 允许用户访问自己的条目。 -
父
别名:请参阅 为用户 的子条目设置访问权限。
不要在 LDAP URL 中指定主机名或端口号。URL 始终应用到本地服务器。
2.1.10.2.1. 使用带有 userdn 关键字的 DN 复制链接链接已复制到粘贴板!
将 userdn
关键字设置为可分辨名称(DN),将 ACI 仅应用到匹配的条目。要匹配多个条目,请在 DN 中使用 *
通配符。
将 userdn
关键字与 DN 搭配使用必须匹配以下语法:
userdn comparison_operator ldap:///distinguished_name
userdn comparison_operator ldap:///distinguished_name
例 2.12. 使用带有 userdn 关键字的 DN
要启用 uid=admin,ou=People,dc=example,dc=com
用户,读取 ou=People,dc=example,dc=com
条目中所有其他用户的 manager
属性:
2.1.10.2.2. 使用带有 LDAP 过滤器的 userdn 关键字 复制链接链接已复制到粘贴板!
如果要动态允许或拒绝用户的权限,请使用带有 LDAP 过滤器的 userdn
关键字:
userdn comparison_operator "ldap:///distinguished_name??scope?(filter)"
userdn comparison_operator "ldap:///distinguished_name??scope?(filter)"
LDAP 过滤器支持 *
通配符。
例 2.13. 使用带有 LDAP 过滤器的 userdn 关键字
要启用将 department
属性设置为 Human Resources
的用户,以更新 ou=People,dc=example,dc=com
条目中的用户的 homePostalAddress
属性:
2.1.10.2.3. 授予匿名访问权限 复制链接链接已复制到粘贴板!
在某些情况下,管理员希望配置目录中数据的匿名访问。匿名访问意味着可以通过提供以下内容绑定到目录:
- 没有绑定 DN 和密码
- 有效绑定 DN 和密码
要配置匿名访问,请在绑定 规则中使用 ldap:///
anyone 表达式和 userdn
关键字:
userdn comparison_operator "ldap:///anyone"
userdn comparison_operator "ldap:///anyone"
例 2.14. 授予匿名访问权限
要启用没有身份验证的任何人都可以读取和搜索 ou=People,dc=example,dc=com
条目中的 sn
,givenName
, 和 telephoneNumber
属性:
2.1.10.2.4. 授予对经过身份验证的用户的访问权限 复制链接链接已复制到粘贴板!
在某些情况下,管理员希望向任何能够成功绑定到目录服务器的用户授予权限,但匿名绑定除外。要配置此功能,请在绑定规则中使用 ldap:///all
表达式和 userdn
关键字:
userdn comparison_operator "ldap:///all"
userdn comparison_operator "ldap:///all"
例 2.15. 授予对经过身份验证的用户的访问权限
要启用经过身份验证的用户,将自身作为成员添加到 ou=example,ou=groups,dc=example,dc=com
组中:
2.1.10.2.5. 允许用户访问自己的条目 复制链接链接已复制到粘贴板!
要设置 ACI,允许或拒绝用户访问其自身条目,请使用带绑定规则中的 userdn
关键字的 ldap:///self
表达式:
userdn comparison_operator "ldap:///self"
userdn comparison_operator "ldap:///self"
例 2.16. 允许用户访问自己的条目
要启用 ou=People,dc=example,dc=com
条目中的用户,以更新自己的 userPassword
属性:
2.1.10.2.6. 为用户的子条目设置访问权限 复制链接链接已复制到粘贴板!
要指定用户只有在其绑定 DN 是目标条目的父项时才会被赋予或拒绝访问,请在绑定规则中使用带有 userdn
关键字的 self:///parent
表达式:
userdn comparison_operator "ldap:///parent"
userdn comparison_operator "ldap:///parent"
例 2.17. 为用户的子条目设置访问权限
要启用 cn=user,ou=People,dc=example,dc=com
用户,以更新其自身子项目的 manager
属性,如 cn=example,cn=user,ou=People,dc=example,dc=com
:
2.1.10.3. 定义基于组的访问 复制链接链接已复制到粘贴板!
基于组的访问控制指令(ACI)允许您通过向组中添加或删除用户来管理访问权限。要配置基于组成员资格的 ACI,请使用 groupdn
关键字。如果用户是指定组或多个组的成员,ACI 会匹配。
使用 groupdn
关键字时,Directory 服务器根据以下属性验证组成员资格:
- 成员
- uniqueMember
- memberURL
- memberCertificateDescription
使用 groupdn
关键字绑定规则,语法如下:
groupdn comparison_operator "ldap:///distinguished_name || ldap:///distinguished_name || ..."
groupdn comparison_operator "ldap:///distinguished_name || ldap:///distinguished_name || ..."
将表达式中的可分辨名称(DN)设置为:
- DN。请参阅使用带有 groupdn 关键字的 DN。
- LDAP 过滤器。请参阅使用带有 LDAP 过滤器的 groupdn 关键字
如果您在一个绑定规则中设置了多个 DN,如果经过身份验证的用户是这些组的成员,则目录服务器会应用 ACI。要将用户设置为多个组的成员,请使用多个 groupdn
关键字,并使用布尔值和运算符组合它们。详情请参阅 使用布尔值 Operator 组合绑定规则。
不要在 LDAP URL 中指定主机名或端口号。URL 始终应用到本地服务器。
2.1.10.3.1. 使用带有 groupdn 关键字的 DN 复制链接链接已复制到粘贴板!
要将 ACI 应用到组的成员,请将 groupdn
关键字设置为组的 DN。
将 groupdn
关键字设置为 DN 使用以下语法:
groupdn comparison_operator ldap:///distinguished_name
groupdn comparison_operator ldap:///distinguished_name
例 2.18. 使用带有 groupdn 关键字的 DN
要启用 cn=example,ou=Groups,dc=example,dc=com
组的成员搜索和读取 ou=People,dc=example,dc=com
中条目的 manager 属性:
2.1.10.3.2. 使用带有 LDAP 过滤器的 groupdn 关键字 复制链接链接已复制到粘贴板!
使用带有 groupdn
关键字的 LDAP 过滤器,您可以定义经过身份验证的用户必须至少是过滤器搜索返回的其中一个组的成员,以匹配 ACI。
带有 LDAP 过滤器的 groupdn
关键字使用以下语法:
groupdn comparison_operator "ldap:///distinguished_name??scope?(filter)"
groupdn comparison_operator "ldap:///distinguished_name??scope?(filter)"
LDAP 过滤器支持 *
通配符。
例 2.19. 使用带有 LDAP 过滤器的 groupdn 关键字
要在 dc=example,dc=com
和 subtrees 中启用组的成员,其 manager
属性设为 example
,更新 ou=People,dc=example,dc=com
中条目的 homePostalAddress
:
2.1.10.4. 根据值匹配定义访问 复制链接链接已复制到粘贴板!
在绑定规则中使用 userattr
关键字,指定用于绑定到目录和目标条目的条目的哪个属性必须匹配。
userattr
关键字使用以下语法:
userattr comparison_operator "attribute_name#bind_type_or_attribute_value
userattr comparison_operator "attribute_name#bind_type_or_attribute_value
如需了解更多详细信息,请参阅:
默认情况下,Directory 服务器评估创建它们的条目的访问权限。但是,为了防止同一级别上的用户对象,在使用 userattr
关键字时,Directory 服务器不会向设置访问控制指令(ACI)的条目授予 添加权限
。要配置此行为,请将 userattr
关键字与 parent
关键字结合使用,并在级别 0 上授予权限。
有关继承的详情,请参阅根据匹配值定义访问权限。
2.1.10.4.1. 使用 USERDN 绑定类型 复制链接链接已复制到粘贴板!
当绑定用户区分名称(DN)与属性中存储的 DN 匹配时,要应用 ACI,请使用 USERDN
绑定类型。
带有 USERDN
绑定类型的 userattr
关键字需要以下语法:
userattr comparison_operator "attribute_name#USERDN"
userattr comparison_operator "attribute_name#USERDN"
例 2.20. 使用 USERDN 绑定类型
要为管理器授予其自己员工的 telephoneNumber
属性的所有权限:
如果对 ou=People,dc=example,dc=com
中的条目执行操作的用户的 DN 与此条目的 manager
属性中存储的 DN 匹配,则之前的 ACI 会评估为 true。
2.1.10.4.2. 使用 GROUPDN 绑定类型 复制链接链接已复制到粘贴板!
当绑定用户 DN 是属性中设置的组的成员时,要应用 ACI,请使用 GROUPDN
绑定类型。
带有 GROUPDN
绑定类型的 userattr
关键字需要以下语法:
userattr comparison_operator "attribute_name#GROUPDN"
userattr comparison_operator "attribute_name#GROUPDN"
例 2.21. 使用 GROUPDN 绑定类型
要授予用户删除他们在 ou=Social Committee,ou=Groups,dc=example,dc=com
条目下拥有的组条目的权限:
如果执行操作的用户的 DN 是 owner
属性中指定的组的成员,则之前的 ACI 被评估为 true。
指定组可以是动态组,并且组的 DN 可以在数据库中的任何后缀下。但是,服务器对此类 ACI 的评估非常高。
如果您使用与目标条目相同的静态组,请使用以下表达式来提高性能:
userattr comparison_operator "ldap:///distinguished_name?attribute_name#GROUPDN"
userattr comparison_operator "ldap:///distinguished_name?attribute_name#GROUPDN"
2.1.10.4.3. 使用 ROLEDN 绑定类型 复制链接链接已复制到粘贴板!
要在绑定用户属于属性中指定的角色时应用 ACI,请使用 ROLEDN
绑定类型。
带有 ROLEDN
绑定类型的 userattr
关键字需要以下语法:
userattr comparison_operator "attribute_name#ROLEDN"
userattr comparison_operator "attribute_name#ROLEDN"
例 2.22. 使用 ROLEDN 绑定类型
要启用带有 cn=Administrators,dc=example,dc=com
角色的用户搜索和读取 ou=People,dc=example,dc=com
中的条目的 manager
属性:
指定的角色可以在数据库中的任何后缀下。如果您也使用过滤的角色,则这类 ACI 的评估会使用服务器上的大量资源。
如果您使用静态角色定义,且角色条目与目标条目的后缀相同,请使用以下表达式来提高性能:
2.1.10.4.4. 使用 SELFDN 绑定类型 复制链接链接已复制到粘贴板!
SELFDN
绑定类型允许您在条目的单值属性中设置绑定用户的 DN 时授予权限。
带有 SELFDN
绑定类型的 userattr
关键字需要以下语法:
userattr comparison_operator "attribute_name#SELFDN"
userattr comparison_operator "attribute_name#SELFDN"
例 2.23. 使用 SELFDN 绑定类型
要启用用户来添加 ipatokenuniqueid swig,cn=otp,dc=example,dc=com
条目,其在 ipatokenOwner
属性中设置绑定用户的 DN:
2.1.10.4.5. 使用 LDAPURL 绑定类型 复制链接链接已复制到粘贴板!
要在绑定 DN 与目标条目的属性中指定的过滤器匹配时应用 ACL,请使用 LDAPURL
绑定类型。
带有 LDAPURL
绑定类型的 userattr
关键字需要以下语法:
userattr comparison_operator "attribute_name#LDAPURL"
userattr comparison_operator "attribute_name#LDAPURL"
例 2.24. 使用 LDAPURL 绑定类型
要为包含 aciurl
属性设置为 ldap:///ou=People,dc=example,dc=com??one? (uid=user*)
的用户对象授予读和搜索权限:
2.1.10.4.6. 使用带有继承的 userattr 关键字 复制链接链接已复制到粘贴板!
当您使用 userattr
关键字将用来与目标条目绑定的条目时,ACI 仅适用于指定的目标,而不是它下面的条目。在某些情况下,管理员希望在目标条目下扩展 ACI 的不同级别的应用程序。这可以通过使用 parent
关键字并指定应继承 ACI 的目标下的级别数量。
将 userattr
关键字与 parent
关键字搭配使用时,语法如下:
userattr comparison_operator "parent[inheritance_level].attribute_name#bind_type_or_attribute_value
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"
userattr = "parent[0,1].manager#USERDN"
如果绑定 DN 与目标条目的 manager 属性匹配,则此绑定规则评估为 true。当将绑定规则评估为 true 时授予的权限适用于目标条目,并立即应用到其下的所有条目。
例 2.25. 使用带有继承的 userattr 关键字
要让用户读取和搜索 cn=Profiles,dc=example,dc=com
条目,其中用户的 DN 在 owner
属性中设置,以及第一个包括 cn=mail,cn=Profiles,dc=example,dc=com
和 cn=news,cn=Profiles,dc=example,dc=com
的子条目级别:
2.1.10.5. 定义来自特定 IP 地址或范围的访问 复制链接链接已复制到粘贴板!
绑定规则中的 ip
关键字可让您从特定 IP 地址或 IP 地址范围授予或拒绝访问。
使用 ip
关键字绑定规则使用以下语法:
ip comparison_operator "IP_address_or_range"
ip comparison_operator "IP_address_or_range"
例 2.26. 在绑定规则中使用 IPv4 地址范围
拒绝从 192.0.2.0/24
网络访问 dc=example,dc=com
条目:
例 2.27. 在绑定规则中使用 IPv6 地址范围
拒绝从 2001:db8::/64
网络访问 dc=example,dc=com
条目:
2.1.10.6. 定义从特定主机或域的访问 复制链接链接已复制到粘贴板!
绑定规则中的 dns
关键字可让您向特定主机或域授予或拒绝访问。
如果目录服务器无法使用 DNS 将连接 IP 地址解析为其完全限定域名(FQDN),服务器不会使用这个客户端的 dns
绑定规则应用访问控制指令(ACI)。
如果无法使用 DNS 解析客户端 IP 地址,请使用 ip
关键字和 IP 地址。请参阅 定义来自特定 IP 地址或范围的访问。
使用 dns
关键字绑定规则使用以下语法:
dns comparison_operator "host_name_or_domain_name"
dns comparison_operator "host_name_or_domain_name"
例 2.28. 定义从特定主机的访问
拒绝从 client.example.com 主机访问 dc=example,dc=com 条目:
例 2.29. 定义来自特定域的访问
拒绝从 example.com 域中的所有主机访问 dc=example,dc=com 条目:
2.1.10.7. 在连接中需要一定级别的安全性 复制链接链接已复制到粘贴板!
连接的安全性由其安全强度因子(SSF)决定,它设定了处理操作所需的最小关键强度。在绑定规则中使用 ssf
关键字,您可以设置连接必须使用一定级别的安全性。这可让您强制操作(如密码更改)通过加密连接来执行。
任何操作的 SSF 的值是 TLS 连接和 SASL 绑定之间的值更高的值。这意味着,如果服务器被配置为通过 TLS 运行,并且为 SASL/GSSAPI 配置复制协议,则操作的 SSF 都会更安全。
使用 ssf
关键字绑定规则,语法如下:
ssf comparison_operator key_strength
ssf comparison_operator key_strength
您可以使用以下比较运算符:
-
=
(等于) -
!
(不等于) -
&
lt; (无) -
>
; (greater than) -
5-6
(无小于或等于) -
>
;= (同意或等于)
如果将 key_strength
参数设置为 0,
则 LDAP 操作不需要安全操作。
例 2.30. 在连接中需要一定级别的安全性
要在 dc=example,dc=com 条目中配置该用户,只能在 SSF 为 128 或更高版本时更新其 userPassword 属性:
2.1.10.8. 在周的一天定义访问 复制链接链接已复制到粘贴板!
绑定规则中的 dayofweek
关键字可让您根据星期几来授予或拒绝访问。
目录服务器使用服务器上的时间评估访问控制指令(ACI),而不是客户端上的时间。
使用 dayofweek
关键字绑定规则,语法如下:
dayofweek comparison_operator "comma-separated_list_of_days"
dayofweek comparison_operator "comma-separated_list_of_days"
例 2.31. 在周的指定天授予访问权限
要拒绝访问 uid=user,ou=People,dc=example,dc=com
用户条目,以绑定到 Saturdays 和 Sundays 上的服务器:
2.1.10.9. 在一天的特定时间定义访问 复制链接链接已复制到粘贴板!
绑定规则中的 timeofday
关键字可让您根据当天的时间授予或拒绝访问。
目录服务器使用服务器上的时间评估访问控制指令(ACI),而不是客户端上的时间。
使用 timeofday
关键字绑定规则,语法如下:
timeofday comparison_operator "time"
timeofday comparison_operator "time"
您可以使用以下比较运算符:
-
=
(等于) -
!
(不等于) -
&
lt; (无) -
>
; (greater than) -
5-6
(无小于或等于) -
>
;= (同意或等于)
timeofday
关键字要求您以 24 小时格式指定时间。
例 2.32. 在一天的特定时间定义访问
要拒绝访问 uid=user,ou=People,dc=example,dc=com
用户条目,来绑定到 6pm 到 0am 之间的服务器:
2.1.10.10. 根据身份验证方法定义访问权限 复制链接链接已复制到粘贴板!
绑定规则中的 authmethod
关键字设置在连接到服务器时客户端必须使用什么身份验证方法应用访问控制指令(ACI)。
使用 authmethod
关键字绑定规则使用以下语法:
authmethod comparison_operator "authentication_method"
authmethod comparison_operator "authentication_method"
您可以设置以下验证方法:
-
none
: 不需要身份验证并代表匿名访问。这是默认值。 -
简单
:客户端必须提供要绑定到目录的用户名和密码。 -
SSL
:客户端必须使用数据库、智能卡或其他设备的 TLS 证书绑定到目录。 -
SASL
:客户端必须通过简单身份验证和安全层(SASL)连接绑定到目录。当您在绑定规则中使用此验证方法时,还要指定 SASL 机制,如EXTERNAL
。
例 2.33. 仅为使用 EXTERNAL SASL 身份验证方法的连接启用访问
如果连接没有使用基于证书的身份验证方法或 SASL,则拒绝对服务器的访问:
2.1.10.11. 根据角色定义访问权限 复制链接链接已复制到粘贴板!
绑定规则中的 roledn
关键字可让您为具有一个或多个角色集的用户授予或拒绝访问。
红帽建议使用组而不是角色。
使用 roledn
关键字绑定规则使用以下语法:
roledn comparison_operator "ldap:///distinguished_name || ldap:///distinguished_name || ..."
roledn comparison_operator "ldap:///distinguished_name || ldap:///distinguished_name || ..."
如果可分辨名称(DN)包含逗号,请使用反斜杠转义逗号。
例 2.34. 根据角色定义访问权限
要启用具有 nsRole
属性中设置的 cn=Human Resources,ou=People,dc=example,dc=com
角色的用户,搜索并读取 ou=People,dc=example,dc=com
中条目的 manager
属性:
2.1.10.12. 使用布尔值运算符组合绑定规则 复制链接链接已复制到粘贴板!
在创建复杂的绑定规则时,可以使用 AND
、OR
和 NOT
布尔值运算符组合多个关键字。
绑定规则与布尔值运算符具有以下语法:
bind_rule_1 boolean_operator bind_rule_2...
bind_rule_1 boolean_operator bind_rule_2...
例 2.35. 使用布尔值运算符组合绑定规则
要配置属于 cn=Administrators,ou=Groups,dc=example,com
和 cn=Operators,ou=Groups,dc=example,com] 组的用户,可以 'read ,
search
, add ,add
,update
, 和 delete
entries in ou=People,dc=example,dc=com
:
目录服务器如何评估布尔值运算符
目录服务器使用以下规则评估布尔值运算符:
所有表达式从左到右。
在以下示例中,首先评估
bind_rule_1
:(bind_rule_1) OR (bind_rule_2)
(bind_rule_1) OR (bind_rule_2)
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 从内部到最外的父表达式,首先是.
在以下示例中,首先评估
bind_rule_2
和bind_rule_3
秒:(bind_rule_1) OR ((bind_rule_2) AND (bind_rule_3))
(bind_rule_1) OR ((bind_rule_2) AND (bind_rule_3))
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 不在
AND
或OR
运算符之前。在以下示例中,首先评估 bind_rule_2 :
(bind_rule_1) AND NOT (bind_rule_2)
(bind_rule_1) AND NOT (bind_rule_2)
Copy to Clipboard Copied! Toggle word wrap Toggle overflow AND
和OR
运算符没有优先级顺序。