上一页      目录     索引      文档主页      下一页     
iPlanet Directory Server 5.1 管理员指南



第 6 章   管理访问控制


iPlanet Directory Server 可用于控制对目录的访问。本章将介绍访问控制机制。

该部分包含下列主题:

为充分利用访问控制机制的功能和灵活性,在目录部署的规划阶段就应将访问控制战略作为整体安全策略不可分割的一部分进行定义。有关规划访问控制战略的技巧,请参阅 iPlanet Directory Server 部署指南



访问控制原则



定义访问权的机制称为访问控制。服务器接收到请求时,会利用用户在绑定操作中提供的身份验证信息及服务器中定义的访问控制指令 (ACI) 来允许或拒绝访问目录信息。服务器可以允许或拒绝诸如读、写、搜索及比较等权限。授予用户的权限级别可能与所提供的身份验证信息有关。

使用访问控制可以控制对整个目录、目录的子树、目录中特定条目(包括定义配置任务的条目)或特定条目属性集的访问权。您可以设置特定用户、所有属于特定组或角色的用户或所有目录用户的权限。最后,您还可以定义对特定位置(例如 IP 地址或 DNS 名称)的访问权。


ACI 结构

与条目属性一样,访问控制指令存储在目录中。aci 属性是一种操作性属性。它可以用于目录的各个条目上,而不管是否为该条目的对象类所定义。当接收到来自客户机的 LDAP 请求时,目录服务器将使用该属性来评估应允许或拒绝哪些权限。如果有特别请求,则在 ldapsearch 操作中返回 aci 属性。

ACI 语句的三个主要部分是:

  • 目标

  • 权限

  • 绑定规则

ACI 的权限和绑定规则部分是成对设置的,也称为“访问控制规则”(ACR)。是否授予指定的权限与伴随的规则是否被评估为真有关。


ACI 布置

如果包含 ACI 的条目中没有任何子条目,则 ACI 将仅适用于该条目。如果该条目中有子条目,则 ACI 将同时适用于该条目及下属的所有条目。因此,在评估对给定条目的访问权时,服务器将在所请求的访问权、目录后缀及条目自身的 ACI 之间核查各个条目的 ACI。

aci 属性为多值属性,即可以为同一条目或子树定义多个 ACI。

您可以在某个条目上创建不直接适用于该条目,但适用于其下属子树中部分或全部条目的 ACI。这样做的好处在于:可以在目录树的上层放置通用的 ACI,从而能有效应用于很可能位于目录树下层的条目。例如,可以在 organizationalUnit 条目或 locality 条目级别上创建以包含 inetorgperson 对象类的条目为目标的 ACI。

利用该功能可以在上层分支点上放置通用的规则,从而使目录树中的 ACI 数达到最小。要限制更为具体的规则范围,应将其尽可能放到接近叶条目的位置处。



注意 放在根 DSE 条目上的 ACI 仅适用于该条目。




ACI 评估

评估特定条目的访问权时,服务器会编辑该条目自身及至目录服务器中所存顶级条目内的 ACI 列表。在评估期间,服务器以这种顺序处理 ACI。ACI 的评估是跨特定目录服务器的所有数据库而进行的,但并不跨目录服务器。

在 ACI 之间适用的优先规则为:拒绝访问的 ACI 优先于允许访问的 ACI。允许访问的 ACI 之间遵循组合原则,因此即使服务器首先处理最靠近目标条目的 ACI,操作过程中也没有优先性。

例如,如果目录的根级别上拒绝写权限,则所有用户都将无法向目录中写入,而不管授予这些用户的具体权限如何。要向目录授予特定用户的写入权限,则必须限定原拒绝写入权限的范围,从而使其不包括该用户。


ACI 限制

创建目录服务的访问控制策略时,需要注意下列限制条件:

  • 如果目录树是利用链接功能在多个服务器上分布的,则有些限制将适用于访问控制语句中所用的关键字:

    • 与组条目(groupdn 关键字)有关的 ACI 必须位于该组条目所在的同一服务器上。如果组为动态组,则所有组成员也须在服务器上具有相应的条目。如果组为静态组,则成员条目可以位于远程服务器上。

    • 与角色定义(roledn 关键字)有关的 ACI 必须位于该角色定义条目所在的同一服务器上。计划分配该角色的每个条目也必须位于同一服务器上。

    但可以将目标条目中存储的值与绑定用户条目中存储的值进行值的匹配(例如使用 userattr 关键字)。即使绑定用户在持有 ACI 的服务器上没有条目,系统也会进行正常的权限评估。

    有关如何链接访问控制评估的详细信息,请参阅第 108 页上的“数据库链接和访问控制评估”

  • 由 CoS 生成的属性无法用于所有 ACI 关键字。尤其不应将 CoS 生成的属性用于 userattr 关键字,因为访问控制规则不起作用。有关该关键字的详细信息,请参阅“使用 userattr 关键字”。有关 CoS 的详细信息,请参阅第 5 章“高级条目管理”。

  • 访问控制规则的评估始终在本地服务器上进行。因此,没有必要在 ACI 关键字中所用的 LDAP URL 中指定服务器的主机名或端口号。即使指定,系统也不会考虑 LDAP URL。有关 LDAP URL 的详细信息,请参阅附录 C“LDAP URL”

  • 授予代理权限时,不能授予用户对代理的目录管理员权限,也不能将代理权限授予目录管理员。



默认 ACI

安装目录服务器时,下列默认 ACI 将应用于 userRoot 数据库中所存储的目录信息:

  • 用户可以修改自己在目录中的条目,但不能删除。其中的 acinsroledn 属性是不能修改的。

  • 用户可以匿名访问目录,以执行搜索、比较和读取操作。

  • 管理员(默认为 uid=admin,ou=Administrators, ou=TopologyManagement,o=NetscapeRoot)具有除代理权限之外的所有权限。

  • “配置管理员”组的所有成员都具有除代理权限之外的所有权限。

  • “目录管理员”组的所有成员都具有除代理权限之外的所有权限。

  • SIE 组。

在目录中创建新数据库时,顶级条目具有上面所列的默认 ACI。

NetscapeRoot 子树具有自己的缺省 ACI 集:

  • 在 NetscapeRoot 子树上,“配置管理员”组的所有成员都具有除代理权限之外的所有权限。

  • 用户可以匿名访问 NetscapeRoot 子树,以执行搜索和读取操作。

  • 组扩充。

  • 所有通过身份验证的用户都对标识管理服务器的配置属性具有搜索、比较和读取的权限。

以下各部分将介绍如何修改这些缺省设置以满足您所在机构的实际需要。



手动创建 ACI



利用 LDIF 语句可以手动创建访问控制指令,然后可使用 ldapmodify 实用程序将其添加到目录树中。下列部分将详细介绍如何创建 LDIF 语句。



提示 LDIF ACI 语句可能非常复杂。但如果是为大量目录项设置访问控制,则使用 LDIF 相对于使用控制台在节省时间方面更具有优越性。

但为了熟悉 LDIF ACI 语句的用法,您可以使用 iPlanet Directory Server Console 来设置 ACI,然后单击访问控制编辑器上的“手动编辑”按钮。这样会显示正确的 LDIF 语法。如果操作系统允许,您甚至可以将 LDIF 从访问控制编辑器复制并粘贴到 LDIF 文件中。




ACI 语法

aci 属性使用下列语法:

aci: (target)(version 3.0;acl "name";permission bind_rules;)

其中

  • target 指定要对其访问权加以控制的目标,包括条目、属性或条目和属性的集合等。目标可以是特异名称、一个或多个属性,或者是单个 LDAP 过滤器。目标是 ACI 的可选组件。

  • version 3.0 为必需的字符串,用于标识 ACI 的版本。

  • "name" 是 ACI 的名称。该名称可以是任何标识 ACI 的字符串。ACI 名称为必需项。

  • permission 专门说明所允许或拒绝的权限(例如读取或搜索权)。

  • bind_rules 指定用户为获取访问权而必须提供的凭证和绑定参数。绑定规则也可以用于专门拒绝某些用户或用户组的访问权。

每个目标可以有多个“权限-绑定”规则对。这样可以有效地为给定的目标设置多种访问控制。例如:

target(permission bind_rule)(permission bind_rule)...

如果一个 ACI 语句中有多个 ACR,则语法格式为:

aci: (target)(version 3.0;acl "name"; permission bind_rule;
 permission bind_rule; ... permission bind_rule;)


ACI 示例

下面是一个完整的 LDIF ACI 示例:

aci: (target="ldap:///uid=bjensen,dc=siroe,dc=com")(targetattr=*)
(version 3.0; acl "aci1"; allow (write) userdn="ldap:///self";)

本例中,ACI 声明用户 bjensen 有权修改其目录项中的所有属性。

下列部分将详细介绍 ACI 各部分的语法。


定义目标

目标标识 ACI 所应用的对象。如果未指定目标,ACI 将应用于包含该 aci 属性的条目及其下面的条目。

目标可以是:

目标的常规语法是:

(keyword = "expression")

(keyword != "expression")

其中:

    • keyword 指示目标的类型

    • 等于号 (=) 指示目标是 expression 中指定的对象,而不等于号 (!=) 则指示目标不是 expression 中指定的对象。

    • expression 是用于确定目标的表达式

expression 上的引号 (" ") 为必需项。expression 的形式与提供的 keyword 有关。

下表列出了各个关键字及相关的表达式:


表 6-1    LDIF 目标关键字

关键字

有效的表达式

是否允许使用
通配符?

target  

ldap:///distinguished_name  

允许  

targetattr  

attribute  

允许  

targetfilter  

LDAP_filter  

允许  

targattrfilters  

LDAP_operation:LDAP_filter  

允许  

无论何时都必须记住:在条目中放置 ACI 时,如果该条目不是叶条目,则 ACI 也将适用于其下面的所有条目。例如,如果条目的目标为 ou=accounting,dc=siroe,dc=com,则所设置的权限将应用于 siroe.com 目录树 accounting 分支中的所有条目。然而,它们不适用于 uid=sarette,ou=people,dc=siroe,dc=com 条目,因为该条目并不位于 accounting 目录树的下面。


以目录项为目标

要将目录项(及下面的条目)作为目标,则必须使用 target 关键字。

target 关键字可以接受下列格式的值:

target="ldap:///distinguished_name"

它标识访问控制规则所应用的条目的特异名称。例如:

(target = "ldap:///uid=bjensen,dc=siroe,dc=com")



注意 如果应用访问控制的条目的 DN 中包含逗号,则必须用单个反斜杠 (\) 对逗号进行转义。例如:

(target="ldap:///uid=lfuentes,o=siroe.com
Bolivia\, S.A.")



利用 target 关键字将特异名称作为目标时,也可以使用通配符。通配符表示所有字符、字符串或子串都与该通配符匹配。模式匹配的基础是用通配符指定其它所有字符串。

以下是合法的通配符用法示例:

  • (target="ldap:///uid=*,dc=siroe,dc=com")

    匹配整个 siroe.com 目录树中条目的 RDN 中有 uid 属性的所有条目。

  • (target="ldap:///uid=*Anderson,dc=siroe,dc=com")

    匹配 siroe.com 节点下 uid 属性以 Anderson 结尾的所有条目。

  • (target="ldap:///*Anderson,dc=siroe,dc=com")

    匹配 siroe.com 节点下条目中的 RDN 以 Anderson 结尾的所有条目。

因此,通配符可替代部分 DN。例如,uid=andy*,dc=siroe,dc=com 以整个 siroe.com 目录树下具有相应的 uid 属性的所有目录项为目标,而非只是 dc=siroe,dc=com 节点下的项。该目标将与以下两个表达式都匹配:

uid=andy,ou=eng,dc=siroe,dc=com
uid=andy,ou=marketing,dc=siroe,dc=com

允许使用多个通配符,例如 uid=*,ou=*,dc=siroe,dc=com。该示例匹配 siroe.com 目录树下其特异名称中包含 uidou 属性的所有条目。因此,以下条目匹配:

uid=fchen,ou=Engineering,dc=siroe,dc=com
uid=claire,ou=Engineering,ou=people,dc=siroe,dc=com

但以下条目不匹配:

uid=bjensen,dc=siroe,dc=com
ou=Engineering,dc=siroe,dc=com



注意 特异名称的后缀部分不能使用通配符。即:如果目录使用后缀 c=USc=GB,则不能使用下列目标来指代这两个后缀:

(target="ldap:///dc=siroe,c=*")

也不能使用诸如 uid=bjensen,dc=*.com 等目标。




以属性为目标

除了以目录项为目标外,还能以目标条目中所含的一个或多个属性为目标。这在您想拒绝或允许对条目部分信息的访问的情况下非常有用。例如,可以允许仅能访问给定条目的通用名、姓氏和电话号码等属性。或者,也可拒绝访问敏感信息(例如口令)。

您可以指定目标等于或不等于特定的属性。所提供的属性无需在模式中定义。如果不进行模式检查,就可能会在初次设置目录服务时即实施访问控制策略,即使所创建的 ACL 并不在当前目录内容中应用。

要以属性为目标,请使用 targetattr 关键字并指定属性名称。targetattr 关键字使用下列语法:

(targetattr = "attribute")

利用下列语法结构下的 targetattr 关键字可以将目标指向多个属性:

(targetattr = "attribute1 || attribute2 ... || attributen")

其中:attribute 是要作为目标的属性的名称。

例如,要以条目的通用名、姓氏及 uid 属性为目标,则使用:

(targetattr = "cn || sn || uid")

targetattr 关键字中指定的属性将应用于作为 ACI 目标的条目及其下面的所有条目。即:如果以条目 uid=bjensen,ou=Marketing,dc=siroe,dc=com 上的口令属性为目标,则受 ACI 影响的将只有 bjensen 条目上的口令属性,因为该条目为叶条目。

但如果以目录树的分支点 ou=Marketing,dc=siroe,dc=com 为目标,则 ACI 将影响该分支点下包含口令属性的所有条目。

作为目标的属性包括已命名属性的所有子类型。例如,(targetattr = "locality") 还将以 locality;fr 为目标。也可以专门以子类型为目标,例如 (targetattr = "locality;fr;quebec")。


同时以条目和属性为目标

默认情况下,作为包含 targetattr 关键字的 ACI 目标的条目就是放置 ACI 的条目。即:如果将 ACI

aci: (targetattr = "uid")(access_control_rules;)

放到 ou=Marketing, dc=siroe,dc=com 条目上,则 ACI 将应用于整个 Marketing 子树。但也可以利用 target 关键字明确指定目标,如下所示:

aci: (target="ldap:///ou=Marketing, dc=siroe,dc=com")
(targetattr="uid") (access_control_rules;)

指定 targettargetattr 关键字的顺序并不重要。


使用 LDAP 过滤器确定条目或属性目标

使用 LDAP 过滤器可以将符合一定标准的一组条目作为目标。为此,需将 targetfilter 关键字与 LDAP 过滤器配合使用。

targetfilter 关键字的语法是:

(targetfilter = "LDAP_filter")

其中:LDAP_filter 是一个标准 LDAP 搜索过滤器。有关过滤器语法的详细信息,请参阅第 501 页上的“LDAP 搜索过滤器”

例如,假设代表员工或承包人的所有条目都有一个薪酬状况和一个表示工作小时数的属性(全职岗位工作小时数的百分比)。要以代表承包人或兼职员工的所有条目为目标,可以使用下列过滤器:

(targetfilter = "(|(employment=contractor)(fulltime<=99))")



注意 描述国际化值匹配规则的过滤器语法在 ACI 中不被支持。例如,以下目标过滤器无效:

(targetfilter = "(locality:fr:=<= Quebec)")



目标过滤器将选择全部条目作为 ACI 的目标。通过建立 targetfiltertargetattr 关键字的关联关系,可以创建应用于目标条目属性子集的 ACI。

下列 LDIF 示例允许工程管理组的成员修改 Engineering 业务类别中所有条目的 departmentNumbermanager 属性。本例中使用 LDAP 过滤器选择将具有 businessCategory 属性的所有条目均设置为 Engineering

dn: dc=siroe,dc=com
objectClass: top
objectClass: organization
aci: (targetattr="departmentNumber || manager")
(targetfilter="(businessCategory=Engineering)")
(version 3.0; acl "eng-admins-write"; allow (write)
groupdn ="ldap:///cn=Engineering Admins, dc=siroe,dc=com";)



提示 尽管在以目录中分布的条目和属性为目标时使用 LDAP 过滤器较为有用,但有时结果却不可预测,这是因为过滤器不会直接命名访问权受到监管的对象。添加或删除属性时,作为过滤后的 ACI 的目标条目组可能会发生变化。因此,如果在 ACI 中使用 LDAP 过滤器,则应核查作为目标的条目和属性是否正确,方法是在 ldapsearch 操作中使用同一过滤器。




使用 LDAP 过滤器确定属性值目标

可以使用访问控制来指定以特定的属性值为目标。这意味着如果某个属性的值满足 ACI 中定义的标准,则可以对该属性授予或拒绝权限。以属性值为基础而授予或拒绝访问权的 ACI 称为基于值的 ACI。

例如,可以向您所属机构中的所有用户授予修改各自条目中 nsRoleDN 属性的权限。但是,您可能还希望确保他们不会授予自身诸如“顶级管理员”等主要角色。此时,可以使用 LDAP 过滤器来检查属性值上的条件是否得到满足。

要创建基于值的 ACI,则必须使用 targattrfilters 关键字,其语法为:

(targattrfilters="add=attr1:F1 && attr2:F2... && attrn:Fn,
                  del=attr1:F1 && attr2:F2 ... && attrn:Fn")

其中:

    • add 代表创建属性的操作。

    • del 代表删除属性的操作。

    • attrx 代表目标属性。

    • Fn 代表仅应用于关联属性的过滤器。

创建条目时,如果过滤器应用于此新条目的属性,则该属性的各个实例都必须满足该过滤器。删除条目时,如果过滤器应用于此条目的属性,则该属性的各个实例也都必须满足该过滤器。

修改条目时,如果是添加属性,则必须满足应用于该属性的添加过滤器;如果是删除属性,则必须满足应用于该属性的删除过滤器。如果属性的各个值已在要替换的条目中存在,则必须同时满足添加和删除过滤器。

例如,请考虑下列属性过滤器:

(targattrfilters="add=nsroleDN:(!(nsRoleDN=cn=superAdmin)) && telephoneNumber:(telephoneNumber=123*)")

该过滤器可用于允许用户向自己的条目中添加任何角色(nsRoleDN 属性),但 superAdmin 角色除外。它同时还允许用户添加带有 123 前缀的电话号码。



注意 从服务器控制台无法创建基于值的 ACI。




以单个目录项为目标

以单个目录项为目标并非简单明了,因为它违反了访问控制机制的设计原则。但可以通过下列方式来实现:

  • 创建绑定规则,使绑定请求中的用户输入与目标条目中所存储的属性值相匹配。有关详细信息,请参阅“基于值匹配定义访问权限”

  • 使用 targetattrtargetfilter 关键字

可以使用 targetattr 关键字来指定仅在目标条目中存在,而不在目标条目下面任何条目中存在的属性。例如,如果想将目标确定为 ou=people,dc=siroe,dc=com,但该节点下未定义任何组织单元 (ou),则可以指定 ACI 包含:

targetattr=ou

更为安全的方法是使用 targetfilter 关键字并明确指定只在该条目中存在的属性值。例如,目录服务器安装期间将创建以下 ACI:

aci: (targetattr="*")(targetfilter=(o=NetscapeRoot))(version 3.0;
acl "Default anonymous access"; allow (read, search)
userdn="ldap:///anyone";)

该 ACI 只能应用于 o=NetscapeRoot 条目。

这种方法的危险在于:目录树在将来可能会发生更改,因此必须要记住修改此 ACI。


定义权限

权限指定允许或拒绝的访问类型。您可以允许在目录中执行特定的操作,也可以拒绝特定的操作权限。可分配的各种操作称为权限

设置权限涉及两部分:

  • 允许或拒绝访问

  • 分配权限


允许或拒绝访问

您可以明确地允许或拒绝对目录树的访问权限。有关何时允许、何时拒绝访问的详细指导,请参阅 iPlanet Directory Server 部署指南



注意 从服务器控制台无法明确拒绝访问,而只能授予权限。




分配权限

权限详细说明了用户所能对目录数据执行的具体操作。可以允许或拒绝所有权限,也可以分配下列一个或多个权限:

Read。 读取权限,指示用户是否能读取目录数据。该权限仅适用于搜索操作。

Write。 写入权限,指示用户是否能修改条目,即添加、修改或删除属性。该权限适用于修改和 modrdn 操作。

Add。 添加权限,指示用户是否能创建条目。该权限仅适用于添加操作。

Delete。 删除权限,指示用户是否能删除条目。该权限仅适用于删除操作。

Search。 搜索权限,指示用户是否能搜索目录数据。用户必须具有搜索和读取权限才能查看搜索结果所返回的数据。该权限仅适用于搜索操作。

Compare。 比较权限,指示用户是否能将所提供的数据与目录中所存储的数据进行比较。通过比较权限,目录可以返回有关查询响应成功或失败的信息,但用户却无法看到条目或属性的值。该权限仅适用于比较操作。

Selfwrite。 自写权限,指示用户是否能针对组添加或删除自己的 DN。该权限仅适用于组管理。自写权限用于代理验证:它授予向组条目中添加或删除代理 DN(不是绑定用户的 DN) 的权限。

Proxy。 代理权限,指示指定的 DN 是否能用另一个条目的权限来访问目标。您可以用目录中除目录管理员 DN 以外的任何用户 DN 来授予 代理访问权限。但是,不能向目录管理员授予代理权限。在“代理验证 ACI 示例”中提供了一个示例。有关代理访问权限的概述,请参阅 iPlanet Directory Server 部署指南

All。 全部权限,指示指定的 DN 对目标条目具有全部权限(读取、写入、搜索、删除、比较和自写),但代理权限除外

权限的授予彼此独立。这意味着(举例而言)被授予添加权限的用户可以创建条目,但如果未专门授予删除权限,则不能删除条目。因此,规划目录的访问控制策略时,必须确保所授予的权限对用户而言比较合理。例如,授予写入权限而不授予读取和搜索权限一般而言没有意义。


LDAP 操作所需的权限

本部分介绍根据要授权用户可以执行的 LDAP 操作类型而需要授予用户哪些权限。

添加条目:

  • 对所要添加的条目授予添加权限。

  • 对条目中各个属性的值授予写入权限。默认情况下将授予该权限,但可以利用 targattrfilters 关键字加以限制。

删除条目:

  • 对所要删除的条目授予删除权限。

  • 对条目中各个属性的值授予写入权限。默认情况下将授予该权限,但可以利用 targattrfilters 关键字加以限制。

修改条目中的属性:

  • 对该属性类型授予写入权限。

  • 对各个属性类型的值授予写入权限。默认情况下将授予该权限,但可以利用 targattrfilters 关键字加以限制。

修改条目的 RDN:

  • 对该条目授予写入权限。

  • 对新 RDN 中所用的属性类型授予写入权限。

  • 如果希望对旧 RDN 授予删除权限,则对旧 RDN 中所用的属性类型授予写入权限。

  • 对新 RDN 中所用属性类型的值授予写入权限。默认情况下将授予该权限,但可以利用 targattrfilters 关键字加以限制。

比较属性的值:

  • 对属性类型授予比较权限。

搜索条目:

  • 对搜索过滤器中所用的各个属性类型授予搜索权限。

  • 对条目中所用的属性类型授予读取权限。

设置用于允许用户搜索目录的权限可通过示例进行更好的说明。请考虑下列 ldapsearch 操作:

% ldapsearch -L -h host -s suffix -b "uid=bjensen,dc=siroe,dc=com" \
             objectclass=* mail

下列 ACI 用于确定用户 bkolics 是否能被授予访问权:

aci: (targetattr = "mail")(version 3.0; acl "self access to mail";
allow (read, search) userdn = "ldap:///self";)

由于该 ACI 未授予对 objectclass 属性的访问权,因此搜索结果列表为空。如果希望上述搜索操作成功,则必须将 ACI 修改为如下所示:

aci: (targetattr = "mail || objectclass")(version 3.0; acl "self
access to mail"; allow (read, search) userdn = "ldap:///self";)


权限语法

在 ACI 语句中,权限的语法结构为:

allow|deny (rights)

其中 rights 是 1 至 8 个由逗号分隔、用括号括起的关键字列表。有效的关键字为 readwriteadddeletesearchcompareselfwriteproxyall

在下例中,只要绑定规则被评估为“真”,即允许进行读取、搜索及比较访问。

aci: (target="ldap:///dc=siroe,dc=com") (version 3.0;acl "example";
allow (read, search, compare) bind_rule;)



绑定规则



根据为目录所定义的 ACI,某些操作需要绑定到目录中。绑定的意思是:通过提供绑定 DN 和口令(如果使用的是 SSL,则用证书)来向目录进行登录或验证。绑定操作中所提供的凭证及绑定环境决定了是否允许访问该目录。

ACI 中设置的各个权限都有对应的绑定规则,其中详细说明了所需的凭证和绑定参数。

绑定规则可以较为简单。例如,绑定规则可以只是声明:访问目录的人必须属于特定的组。绑定规则也可以较为复杂。例如,绑定规则可以声明:某个人必须属于特定的组,且必须在上午 8 点和下午 5 点之间从某台具有特定 IP 地址的计算机上登录。

绑定规则定义了能访问目录的人及访问的时间和地点。具体而言,绑定规则可以指定:

  • 被授予访问权的用户、组和角色

  • 实体必须从中进行绑定的位置

  • 绑定的时间或日期

  • 绑定期间必须使用的验证类型

此外,绑定规则还可以是这样一种复杂结构:利用布尔运算符将上述标准组合起来。有关详细信息,请参阅“使用布尔绑定规则”

服务器根据与用于评估 LDAP 过滤器的逻辑相似的三值逻辑评估在 ACI 中使用的逻辑表达式,如 RFC 2251 Lightweight Directory Access Protocol (v3) 中说明。总而言之,这意味着如果表达式中的任何组件评估为 Undefined(例如,如果由于资源限制中止表达式的评估),则服务器可以正确处理这种情况:它不会因为在复杂布尔表达式中出现 Undefined 值而错误地授予访问权限。


绑定规则语法

是否允许访问与 ACI 绑定规则是否被评估为真有关。绑定规则使用下列两种格式之一:

keyword = "expression";

keyword != "expression";

其中等号 (=) 指示 keywordexpression 必须匹配时,绑定规则才为真;而不等号 (!=) 则指示 keywordexpression 必须不匹配时,绑定规则才为真。



注意 timeofday 关键字还支持不等于表达式 (<、<=、>、>=)。这是唯一支持这些表达式的关键字。



expression 上的引号 ("") 及定界用的分号 (;) 为必需项。可以使用的表达式与关联的 keyword 有关。

下表列出了各个关键字及相关的表达式。它同时还指示表达式中是否允许使用通配符。


表 6-2    LDIF 绑定规则关键字

关键字

有效的表达式

是否允许使用通配符?

userdn  

ldap:///distinguished_name
ldap:///all
ldap:///anyone
ldap:///self
ldap:///parent
ldap:///suffix??sub?(filter)
 

是,仅限于 DN  

groupdn  

ldap:///DN || DN  

 

roledn  

ldap:///DN || DN  

 

userattr  

attribute#bindType
attribute#value
 

 

ip  

IP_address  

 

dns  

DNS_host_name  

 

dayofweek  

sun
mon
tue
wed
thu
fri
sat
 

 

timeofday  

0 - 2359  

 

authmethod  

none
simple
ssl
sasl authentication_method
 

 

下列部分将详细说明各个关键字的绑定规则语法。


定义用户访问权 - userdn 关键字

用户访问权可用 userdn 关键字定义。 userdn 关键字要求下列格式的一个或多个有效特异名称:

userdn = "ldap:///dn [|| ldap:///dn]...[||ldap:///dn]"

其中 dn 可以是 DN 或是表达式 anyoneallselfparent 之一:

userdn = "ldap:///anyone" - 定义匿名访问

userdn = "ldap:///all" - 定义常规访问

userdn = "ldap:///self" - 定义自访问

userdn = "ldap:///parent" - 定义父项访问

userdn 关键字也可表示为 LDAP 过滤器的形式:

ldap:///suffix??sub?(filter)



注意 如果 DN 中包含逗号,则必须在逗号的前面加一个反斜杠 (\) 进行字符转义。




匿名访问(anyone 关键字)

授予对目录进行匿名访问的权利,意味着任何人都能在不提供绑定 DN 或口令的情况下访问该目录,而不管绑定环境如何。可以将匿名访问限制为特定类型的访问(例如读取或搜索),或者限定到目录中特定的子树或个别条目上。

在服务器控制台上,将通过访问控制编辑器定义匿名访问。请参阅“从控制台创建 ACI”


常规访问(all 关键字)

可以使用绑定规则来指示某个权限适用于已成功绑定到目录上的任何人,即所有经过验证的用户。这样即允许进行常规访问,而同时又可防止匿名访问。

在服务器控制台上,将通过访问控制编辑器定义常规访问。有关详细信息,请参阅“从控制台创建 ACI”


自访问(self 关键字)

指定用户被授予或被拒绝对自己条目的访问权。这种情况下,如果绑定 DN 与目标条目的 DN 相匹配,就会授予或拒绝访问。

在服务器控制台上,将通过访问控制编辑器设置自访问。有关详细信息,请参阅“从控制台创建 ACI”


父项访问(parent 关键字)

指定只有当用户的绑定 DN 是目标条目的父项时,才会授予或拒绝访问权。

使用服务器控制台无法设置父项访问控制。


LDAP URL

将 URL 与过滤器一起使用可以在 ACI 中动态确定用户目标,如下所示:

userdn = "ldap:///<suffix>??sub?(filter)"

例如,基于下列 URL,siroe.com 目录树财务和工程分支中的所有用户都将被动态地授予或拒绝对目标资源的访问权:

userdn = "ldap:///dc=siroe,dc=com??sub?(|(ou=engineering)(ou=accounting))"



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



有关 LDAP URL 的详细信息,请参阅附录 C“LDAP URL”。


通配符

也可以利用通配符 (*) 来指定一组用户。例如,指定用户 DN 为 uid=u*,dc=siroe,dc=com 时,将指示只有具有以字母 u 开头的绑定 DN 的用户才会根据所设权限而被允许或拒绝访问。

在服务器控制台上,将通过访问控制编辑器来设置用户访问权。有关详细信息,请参阅“从控制台创建 ACI”


示例

本部分中包含 userdn 语法的示例。

包含 LDAP URL 的 Userdn 关键字:

userdn = "ldap:///uid=*,dc=siroe,dc=com";

如果用户利用指定模式的任何特异名称而绑定到目录上,绑定规则即被评估为“真”。例如,下列两种绑定 DN 均被评估为真:

uid=ssarette,dc=siroe,dc=com
uid=tjaz,ou=Accounting,dc=siroe,dc=com

而下列绑定 DN 则评估为“假”:

cn=Babs Jensen,dc=siroe,dc=com

包含 LDAP URL 逻辑“或”的 Userdn 关键字:

userdn="ldap:///uid=bj,c=siroe.com || ldap:///uid=kc,dc=siroe,dc=com";

如果客户机绑定为所提供的两个特异名称之一,绑定规则即被评估为真。

不包括特定 LDAP URL 的 Userdn 关键字:

userdn != "ldap:///uid=*,ou=Accounting,dc=siroe,dc=com";

如果客户机未绑定为 accounting 子树中基于 UID 的特异名称,绑定规则即被评估为真。只有当目标条目未在目录树 accounting 分支的下面时,该绑定规则才有意义。

包含 self 关键字的 Userdn 关键字:

userdn = "ldap:///self";

如果用户所访问的条目是由用户绑定到目录所用的 DN 表示的,则绑定规则被评估为真。即:如果用户已绑定为 uid=ssarette, dc=siroe,dc=com,而该用户又试图对 uid=ssarette,dc=siroe,dc=com 条目执行操作,则绑定规则被评估为真。

例如,如果希望授予 siroe.com 目录树中所有用户对其 userPassword 属性的写入权限,则可在 dc=siroe,dc=com 节点上创建以下 ACI:

aci: (targetattr = "userPassword") (version 3.0;
acl "write-self"; allow (write) userdn = "ldap:///self";)

包含 all 关键字的 Userdn 关键字:

userdn = "ldap:///all";

对于任何有效的绑定 DN,绑定规则均被评估为真。为评估为真,用户必须在绑定操作期间提供有效的特异名称和口令。

例如,如果希望将对整个目录树的读取权限授予所有经过验证的用户,则在 dc=siroe,dc=com 节点上创建以下 ACI:

aci: (version 3.0; acl "all-read"; allow (read)
userdn="ldap:///all";)

包含 anyone 关键字的 Userdn 关键字:

userdn = "ldap:///anyone";

对于任何人而言,绑定规则都将被评估为真;使用该关键字可以提供对目录的匿名访问。

例如,如果想允许匿名读取和搜索整个 siroe.com 目录树,请在 dc=siroe,dc=com 节点上创建以下 ACI:

aci: (version 3.0; acl "anonymous-read-search";
allow (read, search) userdn = "ldap:///anyone";)

包含 parent 关键字的 Userdn 关键字:

userdn = "ldap:///parent";

如果绑定 DN 是目标条目的父项,则绑定规则将被评估为真。

例如,如果想授予对各个用户子条目的写入权限,请在 dc=siroe,dc=com 节点上创建以下 ACI:

aci: (version 3.0; acl "parent access";
allow (write) userdn="ldap:///parent";)

如果用户属于 engineering 或 sales 子树,则绑定规则将被评估为真。


定义组访问权 - groupdn 关键字

有些特定组的成员可以访问目标资源。这称为组访问。组访问权是用 groupdn 关键字定义的,可指定在用户利用属于特定组的 DN 进行绑定时,是授予还是拒绝对目标条目的访问。

groupdn 关键字要求一个或多个具有下列格式的有效特异名称:

groupdn="ldap:///dn [|| ldap:///dn]...[|| ldap:///dn]"

如果绑定 DN 属于已命名的组,则绑定规则将被评估为真。



注意 如果 DN 中包含逗号,则必须用反斜杠 (\) 对逗号进行转义。



在服务器控制台上,可以通过访问控制编辑器来定义特定的组。有关详细信息,请参阅“从控制台创建 ACI”


示例

本部分中包含 groupdn 语法的示例。

包含 LDAP URL 的 Groupdn 关键字:

groupdn = "ldap:///cn=Administrators,dc=siroe,dc=com";

如果绑定 DN 属于管理员组,则绑定规则将被评估为真。如果想授予管理员组对整个目录树的写入权限,请在 dc=siroe,dc=com 节点上创建以下 ACI:

aci: (version 3.0; acl "Administrators-write"; allow (write)
groupdn="ldap:///cn=Administrators,dc=siroe,dc=com";)

包含 LDAP URL 逻辑“或”的 Groupdn 关键字:

groupdn = "ldap:///cn=Administrators,dc=siroe,dc=com" ||
"ldap:///cn=Mail Administrators,dc=siroe,dc=com";

如果绑定 DN 属于管理员组或邮件管理员组,则绑定规则将被评估为真。


定义角色访问权 - roledn 关键字

某些特定角色的成员可以访问目标资源。这称为角色访问。角色访问权是用 roledn 关键字定义的,可指定在用户利用属于特定组的 DN 进行绑定时,是授予还是拒绝对目标条目的访问。

roledn 关键字要求下列格式的一个或多个有效特异名称:

roledn = "ldap:///dn [|| ldap:///dn]... [|| ldap:///dn]"

如果绑定 DN 属于指定的角色,则绑定规则将被评估为真。



注意 如果 DN 中包含逗号,则必须用反斜杠 (\) 对逗号进行转义。



roledn 关键字的语法结构及用法与 groupdn 关键字的相同。


基于值匹配定义访问权限

您可以设置绑定规则,指定用于绑定到目录的条目的属性值必须匹配目标条目的属性值。

例如,可以指定绑定 DN 必须匹配用户条目 manager 属性的 DN 时,才会应用 ACI。这种情况下,只有用户的管理者才能访问该条目。

本例即基于 DN 匹配。但是,可以将绑定中所用条目的任何属性与目标条目相匹配。例如,可以创建这样的 ACI:它允许任何属性 favoriteDrink 为“beer”的用户读取其它具有相同 favoriteDrink 值的用户的所有条目。


使用 userattr 关键字

userattr 关键字可指定用于绑定的条目与目标条目之间哪些属性值必须匹配。

您可以指定:

  • 用户 DN

  • 组 DN

  • 角色 DN

  • LDAP 过滤器(位于 LDAP URL 中)

  • 任何属性类型

userattr 关键字的 LDIF 语法如下所示:

userattr = "attrName#bindType"

或者,如果使用的属性类型要求用户 DN、组 DN、角色 DN 或 LDAP 过滤器以外的值:

userattr = "attrName#attrValue"

其中:

  • attrName 是用于值匹配的属性的名称

  • bindTypeUSERDN、GROUPDN、LDAPURL 之一

  • attrValue 是任何代表属性值的字符串



    注意 千万不要将服务类 (CoS) 定义生成的属性与 userattr 关键字一起使用。如果 ACI 包含与 CoS 生成的属性值有关的绑定规则,则 ACI 将不起作用。



下列部分将提供各种绑定类型下 userattr 关键字的示例:


USERDN 绑定类型的示例
下面示例中的 userattr 关键字与基于用户 DN 的绑定相关联:

userattr = "manager#USERDN"

如果绑定 DN 与 manager 属性的值相匹配,则绑定规则将被评估为真。您可以用此允许用户的管理者修改员工的属性。该机制只有在目标条目中的 manager 属性表示为完整的 DN 时才有效。

下例授予管理者对其员工条目完全的访问权:

aci: (target="ldap:///dc=siroe,dc=com")(targetattr=*)(version 3.0;
acl "manager-write"; allow (all) userattr = "manager#USERDN";)


GROUPDN 绑定类型的示例
下面示例中的 userattr 关键字与基于组 DN 的绑定相关联:

userattr = "owner#GROUPDN"

如果绑定 DN 是目标条目 owner 属性中所指定的组的成员,则绑定规则将被评估为真。例如,使用该机制可以允许组来管理员工的状态信息。只要所用的属性中包含组条目的 DN,即可使用 owner 以外的其它属性。

所指向的组可以是动态组,而组的 DN 则可以位于数据库的任何后缀下。但是,服务器对此类 ACI 的评估需要占用大量的资源。

如果使用的是静态组且与目标条目位于同一后缀下,则可以使用下列表达式:

userattr = "ldap:///dc=siroe,dc=com?owner#GROUPDN"

本例中,组条目位于 dc=siroe,dc=com 后缀下。相对上例而言,服务器可以更为快速地处理此类语法。


ROLEDN 绑定类型的示例
下面示例中的 userattr 关键字与基于角色 DN 的绑定相关联:

userattr = "siroeEmployeeReportsTo#ROLEDN"

如果绑定 DN 属于目标条目 siroeEmployeeReportsTo 属性中指定的角色,则绑定规则将被评估为真。例如,如果您为公司中的所有管理者都创建了嵌套角色,即可使用该机制向各级管理者授予对比自己级别低的员工进行信息访问的权限。



注意 本例假定已向模式中添加了 siroeEmployeeReportsTo 属性,且所有员工条目中都包含该属性。同时,它还假定该属性的值为角色条目的 DN。

有关设计模式的信息,请参阅 iPlanet Directory Server 部署指南。有关向模式中添加属性的信息,请参阅第 338 页的“创建属性”



角色的 DN 可以位于数据库中任何后缀的下面。此外,如果使用的是已过滤的角色,则此类 ACI 的评估会占用大量的服务器资源。

如果使用的是静态角色定义,且角色条目位于与目标条目相同的后缀下,则可以使用下列表达式:

userattr = "ldap:///dc=siroe,dc=com?employeeReportsTo#ROLEDN"

本例中,角色条目位于 dc=siroe,dc=com 后缀下。相对上例而言,服务器可以更为快速地处理此类语法。


LDAPURL 绑定类型的示例
下面示例中的 userattr 关键字与基于 LDAP 过滤器的绑定相关联:

userattr = "myfilter#LDAPURL"

如果绑定 DN 与目标条目 myfilter 属性中指定的过滤器相匹配,则绑定规则将被评估为真。myfilter 属性可被替换为任何包含 LDAP 过滤器的属性。


任意属性值的示例
下面示例中的 userattr 关键字与基于任意属性值的绑定相关联:

userattr = "favoriteDrink#Beer"

如果绑定 DN 和目标 DN 都包含值为 BeerfavoriteDrink 属性,则绑定规则将被评估为真。


继承性与 userattr 关键字的配合使用

使用 userattr 关键字来建立用于绑定的条目与目标条目之间的关联时,ACI 将仅应用于所指定的目标,而不适用于其下面的条目。有些情况下,您可能希望将 ACI 的应用范围向目标条目以下扩展几级。使用 parent 关键字并指定目标向下继承 ACI 的级别数,即有可能实现上述要求。

userattr 关键字与 parent 关键字配合使用时,语法结构如下所示:

userattr = "parent[inheritance_level].attrName#bindType"

或者,如果使用的属性类型要求用户 DN、组 DN、角色 DN 或 LDAP 过滤器以外的值:

userattr = "parent[inheritance_level].attrName#attrValue"

其中

  • inheritance_level 是一个由逗号分隔的列表,指示目标下继承 ACI 的级别数。目标条目下可以包含五级 [0,1,2,3,4];0 指示目标条目。

  • attribute 是作为 userattrgroupattr 关键字目标的属性。

  • bindType 可以是 USERDN、GROUPDN、LDAPURL 之一。

例如:

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

如果绑定 DN 与目标条目的 manager 属性相匹配,则绑定规则将被评估为真。当绑定规则评估为真时,所授予的权限将应用于目标条目所有紧跟在它下面的条目。


userattr 继承性的示例
下图中的示例指示允许用户 bjensen 读取和搜索 cn=Profiles 条目及包含 cn=mailcn=news 的第一级子项,从而允许该用户搜索自己的邮件和新 ID。

图 6-1    继承性与 userattr 关键字的配合使用


如果本例中未使用继承性,则必须使用下列方法之一来获得相同的结果:

  • 为用户 bjensen 明确设置对目录的 cn=Profilescn=mailcn=news 条目的读取和搜索权。

  • 将值为 bjensen 的 owner 属性添加到 cn=mailcn=news 条目中,然后将以下 ACI 添加到 cn=mailcn=news 条目中。

    aci: (targetattr="*") (version 3.0; acl "profiles access"; allow
     (read,search) userattr="owner#USERDN";)


使用 userattr 关键字授予添加权限

如果是将 userattr 关键字与 alladd 权限配合使用,就可能会发现服务器的行为并非自己所期望的那样。典型的表现是:当在目录中创建新条目时,iPlanet Directory Server 将对所创建的条目进行访问权的评估,但并不对父项进行评估。但是,对于使用 userattr 关键字的 ACI 而言,这种行为会造成安全漏洞。为避免这种情况,需要改变服务器的常规行为。

请考虑下例:

aci: (target="ldap:///dc=siroe,dc=com")(targetattr=*) (version 3.0;
  acl "manager-write"; allow (all) userattr = "manager#USERDN";)

该 ACI 授予管理者对向其报告的员工条目的全部权限。但是,由于访问权是在所创建的条目上进行评估的,因此此类 ACI 也会允许任意员工创建其 manager 属性被设为自身 DN 的条目。例如,心怀不满的员工 Joe (cn=Joe,ou=eng,dc=siroe,dc=com) 可能想在目录树的人力资源分支中创建一个条目,从而使用(或滥用)授予人力资源部门员工的特权。

他可以创建下列条目:

dn: cn= Trojan Horse,ou=Human Resources,dc=siroe,dc=com
objectclass: top
...
cn: Trojan Horse
manager: cn=Joe,ou=eng,dc=siroe,dc=com

为避免出现此类危险,ACI 评估过程不会在级别 0 上(即向条目自身)授予添加权限。但是,可以使用 parent 关键字在现有条目的下面授予添加权限。此时必须为添加权限指定父项以下的级别数。例如,下列 ACI 允许将子项添加到具有与绑定 DN 相匹配的 manager 属性的 dc=siroe,dc=com 中的任何条目中:

aci: (target="ldap:///dc=siroe,dc=com")(targetattr=*)
 (version 3.0; acl "parent-access"; allow (add)
 userattr = "parent[0,1].manager#USERDN";)

该 ACI 可确保仅将添加权限授予其绑定 DN 与父项的 manager 属性相匹配的用户。


定义从特定 IP 地址进行访问时的访问权限

利用绑定规则,可以指示绑定操作必须从特定的 IP 地址发出。这通常用于强制所有目录更新都从给定的计算机或网络域中发生。

设置基于 IP 地址的绑定规则时所用的 LDIF 语法结构如下所示:

ip = "IP_address" ip != "IP_address"

IP 地址必须为点表示法。可以使用通配符 (*) 来包含多台计算机。例如,下列字符串有效:

ip = "12.123.1.*";

如果访问目录的客户机位于已命名的 IP 地址处,则绑定规则将被评估为真。这一点对于只允许从特定的子网或计算机来访问某类目录的情况较为有用。

例如,可以使用通配符 IP 地址 12.3.45.* 来指定特定的子网,或者使用 123.45.6.*+255.255.255.115 来指定子网掩码。

在服务器控制台上,通过访问控制编辑器可以指定 ACI 所应用的特定计算机。有关详细信息,请参阅“从控制台创建 ACI”


定义从特定域进行访问时的访问权限

绑定规则可以指定绑定操作必须从特定的域或主机发出。这通常用于强制所有目录更新都从给定的计算机或网络域中发生。

设置基于 DNS 主机名的绑定规则时所用的 LDIF 语法结构如下所示:

dns = "DNS_Hostname"dns != "DNS_Hostname"



警告

dns 关键字要求计算机上使用的命名服务为 DNS。如果命名服务不是 DNS,则应使用 ip 关键字。



dns 关键字要求完全限定的 DNS 域名。如果授予主机访问权而不指定域,就会造成潜在的安全隐患。例如,系统允许使用下列表达式,但我们建议不要使用:

dns = "legend.eng";

应使用完全限定的名称,例如:

dns = "legend.eng.siroe.com";

dns 关键字允许使用通配符。例如:

dns = "*.siroe.com";

如果访问目录的客户机位于已命名的域中,则绑定规则将被评估为真。这一点对于仅允许从特定的域进行访问而言较为有用。注意:如果系统使用的命名服务不是 DNS,则通配符将无法正常工作。这种情况下,如果想限制对特定域的访问权,请使用 ip 关键字,说明见“定义从特定 IP 地址进行访问时的访问权限”


定义特定时间或日期的访问权限

使用绑定规则可以指定只能在特定时间或特定日期进行绑定。例如,可以设置仅允许在周一至周五上午 8 点到下午 5 点之间进行访问的规则。赋予访问权限的时间是目录服务器上的时间,而非客户机上的时间。

设置基于时间的绑定规则的 LDIF 语法如下所示:

timeofday operator "time"

其中 operator 可以是下列符号之一:等于号 (=)、不等于号 (!=)、大于号 (>)、大于等于号 (>=)、小于号 (<) 或小于等于号 (<=)。

关键字 timeofday 要求时间以小时和分钟表示,采用 24 小时制时钟(0 至 2359)。



注意 赋值的时间是服务器上的时间,而非客户机上的时间。



设置基于日期的 LDIF 绑定规则的语法如下所示:

dayofweek = "day1, day2 ..."

dayofweek 关键字的可能取值是英文的三字母星期缩写:sunmontuewedthufrisat


示例

下面是 timeofdaydayofweek 语法的示例:

timeofday = "1200";

如果客户机恰好在中午访问目录,则绑定规则将被评估为真。

timeofday != "0100";

如果客户机在除上午 1 点之外的时间访问目录,则绑定规则将被评估为真。

timeofday > "0800";

如果客户机在上午 8 点以后的任何时间访问目录,则绑定规则将被评估为真。

timeofday < "1800";

如果客户机在下午 6 点之前的任何时间访问目录,则绑定规则将被评估为真。

timeofday >= "0800";

如果客户机是在上午 8 点或以后的任何时间访问目录,则绑定规则将被评估为真。

timeofday <= "1800";

如果客户机在下午 6 点或之前的任何时间访问目录,则绑定规则将被评估为真。

dayofweek = "Sun, Mon, Tue";

如果客户机在周日、周一或周二访问目录,则绑定规则将被评估为真。


基于验证方法定义访问权限

您可以设置这样的绑定规则:声明客户机必须使用特定的验证方法绑定到目录上。可用的身份验证方法包括:

  • None - 无须身份验证。这是默认设置。它代表匿名访问。

  • Simple - 客户机必须提供用户名和口令才能绑定到目录。

  • SSL - 客户机必须通过“安全套接层”(SSL) 或“传输层安全协议”(TLS) 连接来绑定到目录上。

    对于 SSL 的情况,连接是在第二个 LDAPS 端口上建立的;对于 TLS 而言,连接则是通过“启动 TLS”操作来建立的。两种情况下都必须提供证书。有关设置 SSL 的信息,请参阅第 11 章“管理 SSL”

  • SASL - 客户机必须通过“简单验证和安全层”(SASL) 连接来绑定到目录上。注意:iPlanet Directory Server 不提供 SASL 模块。

通过访问控制编辑器无法设置基于验证的绑定规则。

设置基于验证方法的绑定规则的 LDIF 语法结构如下所示:

authmethod = "authentication_method"

其中 authentication_methodnonesimplessl"sasl sasl_mechanism"


示例

下面是 authmethod 关键字的示例:

authmethod = "none";

绑定规则评估期间将不进行验证。

authmethod = "simple";

如果客户机使用用户名和口令访问目录,则绑定规则将被评估为真。

authmethod = "ssl";

如果客户机使用证书通过 LDAPS 进行目录验证,则绑定规则将被评估为真。如果客户机使用简单(simple)验证方法(绑定 DN 和口令)通过 ldaps 进行验证,则绑定规则将不会被评估为真。

authmethod = "sasl DIGEST-MD5";

如果客户机使用 SASL DIGEST-MD5 机制访问目录,则绑定规则将被评估为真。另一种受支持的 SASL 机制为 EXTERNAL。


使用布尔绑定规则

绑定规则可以是使用布尔表达式 AND(和)、OR(或)和 NOT(非)来精确设置访问规则的复杂表达式。使用服务器控制台无法创建布尔绑定规则。您必须创建 LDIF 语句。

布尔绑定规则的 LDIF 语法结构如下所示:

bind_rule [boolean][bind_rule][boolean][bind_rule]...;)

例如,如果绑定 DN 是管理员组或邮件管理员组的成员,且客户机是在 siroe.com 域中运行的,则下列绑定规则将被评估为真:

(groupdn = "ldap:///cn=administrators,dc=siroe,dc=com" or
groupdn = "ldap:///cn=mail administrators,dc=siroe,dc=com" and
dns = "*.siroe.com";)

尾随的分号 (;) 为必需的定界符,必须位于最后一条绑定规则的后面。

布尔表达式的评估顺序如下所示:

  • 首先是最内侧的括号表达式,并依次向外

  • 所有表达式都按从左向右的顺序进行

  • NOT 先于 AND 或 OR 运算符

布尔表达式 ORAND 运算符之间优先性相同。

请考虑下列布尔绑定规则:

(bind_rule_A) OR (bind_rule_B)

(bind_rule_B) OR (bind_rule_A)

由于布尔表达式是从左向右评估的,因此,在第一种情况下,绑定规则 A 将先于绑定规则 B 被评估;而在第二种情况下,绑定规则 B 则先于绑定规则 A 被评估。

但是,布尔运算符 NOT 先于布尔运算符 ORAND 的评估。因此,在下例中:

(bind_rule_A) AND NOT (bind_rule_B)

绑定规则 B 将先于绑定规则 A 被评估,而此时将忽略自左向右的评估规则。



从控制台创建 ACI



您可以使用 iPlanet Directory Server Console 来查看、创建、编辑和删除目录的访问控制指令。本部分提供下列内容的一般说明:

有关 iPlanet Directory Server 安全策略中常用访问控制规则的集合及利用 iPlanet Directory Server Console 创建访问控制规则的循序渐进式说明,请参阅“访问控制用法示例”

在可视编辑模式下,访问控制编辑器不允许创建某些较复杂的 ACI。尤其要说明的是,在访问控制编辑器中无法执行下列操作:


显示访问控制编辑器

  1. 启动 iPlanet Directory Server Console。利用诸如目录管理员(具有为目录所配置的 ACI 的写入权限)等特权用户的绑定 DN 和口令进行登录。

    有关说明,请参阅第 26 页上的“使用 iPlanet Directory Server Console”

  2. 在 iPlanet Directory Server Console 上,选择“目录”选项卡。

  3. 右键单击导航树中要设置访问控制的条目,然后从弹出菜单中选择“设置访问权限”。或者,也可以突出显示该条目,然后从“对象”菜单中选择“设置访问权限”。

    下图显示屏幕上的访问控制管理对话框。该对话框列出在所选条目上定义的所有 ACI 的说明,并允许编辑或删除这些 ACI 和创建新的 ACI。

    选中“显示继承的 ACI”复选框还将列出由所选条目的父项定义并适用于该条目的所有 ACI。但是,不能编辑或删除继承的 ACI,必须在定义它们的条目中对它们进行管理。

图 6-2    访问控制管理对话框


  1. 单击“新建”以在所选对象及其整个子目录树上定义新的访问权限。此时显示如下图所示的访问控制编辑器。

图 6-3    访问控制编辑器对话框


该对话框顶部的 ACI 名称是对在访问控制管理对话框中出现的 ACI 的说明。指定一个描述性的 ACI 名称将大大方便管理整个目录范围的 ACI,尤其是在查看叶条目上的继承的 ACI 的时候。

访问控制编辑器的选项卡用于指定被授予或被拒绝访问权限的用户、将被访问或限制的目标,以及诸如所允许使用的主机名和操作次数等高级参数。有关访问控制选项卡各个字段的详细信息,请参阅在线帮助。


查看当前 ACI

如果想查看应用于目录中特定子树的 ACI,请执行下列步骤:

  1. 在“目录”选项卡上,右键单击子树中的顶级条目,然后从弹出菜单中选择“设置访问权限”。

    此时显示访问控制管理器窗口。其中包含属于该条目的 ACI 列表。

  2. 如果想显示应用于该条目的 ACI 完整列表,请选中“显示继承的 ACI”。


创建新 ACI

要创建新 ACI:

  1. 显示访问控制编辑器。

    有关该任务的说明,请参见“显示访问控制编辑器”

    如果显示的视图与图 6-3 不同,则单击“可视编辑”按钮。

  2. 在“ACI 名称”文本框中键入名称,从而命名 ACI。

    名称可以是任何用于唯一标识该 ACI 的字符串。如果不输入名称,服务器则会使用未命名的 ACI

  3. 在“用户/组”选项卡上,选择要授予其访问权的用户,方法是突出显示“所有用户”,或者单击“添加”按钮以搜索要为用户添加的目录。

    在“添加用户和组”窗口中:

    1. 从下拉列表中选择搜索区域,在“搜索”字段中输入搜索字符串,然后单击“搜索”按钮。

      搜索结果将显示在窗口下方的列表中。

    2. 在搜索结果列表中突出显示所需的条目,然后单击“添加”按钮,从而将其添加到具有访问权限的条目列表中。

    3. 单击“确定”以关闭“添加用户和组”窗口。

      所选的条目现在将在 ACI 编辑器的“用户/组”选项卡中列出。

  4. 在访问控制编辑器中,单击“权限”选项卡,然后使用复选框选择要授予的权限。

  5. 单击“目标”选项卡,然后单击“此条目”,从而显示作为 ACI 目标的节点。

    您可以更改目标 DN 的值,但新的 DN 必须为所选条目的直接或间接子项。

    如果不希望该节点下子树中的每个条目都成为 ACI 的目标,则必须在“子项的过滤器”字段中输入过滤器。

    此外,通过在属性列表中选择要作为目标的属性,还可以将 ACI 的范围仅限于某些属性。

  6. 单击“主机”选项卡,然后单击“添加”按钮,从而显示添加主机过滤器对话框。

    您可以指定主机名或 IP 地址。如果指定的是 IP 地址,则可以使用通配符 (*)。

  7. 单击“次数”选项卡,显示允许访问的时间表。

    缺省情况下随时都可进行访问。单击并在表格上拖动光标,即可更改访问时间。但您不能选择不连续的时间块。

  8. 编辑完 ACI 后,单击“确定”。

    此时将关闭 ACI 编辑器,而新的 ACI 将在 ACI 管理器窗口中列出。



    注意 创建 ACI 的过程中,可以随时单击“手动编辑”按钮来显示对应于输入的 LDIF 语句。您可以修改该语句,但更改结果却不一定在图形界面上显示出来。




编辑 ACI

要编辑 ACI:

  1. 在“目录”选项卡上,右键单击子树中的顶级条目,然后从弹出菜单中选择“设置访问权限”。

    此时显示访问控制管理器窗口。其中包含属于该条目的 ACI 列表。

  2. 在访问控制管理器窗口中,突出显示要编辑的 ACI,然后单击“编辑”。

    此时显示访问控制编辑器。有关可利用该对话框进行编辑的信息的详情,请参阅在线帮助。

  3. 在访问控制编辑器的各个选项卡上,按自己的需要进行相应的更改。

  4. 编辑完 ACI 后,单击“确定”。

    此时将关闭 ACI 编辑器,而修改后的 ACI 将在 ACI 管理器中列出。


删除 ACI

要删除 ACI:

  1. 在“目录”选项卡上,右键单击子树中的顶级条目,然后从弹出菜单中选择“设置访问权限”。

    此时显示访问控制管理器窗口。其中包含属于该条目的 ACI 列表。

  2. 在访问控制管理器窗口中,选择要删除的 ACI。

  3. 单击“删除”。

    该 ACI 将不会在访问控制管理器中再次列出。



访问控制用法示例

本部分所提供的示例展示了虚构中的 ISP 公司 siroe.com 如何实施其访问控制策略。所有示例都旨在介绍如何通过控制台或 LDIF 文件执行给定的任务。

siroe.com 的业务主要是提供 web 主机服务及 internet 接入服务。siroe.com 的部分 web 主机服务涉及为客户公司提供目录管理服务。siroe.com 实际为两个中等规模的公司 Company333 和 Company999 提供目录的主机服务,且部分管理着这些目录。它同时还为许多个人用户提供 internet 接入服务。

下面是 siroe.com 要投入使用的访问控制规则:


授予匿名访问权

多数目录在运行时都允许至少匿名访问一个后缀,从而进行读取、搜索或比较操作。例如,如果运行的是公司人事目录,且希望员工能进行搜索(如对电话簿),就可能需要设置这些权限。siroe.com 的内部情况就是这样,其说明参见 ACI“Anonymous siroe.com”示例。

作为 ISP,siroe.com 还希望创建全球均可访问的公共电话簿,从而公告其所有用户的联系信息。说明详见 ACI“Anonymous World”示例。


ACI “Anonymous siroe.com”
在 LDIF 中,要向 siroe.com 员工授予对整个 siroe.com 目录树的读取、搜索和比较权限,则应编写下列语句:

aci: (targetattr !="userPassword")(version 3.0; acl "Anonymous
Siroe"; allow (read, search, compare) userdn= "ldap:///anyone" and
dns="*.siroe.com";)

本例假设将 aci 添加到 dc=siroe,dc=com 条目中。注意:userPassword 属性已被排除在 ACI 的范围以外。

从控制台上,执行下列操作可设置该权限:

  1. 在“目录”选项卡上,右键单击左侧导航树中的 siroe.com 节点,然后从弹出菜单中选择“设置访问权限”,从而显示访问控制管理器。

  2. 单击“新建”以显示访问控制编辑器。

  3. 在“用户/组”选项卡上,在“ACI 名称”字段中键入 Anonymous siroe.com。检查在被授予访问权限的用户列表中是否已显示“所有用户”。

  4. 在“权限”选项卡上,选中代表读取、比较和搜索权限的复选框。务必清除其它复选框。

  5. 在“目标”选项卡上,单击“此条目”,从而在目标目录项字段中显示 dc=siroe,dc=com 后缀。在属性表中,找到 userPassword 属性并清除对应的复选框。

    应选中其它所有复选框。如果单击“名称”标题以按字母顺序组织列表,即可使上述任务更为简单。

  6. 在“主机”选项卡上,单击“添加”,然后在“DNS 主机过滤器”字段中键入 *.siroe.com。单击“确定”以关闭该对话框。

  7. 单击访问控制编辑器窗口中的“确定”。

    新的 ACI 随即添加到访问控制管理器窗口的 ACI 列表中。


ACI“Anonymous World”
在 LDIF 中,要向全球所有人授予对个人用户子树的读取和搜索权限,而同时拒绝访问未列出用户的信息,则应编写下列语句:

aci: (targetfilter= "(!(unlistedSubscriber=yes))")
(targetattr="homePostalAddress || homePhone || mail") (version 3.0;
acl "Anonymous World"; allow (read, search) userdn=
"ldap:///anyone";)

本例假设将 ACI 添加到 ou=subscribers,dc=siroe, dc=com 条目中。它同时还假设每个用户条目都有属性 unlistedSubscriber,且设置为 yes 或 no。目标定义会根据该属性的值将未列出的用户过滤掉。有关过滤器定义的详细信息,请参阅“使用过滤功能设置目标”

从控制台上,执行下列操作可设置该权限:

  1. 在“目录”选项卡上,右键单击左侧导航树中 siroe.com 节点下的 Subscribers 条目,然后从弹出菜单中选择“设置访问权限”,从而显示访问控制管理器。

  2. 单击“新建”以显示访问控制编辑器。

  3. 在“用户/组”选项卡上,在“ACI 名称”字段中键入 Anonymous World。检查在被授予访问权限的用户列表中是否已显示“所有用户”。

  4. 在“权限”选项卡上,选中代表读取和比较权限的复选框。务必清除其它复选框。

  5. 在“目标”选项卡上,单击“此条目”,从而在目标目录项字段中显示 dc=subscribers, dc=siroe,dc=com 后缀。

    1. 在“子项的过滤器”字段中,键入下列过滤器:

      (!(unlistedSubscriber=yes))

    2. 在属性表中,选中分别代表 homePhonehomePostalAddressmail 属性的复选框。

      应清除其它所有复选框。如果单击“不检查”按钮以清除表中所有对应于属性的复选框,并单击“名称”标题以按字母顺序组织列表,然后再选择相应的项,即可使上述任务更为简单。

  6. 单击“确定”。

    新的 ACI 随即添加到访问控制管理器窗口的 ACI 列表中。


向个人条目授予写入权限

许多目录管理员希望允许内部用户更改自己条目的某些但并非全部属性。siroe.com 的目录管理员想允许用户更改自己的口令、家庭电话号码及家庭地址,但不能更改其它内容。说明详见 ACI“Write siroe.com”示例。

siroe.com 的另一项策略是:只要用户建立到目录的 SSL 连接,即允许其更新自己在 siroe.com 目录树中的个人信息。说明详见 ACI“Write Subscribers”示例。


ACI“Write siroe.com”



注意 设置该权限后,将同时授予删除属性值的权限。



在 LDIF 中,为授予 siroe.com 员工更新自己口令、家庭电话号码和家庭地址的权限,需要编写下列语句:

aci: (targetattr="userPassword || homePhone || homePostalAddress")
(version 3.0; acl "Write siroe.com"; allow (write) userdn=
"ldap:///self" and dns="*.siroe.com";)

本例假定将 ACI 添加到 ou=siroe-people,dc=siroe, dc=com 条目中。

从控制台上,执行下列操作可设置该权限:

  1. 在“目录”选项卡上,右键单击左侧导航树中的 siroe.com 节点,然后从弹出菜单中选择“设置访问权限”,从而显示访问控制管理器。

  2. 单击“新建”以显示访问控制编辑器。

  3. 在“用户/组”选项卡上,在“ACI 名称”字段中键入 Write siroe.com。在被授予访问权限的用户列表中,执行下列操作:

    1. 选择并删除“所有用户”,然后单击“添加”。

      此时显示“添加用户和组”对话框。

    2. 将搜索区域设置为“特殊权限”,然后从搜索结果列表中选择“自身”。

    3. 单击“添加”按钮,从而在被授予了访问权限的用户列表中列出“自身”。

    4. 单击“确定”以关闭“添加用户和组”对话框。

  4. 在“权限”选项卡上,选中代表写入权限的复选框。务必清除其它复选框。

  5. 在“目标”选项卡上,单击“此条目”,从而在目标目录项字段中显示 dc=siroe,dc=com 后缀。在属性表中,选中分别代表 homePhonehomePostalAddressuserPassword 属性的复选框。

    应清除其它所有复选框。如果单击“不检查”按钮以清除表中所有对应于属性的复选框,并单击“名称”标题以按字母顺序组织列表,然后再选择相应的项,即可使上述任务更为简单。

  6. 在“主机”选项卡上,单击“添加”以显示“添加主机过滤器”对话框。在“DNS 主机过滤器”字段中,键入 *.siroe.com。单击“确定”以关闭该对话框。

  7. 单击访问控制编辑器窗口中的“确定”。

    新的 ACI 随即添加到访问控制管理器窗口的 ACI 列表中。


ACI“Write Subscribers”



注意 设置该权限后,将同时授予删除属性值的权限。



在 LDIF 中,为授予 siroe.com 用户更新自己口令和家庭电话号码的权限,需要编写下列语句:

aci: (targetattr="userPassword || homePhone") (version 3.0; acl
"Write Subscribers"; allow (write) userdn= "ldap://self" and
authmethod="ssl";)

本例假定将 aci 添加到 ou=subscribers,dc=siroe, dc=com 条目中。

注意:siroe.com 用户不具有家庭地址的写入权限,因为他们可能会删除该属性,而 siroe.com 则需要该信息来索要付款。因此,家庭地址是对业务而言十分重要的信息。

从控制台上,执行下列操作可设置该权限:

  1. 在“目录”选项卡上,右键单击左侧导航树中 siroe.com 节点下的 Subscribers 条目,然后从弹出菜单中选择“设置访问权限”,从而显示访问控制管理器。

  2. 单击“新建”以显示访问控制编辑器。

  3. 在“用户/组”选项卡上,在“ACI 名称”字段中键入 Write Subscribers。在被授予访问权限的用户列表中,执行下列操作:

    1. 选择并删除“所有用户”,然后单击“添加”。

      此时显示“添加用户和组”对话框。

    2. 将搜索区域设置为“特殊权限”,然后从搜索结果列表中选择“自身”。

    3. 单击“添加”按钮,从而在被授予了访问权限的用户列表中列出“自身”。

    4. 单击“确定”以关闭“添加用户和组”对话框。

  4. 在“权限”选项卡上,选中代表写入权限的复选框。务必清除其它复选框。

  5. 在“目标”选项卡上,单击“此条目”,从而在目标目录项字段中显示 dc=subscribers, dc=siroe,dc=com 后缀。

    1. 在“子项的过滤器”字段中,键入下列过滤器:

      (!(unlistedSubscriber=yes))

    2. 在属性表中,选中分别代表 homePhonehomePostalAddressmail 属性的复选框。

      应清除其它所有复选框。如果单击“不检查”按钮以清除表中所有对应于属性的复选框,并单击“名称”标题以按字母顺序组织列表,然后再选择相应的项,即可使上述任务更为简单。

  6. 如果希望用户使用 SSL 进行验证,请单击“手动编辑”按钮以切换到手动编辑状态,然后向 LDIF 语句中添加 authmethod=ssl,从而使其为:

    (targetattr="homePostalAddress || homePhone || mail") (version 3.0; acl "Write Subscribers"; allow (write) (userdn= "ldap:///self") and authmethod="ssl";)

  7. 单击“确定”。

    新的 ACI 随即添加到访问控制管理器窗口的 ACI 列表中。


限制对重要角色的访问

在目录中使用角色定义可以标识对公司业务至关重要的功能、标识网络和目录的管理,或者是用于其它用途。

例如,通过标识公司范围内在特定时间、特定日期可用的系统管理员子集,可以创建 superAdmin 角色。也可以创建 First Aid 角色,其中包括特定地点所有受过紧急救助训练的员工。有关创建角色定义的信息,请参阅第 156 页上的“分配角色”

当角色对公司或业务关键功能可提供任何类型的用户特权时,应考虑对该角色的访问加以限制。例如,siroe.com 的员工可向自己的条目中添加除 superAdmin 角色之外的任何角色。说明详见 ACI“Roles”示例。


ACI“Roles”
在 LDIF 中,要授予 siroe.com 员工向自己的条目中添加任何角色的权限(superAdmin 角色除外),应编写下列语句:

aci: (targetattr="*") (targattrfilters="add=nsRoleDN:(nsRoleDN !=
"cn=superAdmin, dc=siroe, dc=com")") (version 3.0; acl "Roles";
allow (write) userdn= "ldap:///self" and dns="*.siroe.com";)

本例假定将 ACI 添加到 ou=siroe-people,dc=siroe, dc=com 条目中。

从控制台上,执行下列操作可设置该权限:

  1. 在“目录”选项卡上,右键单击左侧导航树中的 siroe.com 节点,然后从弹出菜单中选择“设置访问权限”,从而显示访问控制管理器。

  2. 单击“新建”以显示访问控制编辑器。

  3. 在“用户/组”选项卡上,在“ACI 名称”字段中键入 Roles。在被授予访问权限的用户列表中,执行下列操作:

    1. 选择并删除“所有用户”,然后单击“添加”。

      此时显示“添加用户和组”对话框。

    2. 将“添加用户和组”对话框中的搜索区域设置为“特殊权限”,然后从搜索结果列表中选择“自身”。

    3. 单击“添加”按钮,从而在被授予了访问权限的用户列表中列出“自身”。

    4. 单击“确定”以关闭“添加用户和组”对话框。

  4. 在“权限”选项卡上,选中代表写入权限的复选框。务必清除其它复选框。

  5. 在“主机”选项卡上,单击“添加”以显示“添加主机过滤器”对话框。在“DNS 主机过滤器”字段中,键入 *.siroe.com。单击“确定”以关闭该对话框。

  6. 要为角色创建基于值的过滤器,请单击“手动编辑”按钮以切换到手动编辑状态。向 LDIF 语句的开头添加以下内容:

    (targattrfilters="add=nsRoleDN:(nsRoleDN != "cn=superAdmin, dc=siroe,dc=com")")

    LDIF 语句应该为:

    (targetattr="*") (targattrfilters="add=nsRoleDN:(nsRoleDN != "cn=superAdmin, dc=siroe,dc=com")") (target = "ldap:///dc=siroe,dc=com") (version 3.0; acl "Roles"; allow (write) (userdn = "ldap:///self") and (dns="*.siroe.com");)

  7. 单击“确定”。

    新的 ACI 随即添加到访问控制管理器窗口的 ACI 列表中。


向后缀授予组完全访问权限

多数目录都有用于标识某些公司功能的组。可授予这些组对所有或部分目录的完全访问权限。通过对组应用访问权限,可以避免向各个成员分别设置访问权限。只要将用户添加到组中,即授予其相应的访问权限。

对 siroe.com 来说,其人力资源 (HR) 组对目录的 ou=siroe-people 分支具有完全访问权限,因此可以更新员工数据库。说明详见 ACI“HR”示例。


ACI“HR”
在 LDIF 中,要授予 HR 组对目录中员工分支的全部权限,应编写下列语句:

aci: (targetattr="*") (version 3.0; acl "HR"; allow (all)
userdn= "ldap:///cn=HRgroup,ou=siroe-people,dc=siroe,dc=com";)

本例假定将 ACI 添加到 ou=siroe-people,dc=siroe, dc=com 条目中。

从控制台上,执行下列操作可设置该权限:

  1. 在“目录”选项卡上,右键单击左侧导航树中的 siroe.com 节点下的 siroe.com-people 条目,然后从弹出菜单中选择“设置访问权限”,从而显示访问控制管理器。

  2. 单击“新建”以显示访问控制编辑器。

  3. 在“用户/组”选项卡上,在“ACI 名称”字段中键入 HR。在被授予访问权限的用户列表中,执行下列操作:

    1. 选择并删除“所有用户”,然后单击“添加”。

      此时显示“添加用户和组”对话框。

    2. 将搜索区域设置为“用户和组”,然后在“搜索”字段中键入“HRgroup”。

      本例假定已创建 HR 组或角色。有关组和角色的详细信息,请参阅第 5 章“高级条目管理”。

    3. 单击“添加”按钮,从而在被授予了访问权限的用户列表中列出该 HR 组。

    4. 单击“确定”以关闭“添加用户和组”对话框。

  4. 在“权限”选项卡上,单击“全部检查”按钮。

    这将选中除“代理”权限以外的所有复选框。

  5. 单击“确定”。

    新的 ACI 随即添加到访问控制管理器窗口的 ACI 列表中。


授予添加和删除组条目的权限

有些机构希望只要能提高工作效率或对公司有所帮助,即允许员工在目录树中创建条目。

例如,siroe.com 中有一个活跃的社会活动委员会,下属有几个俱乐部:网球、游泳、滑雪、戏剧等。任何 siroe.com 员工都可以创建代表新俱乐部的组条目。说明详见 ACI“Create Group”示例。任何 siroe.com 员工都能成为上述某个组的成员。说明详见“允许用户向组中添加自身或从组中删除自身”中的 ACI "Group Members" 示例。 只有组的所有者才能修改或删除组条目。说明详见 ACI“Create Group”示例。


ACI“Create Group”
在 LDIF 中,要授予 siroe.com 员工在 ou=Social Committee 分支下创建组条目的权限,应编写下列语句:

aci: (target="ldap:///ou=social committee,dc=siroe,dc=com)
(targetattr="*")(targattrfilters="add=objectClass:
(objectClass=groupOfNames)") (version 3.0; acl "Create Group";
allow (read,search,add) (userdn= "ldap:///uid=*,ou=siroe-people,
dc=siroe,dc=com") and dns="*.siroe.com";)



注意 该 ACI 并不授予写入权限,即条目的创建者无法修改该条目。



本例假定将 ACI 添加到 ou=social committee, dc=siroe,dc=com 条目中。

从控制台上,执行下列操作可设置该权限:

  1. 在“目录”选项卡上,右键单击左侧导航树中 siroe.com 节点下的 Social Committee 条目,然后从弹出菜单中选择“设置访问权限”,从而显示访问控制管理器。

  2. 单击“新建”以显示访问控制编辑器。

  3. 在“用户/组”选项卡上,在“ACI 名称”字段中键入 Create Group。在被授予访问权限的用户列表中,执行下列操作:

    1. 选择并删除“所有用户”,然后单击“添加”。

      此时显示“添加用户和组”对话框。

    2. 将搜索区域设置为“特殊权限”,然后从搜索结果列表中选择“所有已鉴定的用户”。

    3. 单击“添加”按钮,从而在被授予了访问权限的用户列表中列出“所有已鉴定的用户”。

    4. 单击“确定”以关闭“添加用户和组”对话框。

  4. 在“权限”选项卡上,选中分别代表读取、搜索和添加权限的复选框。务必清除其它复选框。

  5. 在“目标 ”选项卡上,单击“此条目”,从而在目标目录项中显示 ou=social committee, dc=siroe,dc=com 后缀。

  6. 在“主机”选项卡上,单击“添加”以显示“添加主机过滤器”对话框。在“DNS 主机过滤器”字段中,键入 *.siroe.com。单击“确定”以关闭该对话框。

  7. 要创建基于值的过滤器,且仅允许员工向该子树中添加组条目,请单击“手动编辑”按钮,从而切换到手动编辑状态。向 LDIF 语句的开头添加以下内容:

    (targattrfilters="add=objectClass:(objectClass=groupOfNames)")

    LDIF 语句应该为:

    (targetattr = "*") (targattrfilters="add=objectClass:(objectClass=groupOfNames)") (target="ldap:///ou=social committee,dc=siroe,dc=com) (version 3.0; acl "Create Group"; allow (read,search,add) (userdn= "ldap:///all") and (dns="*.siroe.com"); )

  8. 单击“确定”。

    新的 ACI 随即添加到访问控制管理器窗口的 ACI 列表中。


ACI“Delete Group”
在 LDIF 中,要授予 siroe.com 员工对其在 ou=Social Committee 分支下的组条目的修改或删除权限,应编写下列语句:

aci: (target="ou=social committee,dc=siroe,dc=com)(targetattr = "*")
 
(targattrfilters="del=objectClass:(objectClass=groupOfNames)")
(version 3.0; acl "Delete Group"; allow (write,delete) userattr=
"owner#GROUPDN";)

本例假定将 aci 添加到 ou=social committee, dc=siroe,dc=com 条目中。

使用控制台创建该 ACI 并非十分有效,因为此时必须使用手动编辑模式来创建目标过滤器及检查组的所有权关系。


授予对组或角色的条件访问权限

许多情况下,当授予组或角色对目录的特权时,会希望确保这些特权不会受到试图扮演特权用户的入侵者的利用。因此,授予组或角色关键访问权的访问控制规则常常关联着许多条件。

例如,siroe.com 为使用其主机服务的公司 Company333 和 Company999 创建了目录管理员角色。它希望这些公司能管理自己的数据并实施自己的访问控制规则,而同时确保不受入侵者侵害。因此,Company333 和 Company999 对目录树的各个分支都具有完全权限,但前提是满足下列条件:

  • 使用 SSL 进行连接验证;

  • 访问请求发生在周一至周四上午 8 点和下午 6 点之间;

  • 访问请求来自为各个公司指定的 IP 地址。

这些条件的示例见各个公司相应的 ACI,即 ACI“Company333”和 ACI“Company999”。由于这些 ACI 的内容相同,因此下面中仅给出 “Company333”的 ACI 示例。


ACI“Company333”
在 LDIF 中,要在上述条件下授予 Company333 对自己目录分支的完全访问权限,则应编写下列语句:

aci: (target="ou=Company333,ou=corporate-clients,dc=siroe,dc=com")
 (targetattr = "*") (version 3.0; acl "Company333"; allow (all)
(roledn="ldap:///cn=DirectoryAdmin,ou=Company333,
ou=corporate-clients,dc=siroe,dc=com") and (authmethod="ssl") and
(dayofweek="Mon,Tues,Wed,Thu") and (timeofday >= "0800" and
timeofday <= "1800") and (ip="255.255.123.234"); )

本例假定将 ACI 添加到 ou=Company333, ou=corporate-clients,dc=siroe,dc=com 条目中。

从控制台上,执行下列操作可设置该权限:

  1. 在“目录”选项卡上,右键单击左侧导航树中 siroe.com 节点下的 Company333 条目,然后从弹出菜单中选择“设置访问权限”,从而显示访问控制管理器。

  2. 单击“新建”以显示访问控制编辑器。

  3. 在“用户/组”选项卡上,在“ACI 名称”字段中键入 Company333。在被授予访问权限的用户列表中,执行下列操作:

    1. 选择并删除“所有用户”,然后单击“添加”。

      此时显示“添加用户和组”对话框。

    2. 将搜索区域设置为“用户和组”,然后在“搜索”字段中键入 DirectoryAdmin。

      本例假定已创建管理员角色,其 cnDirectoryAdmin

    3. 单击“添加”按钮,从而在被授予了访问权限的用户列表中列出该管理员角色。

    4. 单击“确定”以关闭“添加用户和组”对话框。

  4. 在“权限”选项卡上,单击“全部检查”按钮。

  5. 在“目标”选项卡上,单击“此条目”,从而在目标目录项字段中显示 ou=Company333,ou=corporate-clients,dc=siroe,dc=com 后缀。

  6. 在“主机”选项卡上,单击“添加”以显示“添加主机过滤器”对话框。在“IP 地址主机过滤器”字段中,键入 255.255.123.234。单击“确定”以关闭该对话框。

    该 IP 地址必须是 Company333 管理员连接 siroe.com 目录时所用的有效主机 IP 地址。

  7. 在“次数”选项卡上,选择对应于周一至周四上午 8 点至下午 6 点的时间块。

    表的下面将显示一条信息,指示所选时间块。

  8. 要从 Company333 管理员处强制进行 SSL 验证,请单击“手动编辑”按钮,从而切换到手动编辑状态。在 LDIF 语句的末尾添加下列内容:

    and (authmethod="ssl")

    LDIF 语句应类似于:

    aci: (targetattr = "*")(target="ou=Company333,
     ou=corporate-clients,dc=siroe,dc=com") (version 3.0; acl
     "Company333"; allow (all) (roledn="ldap:///cn=DirectoryAdmin,
     ou=Company333,ou=corporate-clients, dc=siroe,dc=com") and
     (dayofweek="Mon,Tues,Wed,Thu") and (timeofday >= "0800" and
     timeofday <= "1800") and (ip="255.255.123.234") and
     (authmethod="ssl"); )

  9. 单击“确定”。

    新的 ACI 随即添加到访问控制管理器窗口的 ACI 列表中。


拒绝访问

如果目录中装有对业务至关重要的信息,就可能想拒绝对该目录的访问。

例如,siroe.com 希望所有用户都能读取自己条目下诸如连接时间或帐户结余等记费信息,但又明确希望拒绝向该信息中写入任何内容。示例分别参见 ACI“Billing Info Read”ACI“Billing Info Deny”


ACI“Billing Info Read”
在 LDIF 中,要授予用户读取自己条目中记费信息的权限,则应编写下列语句:

aci: (targetattr="connectionTime || accountBalance") (version 3.0;
acl "Billing Info Read"; allow (search,read)
userdn="ldap:///self";)

本例假定模式中已创建相关的属性,且将 ACI 添加到 ou=subscribers,dc=siroe,dc=com 条目中。

从控制台上,执行下列操作可设置该权限:

  1. 在“目录”选项卡上,右键单击左侧导航树中 siroe.com 节点下的 subscribers 条目,然后从弹出菜单中选择“设置访问权限”,从而显示访问控制管理器。

  2. 单击“新建”以显示访问控制编辑器。

  3. 在“用户/组”选项卡上,在“ACI 名称”字段中键入 Billing Info Read。在被授予访问权限的用户列表中,执行下列操作:

    1. 选择并删除“所有用户”,然后单击“添加”。

      此时显示“添加用户和组”对话框。

    2. 将“添加用户和组”对话框中的搜索区域设置为“特殊权限”,然后从搜索结果列表中选择“自身”。

    3. 单击“添加”按钮,从而在被授予了访问权限的用户列表中列出“自身”。

    4. 单击“确定”以关闭“添加用户和组”对话框。

  4. 在“权限”选项卡上,选中分别代表搜索和读取权限的复选框。务必清除其它复选框。

  5. 在“目标”选项卡上,单击“此条目”,从而在目标目录项字段中显示 ou=subscribers, dc=siroe,dc=com 后缀。在属性表中,选中分别代表 connectionTime 和 accountBalance 属性的复选框。

    应清除其它所有复选框。如果单击“不检查”按钮以清除表中所有对应于属性的复选框,并单击“名称”标题以按字母顺序组织列表,然后再选择相应的项,即可使上述任务更为简单。

    本例假定已将 connectionTime 和 accountBalance 属性添加到模式中。

  6. 单击“确定”。

    新的 ACI 随即添加到访问控制管理器窗口的 ACI 列表中。


ACI“Billing Info Deny”
在 LDIF 中,要拒绝用户修改自己条目中记费信息的权限,则应编写下列语句:

aci: (targetattr="connectionTime || accountBalance") (version 3.0;
acl "Billing Info Deny"; deny (write) userdn= "ldap:///self";)

本例假定模式中已创建相关的属性,且将 ACI 添加到 ou=subscribers,dc=siroe,dc=com 条目中。

从控制台上,执行下列操作可设置该权限:

  1. 在“目录”选项卡上,右键单击左侧导航树中 siroe.com 节点下的 subscribers 条目,然后从弹出菜单中选择“设置访问权限”,从而显示访问控制管理器。

  2. 单击“新建”以显示访问控制编辑器。

  3. 在“用户/组”选项卡上,在“ACI 名称”字段中键入 Billing Info Deny。在被授予访问权限的用户列表中,执行下列操作:

    1. 选择并删除“所有用户”,然后单击“添加”。

      此时显示“添加用户和组”对话框。

    2. 将“添加用户和组”对话框中的搜索区域设置为“特殊权限”,然后从搜索结果列表中选择“自身”。

    3. 单击“添加”按钮,从而在被授予了访问权限的用户列表中列出“自身”。

    4. 单击“确定”以关闭“添加用户和组”对话框。

  4. 在“权限”选项卡上,选中代表写入权限的复选框。务必清除其它复选框。

  5. 单击“手动编辑”按钮,然后在所显示的 LDIF 语句中将 allow 更改为 deny

  6. 在“目标”选项卡上,单击“此条目”,从而在目标目录项字段中显示 ou=subscribers, dc=siroe,dc=com 后缀。在属性表中,选中分别代表 connectionTime 和 accountBalance 属性的复选框。

    应清除其它所有复选框。如果单击“不检查”按钮以清除表中所有对应于属性的复选框,并单击“名称”标题以按字母顺序组织列表,然后再选择相应的项,即可使上述任务更为简单。

    本例假定已将 connectionTime 和 accountBalance 属性添加到模式中。

  7. 单击“确定”。

    新的 ACI 随即添加到访问控制管理器窗口的 ACI 列表中。


使用过滤功能设置目标

如果想设置访问控制以允许访问跨多个目录分布的大量条目,则可以使用过滤器来设置目标。记住:由于搜索过滤器不直接命名要进行访问权限管理的对象,因此容易无意间向错误的对象授予或拒绝访问权限,尤其是在目录结构较为复杂的情况下。此外,过滤器可导致难于对目录中的访问控制故障进行故障查找。

下列过程展示如何授予用户 bjensen 对财务机构所有成员的部门号、家庭电话号码、家庭邮政地址、JPEG 图像及管理者等属性的写入权限。

设置这些权限前,必须首先创建 accounting 分支点 (ou=accounting,dc=siroe,dc=com)。使用 iPlanet Directory Server Console 上的目录选项卡可以创建组织单元分支点。


允许用户向组中添加自身或从组中删除自身

许多目录将 ACI 设置为允许用户向组中添加自身或从组中删除自身。这一点较为有用。例如,可以允许用户向邮寄列表中添加自身,或者从中删除自身。

siroe.com 的员工可以将自身添加到 ou=social committee 子树下的任何组条目中。说明详见 ACI“Group Members”示例。


ACI“Group Members”
在 LDIF 中,要授予 siroe.com 员工向组中添加自身或从组中删除自身的权限,则应编写下列语句:

aci: (targettattr="member")(version 3.0; acl "Group Members";
allow (selfwrite)
(userdn= "ldap:///uid=*,ou=siroe-people,dc=siroe,dc=com") ;)

本例假定将 ACI 添加到 ou=social committee, dc=siroe,dc=com 条目中。

从控制台上,执行下列操作可设置该权限:

  1. 在“目录”选项卡上,右键单击左侧导航树中 siroe.com 节点下的 siroe-people 条目,然后从弹出菜单中选择“设置访问权限”,从而显示访问控制管理器。

  2. 单击“新建”以显示访问控制编辑器。

  3. 在“用户/组”选项卡上,在“ACI 名称”字段中键入 Group Members。在被授予访问权限的用户列表中,执行下列操作:

    1. 选择并删除“所有用户”,然后单击“添加”。

      此时显示“添加用户和组”对话框。

    2. 将“添加用户和组”对话框中的搜索区域设置为“特殊权限”,然后从搜索结果列表中选择“所有已鉴定的用户”。

    3. 单击“添加”按钮,从而在被授予了访问权限的用户列表中列出“所有已鉴定的用户”。

    4. 单击“确定”以关闭“添加用户和组”对话框。

  4. 在“权限”选项卡上,选中代表自写权限的复选框。务必清除其它复选框。

  5. 在“目标”选项卡上,在目标目录项字段中键入 dc=siroe,dc=com 后缀。在属性表中,选中代表 member 属性的复选框。

    应清除其它所有复选框。如果单击“不检查”按钮以清除表中所有对应于属性的复选框,并单击“名称”标题以按字母顺序组织列表,然后再选择相应的项,即可使上述任务更为简单。

  6. 单击“确定”。

    新的 ACI 随即添加到访问控制管理器窗口的 ACI 列表中。


定义包含逗号的 DN 的权限

包含逗号的 DN 要求在 LDIF ACI 语句中进行特殊的处理。在 ACI 语句的目标和绑定规则部分,逗号必须用单个反斜杠 (\) 进行转义。下面给出该语法的示例:

dn: dc=siroe.com Bolivia\, S.A.,dc=com
objectClass: top
objectClass: organization
aci: (target="ldap:///dc=siroe.com Bolivia\,
S.A.,dc=com")(targetattr="*") (version 3.0; acl "aci 2"; allow
(all) groupdn = "ldap:///cn=Directory Administrators,dc=siroe.com
Bolivia\, S.A.,dc=com";)


代理验证 ACI 示例

代理验证方法是一种特殊的验证方式:使用自身的标识绑定到目录的用户通过代理验证被授予其他用户的权限。

本例中,假设:

  • 客户机应用程序的绑定 DN 为 "uid=MoneyWizAcctSoftware, ou=Applications,dc=siroe,dc=com"

  • 客户机应用程序所请求访问的目标子树为 ou=Accounting,dc=siroe,dc=com

  • 目录中存在对 ou=Accounting,dc=siroe,dc=com 子树具有访问权限的财务管理员。

为使客户机应用程序获得对 Accounting 子树的访问权(具有与财务管理员相同的访问权限):

  • 财务管理员必须具有对 ou=Accounting,dc=siroe,dc=com 子树的访问权限。例如,下列 ACI 授予财务管理员条目全部权限:

    aci: (target="ldap:///ou=Accounting,dc=siroe,dc=com")
     (targetattr="*") (version 3.0; acl "allowAll-AcctAdmin"; allow
     (all) userdn="uid=AcctAdministrator,ou=Administrators,
     dc=siroe,dc=com")

  • 目录中必须存在向客户机应用程序授予代理权限的以下 ACI:

    aci: (target="ldap:///ou=Accounting,dc=siroe,dc=com")
     (targetattr="*") (version 3.0; acl "allowproxy-
     accountingsoftware"; allow (proxy) userdn=
     "uid=MoneyWizAcctSoftware,ou=Applications,dc=siroe,dc=com")

利用该 ACI,MoneyWizAcctSoftware 客户机应用程序即可绑定到目录上并发送申请对代理 DN 访问权限的 LDAP 命令(例如 ldapsearchldapmodify)。



注意 目录管理员 DN 不能用作代理 DN。也不能将代理权限授予目录管理员。另外,如果 iPlanet Directory Server 在同一绑定操作中接收到一个以上的代理验证控制,就会向客户机应用程序返回错误,并且绑定企图将失败。





查看条目的 ACI



通过运行以下 ldapsearch 命令,可以查看目录中单个后缀下的所有 ACI:

ldapsearch -h host -p port -b baseDN -D rootDN -w rootPassword (aci=*) aci

在控制台上,利用访问控制管理器可以查看应用于特定条目的所有 ACI。

  1. 在 Directory Console 上,进入“目录”选项卡,右键单击导航树中的条目,然后选择“设置访问权限”。

    此时显示访问控制管理器。其中包含属于所选条目的 ACI 列表。

  2. 选中“显示继承的 ACI”复选框,从而显示也同时应用的、在所选条目之上的条目中创建的所有 ACI。



高级访问控制:使用宏 ACI

在使用重复目录树结构的机构中,有时可以使用宏对目录中所用的 ACI 数量进行优化。减少目录树中的 ACI 数可以简化对访问控制策略的管理,同时提高 ACI 内存使用的效率。

宏是 ACI 中用于代表 DN(或部分 DN)的占位符。使用宏可以表示 ACI 中目标部分或绑定规则部分的 DN,或者是上述两部分的 DN。实际上,当 iPlanet Directory Server 获取到进入的 LDAP 操作时,ACI 宏将按 LDAP 操作所确定的目标进行资源匹配。如果存在匹配,宏就会替换为目标资源的 DN 值。iPlanet Directory Server 随即对 ACI 进行正常评估。


宏 ACI 示例

最好用示例来解释宏 ACI 及其工作原理。图 6-4 给出的目录树中就使用了宏 ACI 来有效地减少 ACI 的整体数量。

本例中,请注意同一目录树结构 (ou=groups, ou=people) 的子域重复形式。这种形式也跨目录树重复,因为 siroe.com 目录树存储有下列后缀:dc=hostedCompany2, dc=siroe,dc=comdc=hostedCompany3,dc=siroe,dc=com

目录树中应用的 ACI 也具有重复形式。例如,下列 ACI 位于 dc=hostedCompany1,dc=siroe,dc=com 节点上:

aci: (targetattr="*")(targetfilter=(objectClass=nsManagedDomain))
(version 3.0; acl "Domain access"; allow (read,search) groupdn=
"ldap:///cn=DomainAdmins,ou=Groups,dc=hostedCompany1,dc=siroe,
dc=com";)

该 ACI 向 DomainAdmins 组授予对 dc=hostedCompany1,dc=siroe,dc=com 目录树中所有条目的读取和搜索权限。

图 6-4    宏 ACI 的目录树示例



下列 ACI 位于 dc=hostedCompany1,dc=siroe,dc=com 节点上。

aci: (targetattr="*")(targetfilter=(objectClass=nsManagedDomain))
(version 3.0; acl "Domain access"; allow (read,search)
groupdn="ldap:///cn=DomainAdmins,ou=Groups,dc=hostedCompany1,
dc=siroe,dc=com";)

下列 ACI 位于 dc=subdomain1,dc=hostedCompany1, dc=siroe,dc=com 节点上:

aci: (targetattr="*")(targetfilter=(objectClass=nsManagedDomain))
  (version 3.0; acl "Domain access"; allow (read,search)
  groupdn="ldap:///cn=DomainAdmins,ou=Groups,dc=hostedCompany1,
dc=hostedCompany1,dc=siroe,dc=com";)

下列 ACI 位于 dc=hostedCompany2,dc=siroe,dc=com 节点上:

aci: (targetattr="*")(targetfilter=(objectClass=nsManagedDomain))
  (version 3.0; acl "Domain access"; allow (read,search)
groupdn="ldap:///cn=DomainAdmins,ou=Groups,dc=hostedCompany2,
  dc=siroe,dc=com";)

下列 ACI 位于 dc=subdomain1,dc=hostedCompany2, dc=siroe,dc=com 节点上:

aci: (targetattr="*")(targetfilter=(objectClass=nsManagedDomain))
  (version 3.0; acl "Domain access"; allow (read,search)
groupdn="ldap:///cn=DomainAdmins,ou=Groups, dc=subdomain1,
dc=hostedCompany2,dc=siroe,dc=com";)

在上述四个 ACI 中,唯一的区别是 groupdn 关键字中指定的 DN。通过使用宏来表示 DN,即可用目录树根位置(dc=siroe,dc=com 节点)上的单个 ACI 来替换这些 ACI。该 ACI 表示为:

aci: (target="ldap:///ou=Groups,($dn),dc=siroe,dc=com")
(targetattr="*")(targetfilter=(objectClass=nsManagedDomain))
  (version 3.0; acl "Domain access"; allow (read,search) groupdn=
"ldap:///cn=DomainAdmins,ou=Groups,[$dn],dc=siroe,dc=com";)

注意:此处引入了以前从未使用过的目标关键字 target。

在上例中,ACI 的数量从四个减少到一个。但真正的益处在于跨目录树及沿目录树向下所具有的重复形式数。


宏 ACI 语法

宏 ACI 提供下列类型的表达式来替换 DN 或 DN 的一部分:

  • ($dn)

  • [$dn]

  • ($attr.attrName),其中 attrName 代表目标条目所含的属性

简言之,用于提供绑定凭证(例如 userdnroledngroupdnuserattr)的 ACI 关键字统称为主体,以对比 ACI 的目标。宏 ACI 可用于 ACI 的目标部分或主体部分。

表 6-3 给出可使用 DN 宏的 ACI 部分:


表 6-3    ACI 关键字中的宏

ACI 关键字

($dn)  

target、targetfilter、userdn、roledn、groupdn、userattr  

[$dn]  

targetfilter、userdn、roledn、groupdn、userattr  

($attr.attrName)  

userdn、roledn、groupdn、userattr  

下列限制条件适用:

  • 如果在 targetfilteruserdnroledngroupdnuserattr 中使用 ($dn),则必须定义包含 ($dn) 的目标。

  • 如果在 targetfilteruserdnroledngroupdnuserattr 中使用 [$dn],则必须定义包含 ($dn) 的目标。

简言之,使用任何宏时将始终需要包含 ($dn) 宏的目标定义。

可以将 ($dn) 宏和 ($attr.attrName) 宏组合到一起。


($dn) 宏匹配

($dn) 宏将被 LDAP 请求中作为目标的资源匹配部分所替换。例如,假定 LDAP 请求的目标为 cn=all, ou=groups,dc=subdomain1,dc=hostedCompany1,dc=siroe,dc=com 条目,而定义目标的 ACI 如下所示:

(target="ldap:///ou=Groups,($dn),dc=siroe,dc=com")

($dn) 宏匹配 "dc=subdomain1, dc=hostedCompany1"。

当 ACI 的主体也使用 ($dn) 时,与目标相匹配的子串将用于扩展主体:例如:

aci: (target="ldap:///ou=*,($dn),dc=siroe,dc=com")
(version 3.0; acl "Domain access"; allow (read,search) groupdn=
"ldap:///cn=DomainAdmins,ou=Groups,($dn),dc=siroe,dc=com";)

这种情况下,如果目标中匹配 ($dn) 的字符串为 dc=subdomain1, dc=hostedCompany1,则同一字符串也将用于主体中。上述 ACI 的扩展如下所示:

aci: (targetattr="*") (target="ldap:///ou=Groups,dc=subdomain1,
dc=hostedCompany1, dc=siroe,dc=com") (version 3.0; acl "Domain
access"; allow (read,search)
groupdn="ldap:///cn=DomainAdmins,ou=Groups,dc=subdomain1,
  dc=hostedCompany1,dc=siroe,dc=com";)

扩展宏后, iPlanet Directory Server 将按常规过程评估 ACI,从而确定是否授予访问权限。


[$dn] 宏匹配

[$dn] 的匹配机制与 ($dn) 的略有不同。目标资源的 DN 将被检查数次,每次都会丢弃最左侧的 RDN 组件,直到找到匹配的对象。

例如,假设 LDAP 请求的目标为 cn=all,ou=groups, dc=subdomain1,dc=hostedCompany1,dc=siroe,dc=com 子树,且具有下列 ACI:

aci: (targetattr="*") (target="ldap:///ou=Groups,($dn),dc=siroe,
dc=com") (version 3.0; acl "Domain access"; allow (read,search)
groupdn="ldap:///cn=DomainAdmins,ou=Groups,[$dn],dc=siroe,dc=com";
)

扩展该 ACI 的步骤如下所示:

  1. 对象中的 ($dn) 匹配 dc=subdomain1,dc=hostedCompany1

  2. 将主体中的 [$dn] 替换为 dc=subdomain1,dc=hostedCompany1

    结果为 groupdn="ldap:///cn=DomainAdmins,ou=Groups, dc=subdomain1,dc=hostedCompany1,dc=siroe, dc=com"。如果绑定 DN 是该组的成员,则终止匹配过程,然后对 ACI 进行评估。如果不匹配,过程将继续。

  3. 将主体中的 [$dn] 替换为 dc=hostedCompany1

    结果为 groupdn="ldap:///cn=DomainAdmins,ou=Groups, dc=hostedCompany1,dc=siroe,dc=com"。这种情况下,如果绑定 DN 不是该组的成员,则不对 ACI 进行评估。如果是成员,则对 ACI 进行评估。

[$dn] 宏的优势在于:它提供了一种灵活地向域级别上的管理员授予对目录树所有子域访问权的方式。因此,它对于表示域之间的层次关系较为有用。

例如,请考虑下列 ACI:

aci: (target="ldap:///ou=*,($dn),dc=siroe,dc=com")
(targetattr="*")(targetfilter=(objectClass=nsManagedDomain))
(version 3.0; acl "Domain access"; allow (read,search) groupdn=
"ldap:///cn=DomainAdmins,ou=Groups,[$dn],dc=siroe,dc=com";)

它授予 cn=DomainAdmins,ou=Groups, dc=hostedCompany1,dc=siroe,dc=com 成员对 dc=hostedCompany1 下所有子域的访问权,从而使属于该组的管理员可以访问诸如 ou=people, dc=subdomain1.1, dc=subdomain1 的子树。

但同时,cn=DomainAdmins,ou=Groups, dc=subdomain1.1 的成员也将被拒绝访问 ou=people,dc=hostedCompany1ou=people,dc=hostedCompany1 节点。


($attr. attrName) 宏匹配

($attr.attrname) 宏始终用于 DN 的主体部分。例如,可以定义下列 roledn

roledn = "ldap:///cn=DomainAdmins,($attr.ou)"

假设服务器接收到以下列条目为目标的 LDAP 操作:

dn: cn=Heather Blue, ou=People, dc=HostedCompany1, dc=siroe, dc=com
cn: Heather Blue
sn: Blue
ou: Engineering, dc=HostedCompany1, dc=siroe, dc=com
...

为评估 ACI 的 roledn 部分,服务器将查找目标条目中存储的 ou 属性,然后使用该属性的值来扩展宏。因此,本例中的 roledn 将扩展为:

roledn = "ldap:///cn=DomainAdmins,ou=Engineering,dc=HostedCompany1, dc=siroe,dc=com"

iPlanet Directory Server 随即按照正常的 ACI 评估算法对 ACI 进行评估。

如果属性为多值属性,就会使用各个值来扩展宏,然后使用第一个成功匹配的值。

请考虑下例:

dn: cn=Heather Blue, ou=People, dc=HostedCompany1, dc=siroe, dc=com
cn: Heather Blue
sn: Blue
ou: Engineering, dc=HostedCompany1, dc=siroe, dc=com
ou: People, dc=HostedCompany1,dc=siroe, dc=com
...

这种情况下,当 iPlanet Directory Server 评估 ACI 时,它将对下列扩展表达式执行逻辑 OR 操作:

roledn = "ldap:///cn=DomainAdmins,ou=Engineering,dc=HostedCompany1, dc=siroe,dc=com"

roledn = "ldap:///cn=DomainAdmins,ou=People,dc=HostedCompany1, dc=siroe,dc=com"



访问控制和复制



ACI 是作为条目属性存储的。因此,如果包含 ACI 的条目是所复制的数据库的一部分,则 ACI 将象其它任何属性那样被复制。

ACI 的评估始终在为进入的 LDAP 请求提供服务的 iPlanet Directory Server 上进行。这就意味着当客户服务器接收到更新请求时,在评估原版服务器是否能向该请求提供服务之前,它会向原版服务器返回引荐。



记录访问控制信息



要获取错误日志中有关访问控制的信息,则必须设置相应的日志级别。

要从控制台设置错误日志的级别:

  1. 在控制台上,单击“目录”选项卡,右键单击 config 节点,然后从弹出菜单中选择“属性”。

    这样将为 cn=config 条目显示属性编辑器。

  2. 向下滚动属性值对的列表,查找 nsslapd-errorlog-level 属性。

  3. nsslapd-errorlog-level 值字段中已显示的值加 128。

    例如,如果已显示的值为 8192(复制调试),则应将值更改为 8320。有关错误日志级别的完整信息,请参阅 iPlanet Directory Server 配置、命令和文件参考指南

  4. 单击“确定”以关闭属性编辑器。



与早期版本的兼容性

有些在早期版本的 iPlanet Directory Server 中使用的 ACI 关键字在 iPlanet Directory Server 5.1 中已不赞成使用。但出于向后兼容性的原因,目前系统仍支持这些关键字。这些关键字是:

  • userdnattr

  • groupdnattr

因此,如果已在传统供给服务器和客户 iPlanet Directory Server 5.1 之间建立复制协议,则在复制 ACI 时就不应遇到任何问题。


上一页      目录     索引      文档主页      下一页     
版权所有 © 2001 Sun Microsystems, Inc.。部分版权所有 © 2001 Netscape Communications Corp.。保留所有权利。

最近更新时间:2002 年 2 月 15 日