Sun Java 徽标     上一章      目录      索引      下一章     

Sun 徽标
Sun Java(TM) System Directory Server 5 2004Q2 管理指南 

第 5 章
管理身份和角色

除了目录中数据的分层结构以外,管理代表用户的条目通常需要创建组和共享公共属性值。Directory Server 通过组、角色和服务类 (CoS) 提供此高级条目管理功能。

组是命名其他条目的条目,可作为成员列表或成员过滤器。角色通过在角色的每个成员上生成 nsrole 属性的机制提供与组相同的功能,以及其他更多功能。CoS 同样生成虚拟属性,允许条目共享公共属性值,而无须将其存储在各个条目中。

Directory Server 提供了基于角色和 CoS 虚拟属性的值执行搜索的功能。用于任何操作中的过滤器字符串都可以包括 nsRole 属性或 CoS 定义生成的任何属性,并对该属性的值执行任何比较操作。但是,无法创建虚拟 CoS 属性的索引,因此任何有关 CoS 生成的属性的搜索都不会编入索引。这样可能会耗用大量的资源(无论是时间,还是内存)。

要充分利用角色和服务类所提供的功能,应在目录部署的计划阶段确定目录拓扑结构。有关这些机制的说明及其简化拓扑结构的方式,请参阅《Directory Server Deployment Planning Guide》的 Chapter 4 "The Directory Information Tree"

本章包含以下小节:


管理组

利用组可以关联条目以方便管理,如定义 ACI 的组。组定义是特殊条目,可以为静态列表中的成员命名,或提供过滤器以定义一组动态条目。

可能的组成员范围是整个目录,而不管组定义条目位于何处。为简化管理,所有组定义条目通常存储在一个位置,通常在根后缀下的 ou=Groups

定义静态组的条目是从 groupOfNamesgroupOfUniqueNames 对象类继承。组成员作为 memberuniqueMember 属性的多个值按其 DN 列出。

定义动态组的条目是从 groupOfURLs 对象类继承。组成员身份由多值 memberURL 属性中给出的一个或多个过滤器定义。动态组中的成员是评估过滤器时与任一过滤器匹配的条目。

以下各节介绍如何使用控制台创建和修改静态组和动态组。

添加新静态组

  1. 在 Directory Server Console 的顶级“目录”选项卡上,右键单击目录树中希望添加新组的条目,然后选择“新建”>“组”项目。
  2. 或者,从“对象”菜单中选择条目,并选择“新建”>“组”项目。

  3. 在“新建组”对话框中,必须在“组名称”字段中为新组键入一个名称,可以在“说明”字段中添加组的说明(可选)。组名称将成为新组条目的 cn(通用名)属性的值,并显示在其 DN 中。
  4. 在对话框左侧列表中单击“成员”。在右侧面板中,默认情况下选择“静态组”选项卡。
  5. 单击“添加”将新成员添加到组中。显示标准“搜索用户和组”对话框。
  6. 在“搜索”下拉列表中,选择“用户”并输入要搜索的字符串,然后单击“搜索”。单击“高级”按钮以搜索特定属性或特定的属性值。
  7. 在结果中选择一个或多个条目并单击“确定”。重复此步骤,将所有要添加的成员添加至静态组。


    由于链接,静态组成员可能是远程的。可以使用引用完整性插件确保删除的成员条目从静态组条目中自动删除。有关使用具有链接的引用完整性的详细信息,请参阅“配置链接策略”


  8. 单击左侧列表中的“语言”,使用其他语言为您的组命名和添加说明字符串。当控制台使用相应语言环境时,将显示上述内容。
  9. 单击“确定”创建新组。它显示为创建时所在条目的子级。

添加新的动态组

  1. 在 Directory Server Console 的顶级“目录”选项卡上,右键单击目录树中希望添加新组的条目,然后选择“新建”>“组”项目。
  2. 或者,从“对象”菜单中选择条目,并选择“新建”>“组”项目。

  3. 在“新建组”对话框中,在“组名字”段中键入新组的名称。可以在“说明”字段中添加组的可选说明。组名称将成为新组条目的 cn(通用名)属性的值,并显示在其 DN 中。
  4. 在对话框左侧的列表中单击“成员”,然后在右侧面板中选择“动态组”选项卡。
  5. 单击“添加”创建 LDAP URL,包含将定义组成员的过滤器字符串。显示标准“构造及测试 LDAP URL” 对话框。
  6. 在文本字段中输入 LDAP URL,或选择“构造”以按照指导构造包含用于组的过滤器的 LDAP URL。单击“测试”查看该过滤器返回的条目列表。
  7. 完成构造 URL 后单击“确定”。重复此步骤,添加包含将定义动态组的过滤器的所有 URL。

  8. 单击左侧列表中的“语言”,使用其他语言为您的组命名和添加说明字符串。当控制台使用相应语言环境时,将显示上述内容。
  9. 单击“确定”创建新组。它显示为创建时所在条目的子级。

修改组定义

  1. 在 Directory Server Console 的顶级“目录”选项卡上,双击代表要修改的组的条目。
  2. 或者,从“对象”菜单中选择条目并选择“打开”。

  3. 在“编辑条目”对话框中,对“常规”、“成员”或“语言”类别中的组信息作出更改。可以添加或删除静态组的成员,或者添加、编辑或删除包含用于动态组的过滤器的 URL。
  4. 修改完组定义后单击“确定”。
  5. 要在控制台中“查看”更改,请从查看菜单中选择“刷新”。

删除组定义

要删除组的两种类型之一,只需删除定义它的条目。


分配角色

角色是一种备用分组机制,旨在更高效和轻松地用于应用程序。角色如同组一样定义和管理,但是除此之外,成员条目还拥有一个生成的属性,该属性指明它们参与的角色。例如,应用程序可以只是读取条目的角色,而不是选择组并浏览成员列表。

默认情况下,角色的范围限制为定义该角色的子树。Directory Server 5.2 引入了嵌套角色的扩展范围,允许嵌套角色位于其他子树中的角色,并允许在目录中的任何位置都具有成员。有关扩展角色范围的详细信息,请参阅“嵌套角色定义示例”

关于角色

每个角色都具有拥有该角色的成员或条目。由于条目是从目录检索,角色机制自动在每个条目(任何角色的成员)中生成 nsRole 属性。该多值属性包含所有角色定义(条目是其成员)的 DN。nsRole 属性是一个计算属性。它不随条目本身存储,而是作为操作结果中的普通属性返回到客户机应用程序。

Directory Server 支持三种类型的角色:

角色允许客户机应用程序直接读取某个条目的 nsRole 属性,从而确定该条目的所有角色成员身份。这样就简化了客户机优化目录使用的过程。角色可以与 CoS 机制结合在一起使用以便为角色成员生成其他属性(请参阅“创建基于角色的属性”)。角色可用于定义访问控制(请参阅“定义角色访问—roledn 关键字”)。角色还支持其他功能,如立即激活或停用其所有成员(请参阅“停用和激活用户和角色”)。

搜索 nsRole 属性

Directory Server 允许在任何搜索过滤器中使用 nsRole 属性。可以使用任何比较操作符为该属性搜索特定值。搜索 nsRole 属性时,一定要留意以下注意事项:

nsRole 属性的权限

nsRole 属性仅能由角色机制进行分配,而不能由任何目录用户写入或修改。但是,应注意以下事项:

有关如何使用目录中角色的详细信息,请参阅《Directory Server Deployment Planning Guide》的 Chapter 4 "The Directory Information Tree"

使用控制台分配角色

本节介绍通过 Directory Server Console 创建和修改角色的过程。

创建受管理的角色

受管理的角色拥有角色定义条目,并且通过将 nsRoleDN 属性添加到每个成员条目来指派成员。要使用控制台创建并将成员添加到受管理的角色,请执行以下操作:

  1. 在 Directory Server Console 的顶级“目录”选项卡上,右键单击目录树中希望添加新角色定义的条目,然后选择“新建”>“角色”项目。
  2. 或者,从“对象”菜单中选择条目,并选择“新建”>“角色”项目。

  3. 在“创建新角色”对话框中,必须在“角色名称”字段中为新角色键入一个名称,可以在“说明”字段中添加角色的说明(可选)。组名称将成为新角色条目的 cn(通用名)属性的值,并显示在其 DN 中。
  4. 在对话框左侧列表中单击“成员”。默认情况下,在右侧窗格中已选择“受管理的角色”单选按钮。
  5. 单击成员列表下的“添加”,将新成员添加到角色中。显示标准“搜索用户和组”对话框。
  6. 在“搜索”下拉列表中,选择“用户”并输入要搜索的字符串,然后单击“搜索”。单击“高级”按钮以搜索特定属性或特定的属性值。
  7. 在结果中选择一个或多个条目并单击“确定”。重复此步骤,将所有要添加的成员添加至该受管理的角色。

  8. 完成将条目添加到角色后,单击“确定”。新角色显示在目录树中并带有受管理角色的图标,所有成员条目会获得属性 nsRoleDN,其值为该新角色条目的 DN。
  9. 创建角色后,还可以将该角色分配到任何条目,方法是将 nsRoleDN 属性添加到条目,其值为角色条目的 DN。

创建已过滤的角色

如果条目具有角色定义中 LDAP 过滤器选定的属性或属性值,则条目为已过滤角色的成员。


已过滤的角色的过滤器字符串可能基于任何属性,不包括由 CoS 机制生成的其他虚拟属性(请参阅“关于 CoS”)。


要使用控制台创建并将成员添加到已过滤的角色,请执行以下操作:

  1. 在 Directory Server Console 的顶级“目录”选项卡上,右键单击目录树中希望添加新角色定义的条目,然后选择“新建”>“角色”项目。
  2. 或者,从“对象”菜单中选择条目,并选择“新建”>“角色”项目。

  3. 在“创建新角色”对话框中,必须在“角色名称”字段中为新角色键入一个名称,可以在“说明”字段中添加角色的说明(可选)。角色名称将成为新角色条目的 cn(通用名)属性的值,并显示在其 DN 中。
  4. 在对话框左侧列表中单击“成员”,并且在右侧面板中选择“已过滤的角色”单选按钮。
  5. 在文本字段中输入 LDAP 过滤器,以定义将确定角色成员的过滤器。或者,单击“构造”以按照指导说明构造一个 LDAP 过滤器。
  6. 如果单击“构造”,则将显示“构造 LDAP 过滤器”对话框。放弃 LDAP 服务器主机、端口、基准 DN 和搜索范围字段,因为您无法在已过滤的角色定义中指定这些。
    1. 在已过滤的角色中仅搜索用户。这样会将 (objectclass=person) 组件添加到过滤器。如果不需要此组件,则必须在“创建新角色”对话框的文本字段中编辑 LDAP 过滤器。
    2. 通过从“位置”下拉列表中选择属性并设置匹配条件来调整过滤器。要添加其他过滤器,请单击“多于”。要删除不必要的过滤器,请单击“少于”。
    3. 单击“确定”在已过滤的角色定义中使用您的过滤器。然后可以在文本字段中编辑过滤器以修改任何组件。
  7. 单击“测试”试用您的过滤器。“过滤器测试结果”对话框将显示当前匹配过滤器的条目。
  8. 单击“确定”创建新的角色条目。新角色显示在目录树中,且具有已过滤角色的图标。

创建嵌套角色

嵌套角色使您可以创建包含其他角色的角色,并扩展现有角色的范围。创建嵌套角色之前,必须存在另一个角色。创建嵌套角色时,控制台显示一个可用于嵌套的角色列表。嵌套角色可能包含另一个嵌套角色,最多嵌套 30 层。超出此固定限制之后,对该角色进行评估时,服务器将记录一条错误消息。

要使用控制台创建并将成员添加到嵌套角色,请执行以下操作:

  1. 在 Directory Server Console 的顶级“目录”选项卡上,右键单击目录树中希望添加新角色定义的条目,然后选择“新建”>“角色”项目。
  2. 或者,从“对象”菜单中选择条目,并选择“新建”>“角色”项目。

  3. 在“创建新角色”对话框中,必须在“角色名称”字段中为新角色键入一个名称,可以在“说明”字段中添加角色的说明(可选)。角色名称将成为新角色条目的 cn(通用名)属性的值,并显示在其 DN 中。
  4. 在对话框左侧列表中单击“成员”,并且在右侧面板中选择“嵌套角色”单选按钮。
  5. 单击“添加”将现有角色添加到嵌套角色列表中。在显示的“角色选择器”对话框中,从可用角色列表中选择一个或多个角色,然后单击确定。
  6. 单击“确定”创建嵌套角色条目。新角色显示在目录中,且具有嵌套角色的图标。
  7. 要修改嵌套角色的范围,请使用“嵌套角色定义示例”中显示的命令行过程。

查看并编辑条目角色

  1. 在 Directory Server Console 的顶级“目录”选项卡上,浏览目录树以显示要为其查看或编辑角色的条目。
  2. 右键单击条目并从弹出菜单中选择“设置角色”。或者,可以左键单击条目以选定条目,并从“对象”菜单中选择“设置角色”。
  3. 显示“设置角色”对话框。

  4. 选择“受管理的角色”选项卡,显示该条目所属的受管理角色。您可以执行以下操作:
    • 要添加新的受管理角色,请单击“添加”,并从“角色选择器”窗口选择可用的角色。在“角色选择器”窗口中单击“确定”。
    • 要删除受管理的角色,请选择该角色并单击“删除”。
    • 要编辑与条目相关的受管理的角色,请在表格中选定它,然后单击“编辑”。该角色显示在角色的自定义编辑器中。对该角色进行任意更改,然后单击“确定”,保存新角色定义。
  5. 选择“其他角色”选项卡,查看该条目所属的已过滤或嵌套角色。要改变已过滤或嵌套角色中的角色成员关系,必须编辑角色定义:
    • 选择角色,然后单击“编辑”以显示角色的自定义编辑器。对该角色进行更改,然后单击“确定”,保存新角色定义。
  6. 完成对角色的修改后,单击“确定”保存更改。

修改角色条目

  1. 在 Directory Server Console 上,选择“目录”选项卡。
  2. 浏览导航树以找到现有角色的定义条目。角色是创建时所在条目的子级。双击该角色。
  3. 显示“编辑条目”对话框。

  4. 单击左侧窗格中的“常规”以更改角色名称和说明。
  5. 单击左侧窗格中的“成员”以更改受管理角色和嵌套角色的成员或者更改已过滤角色的过滤器。
  6. 单击“确定”以保存更改。

删除角色

删除角色只会删除角色定义的条目,而不会删除其成员。

要删除角色,请执行以下操作:

  1. 在 Directory Server Console 中,选择“目录”选项卡。
  2. 浏览导航树以找到角色的定义条目。角色是创建时所在条目的子级。
  3. 右键单击角色并选择“删除”。
  4. 显示对话框,要求您确认删除操作。单击“是”。

  5. 显示“删除的条目”对话框,通知您已成功删除该角色。单击“确定”。

  6. 删除角色会删除角色条目,但不会删除每个角色成员的 nsRoleDN 属性。要删除该属性,请启用引用完整性插件并对其进行配置以管理 nsRoleDN 属性。有关详细信息,请参阅“维护引用的完整性”


从命令行管理角色

在目录管理员可通过命令行公用程序访问的条目中定义角色。创建角色后,即可向其分配成员,如下所示:

所有角色定义都继承 LDAPsubentrynsRoleDefinition 对象类。下表列出每种类型的角色所特定的其他对象类和相关属性。

表 5-1 用于定义角色的对象类和属性

角色类型

对象类

属性

受管理的角色

nsSimpleRoleDefinition
nsManagedRoleDefinition

Description(可选)

已过滤的角色

nsComplexRoleDefinition
nsFilteredRoleDefinition

nsRoleFilter
Description
(可选)

嵌套角色

nsComplexRoleDefinition
nsNestedRoleDefinition

nsRoleDN
Description
(可选)

受管理的角色定义示例

要创建将分配给所有 marketing(市场部)成员的角色,请运行下面的 ldapmodify 命令:

ldapmodify -a -h host -p port -D "cn=Directory Manager" -w password
dn: cn=Marketing,ou=marketing,ou=People,dc=example,dc=com
objectclass: top
objectclass: LDAPsubentry
objectclass: nsRoleDefinition
objectclass: nsSimpleRoleDefinition
objectclass: nsManagedRoleDefinition
cn: Marketing
description: managed role for marketing staff

请注意,nsManagedRoleDefinition 对象类继承 LDAPsubentrynsRoleDefinitionnsSimpleRoleDefinition 对象类。

通过使用下面的 ldapmodify 命令更新其条目,将该角色分配给名为 Bob 的 marketing 成员:

ldapmodify -h host -p port -D "cn=Directory Manager" -w secret
dn: cn=Bob Arnold,ou=marketing,ou=People,dc=example,dc=com
changetype: modify
add: nsRoleDN
nsRoleDN: cn=Marketing,
ou=marketing,ou=People,dc=example,dc=com

条目中存在的 nsRoleDN 属性表示该条目是受管理角色的成员,而该角色由其角色定义的 DN 标识。若要允许用户修改 nsRoleDN 属性,但还要防止他们添加或删除 nsManagedDisabledRole,请添加以下访问控制指令 (ACI):

aci: (targetattr="nsRoleDN")(targattrfilters="add=nsRoleDN:
 (!(nsRoleDN=cn=AdministratorRole,dc=example,dc=com)),
 del=nsRoleDN:(!(nsRoleDN=cn=nsManagedDisabledRole,dc=example,
 dc=com)
")(version3.0;aci "allow mod of nsRoleDN by self except
 for critical values
"; allow(write) userdn="ldap:///self";)

已过滤的角色定义示例

要为 sales managers(销售部经理)(假设他们都有 isManager 属性)设置已过滤的角色,请运行下面的 ldapmodify 命令:

ldapmodify -a -h host -p port -D "cn=Directory Manager" -w password
dn: cn=ManagerFilter,ou=sales,ou=People,dc=example,dc=com
objectclass: top
objectclass: LDAPsubentry
objectclass: nsRoleDefinition
objectclass: nsComplexRoleDefinition
objectclass: nsFilteredRoleDefinition
cn: ManagerFilter
nsRoleFilter: (isManager=True)
Description: filtered role for sales managers

请注意,nsFilteredRoleDefinition 对象类继承 LDAPsubentrynsRoleDefinitionnsComplexRoleDefinition 对象类。nsRoleFilter 属性指定将查找 ou=sales 组织(有从属组织)中的所有员工的过滤器,例如:

ldapsearch -h host -p port -D "cn=Directory Manager" -w password \
-b "ou=People,dc=example,dc=com" -s sub "(cn=*Fuentes)"
dn: cn=Carla Fuentes,ou=sales,ou=People,dc=example,dc=com
cn: Carla Fuentes
isManager: TRUE
...
nsRole: cn=ManagerFilter,ou=sales,ou=People,dc=example,dc=com


已过滤的角色的过滤器字符串可能基于任何属性,不包括由 CoS 机制生成的其他虚拟属性(请参阅“关于 CoS”)。


已过滤的角色成员是用户条目时,您可以选择将其能力限制为在角色中添加或删除其自身,方法为使用访问控制指令 (ACI) 保护已过滤的属性。

嵌套角色定义示例

使用 nsRoleDN 属性指定嵌套在嵌套角色中的角色。要创建一个包含前面示例所创建角色的 marketing(市场部)人员和 sales manager(销售部经理)成员的角色,请使用下面的命令:

ldapmodify -a -h host -p port -D "cn=Directory Manager" -w password
dn: cn=MarketingSales,ou=marketing,ou=People,dc=example,dc=com
objectclass: top
objectclass: LDAPsubentry
objectclass: nsRoleDefinition
objectclass: nsComplexRoleDefinition
objectclass: nsNestedRoleDefinition
cn: MarketingSales
nsRoleDN: cn=ManagerFilter,ou=sales,ou=People,dc=example,dc=com
nsRoleDN: cn=Marketing,ou=marketing,ou=People,dc=example,dc=com
nsRoleScopeDN: ou=sales,ou=People,dc=example,dc=com

请注意,nsNestedRoleDefinition 对象类继承 LDAPsubentrynsRoleDefinitionnsComplexRoleDefinition 对象类。nsRoleDN 属性包含 marketing(市场部)受管理角色和 sales manager(销售部经理)已过滤角色的 DN。前面示例中的两个用户 Bob 和 Carla 将成为此新嵌套角色的成员。

此过滤器的作用域包含默认作用域(即此过滤器所在的子树)和 nsRoleScopeDN 属性的任意值下的子树。在这种情况下,ManagerFilter 位于 ou=sales,ou=People,dc=example,dc=com 子树中,因此此子树必须添加到作用域中。


定义服务类 (CoS)

服务类 (CoS) 机制生成虚拟属性,如同为客户机应用程序检索条目。CoS 简化了条目的管理并减少了对存储的要求。

与组和角色一样,CoS 依赖于目录中的帮助程序条目,并可以通过控制台或命令行进行配置。下面各节说明 CoS 并提供以两种方式管理 CoS 的过程。


任何搜索操作都可能会测试 CoS 生成的属性是否存在或者对其值进行比较。虚拟属性的名称可以用于任何过滤器字符串中,而无论过滤器是来自客户机搜索操作还是用在已过滤角色中的内部过滤器。Directory Server 还支持 VLV(虚拟列表视图)操作和服务器端排序控制中的虚拟属性,如同任何实际属性。


关于 CoS

CoS 为 CoS 作用域中的任何条目(称为目标条目)定义虚拟属性及其值。每个 CoS 由目录中的以下条目组成:

有三种类型的 CoS,每种对应 CoS 定义和模板条目之间的一种不同交互:

CoS 定义条目是 cosSuperDefinition 对象类的实例,还可以从下面的一个对象类中继承以指定 CoS 的类型:

CoS 定义条目包含特定于 CoS 每种类型的属性,这些 CoS 用于命名虚拟 CoS 属性、模板 DN 和目标条目中的指示符属性(如果需要)。默认情况下,CoS 机制将不会使用与 CoS 属性相同的名称覆盖现有属性的值。但是,CoS 定义条目的语法允许控制此行为。

CoS 模板条目是 cosTemplate 对象类的实例。CoS 模板条目包含 CoS 机制所生成的属性的值。在目录树中,给定 CoS 的模板条目与 CoS 定义存储在同一级上。

如果可能,定义和模板条目应位于同一位置以利于管理。另外,它们的命名方式应体现它们所提供的功能。例如,cn=ClCosGenerateEmployeeType,ou=People,dc=example,dc=com 这样的定义条目 DN 比 cn=ClassicCos1,ou=People,dc=example,dc=com 更具有说明性。

《Directory Server Deployment Planning Guide》中的 Chapter 4 "Managing Attributes with Class of Service" 比较详细地描述了每种 CoS 类型,并提供了示例及有关部署的注意事项。有关与每种类型的 CoS 相关的对象类和属性的详细信息,请参阅“从命令行管理 CoS”

CoS 限制

CoS 定义和模板条目的创建和管理必须遵守以下限制。《Directory Server Deployment Planning Guide》中的 Chapter 4 "CoS Limitations" 中描述了有关部署 CoS 虚拟属性的进一步限制。

涉及 CoS 所生成属性的搜索是没有索引的。任何搜索过滤器都可测试虚拟属性的值是否存在或比较该值。但是,无法对虚拟属性编制索引,并且涉及 CoS 所生成属性的任何过滤器组件将导致没有索引的搜索,从而对性能产生明显影响。注意,Directory Server 5.2 引入了散列表,可以加快搜索具有 10 个以上典型 CoS 模板条目的架构。默认情况下已启用此工具。有关如何禁用该工具的信息,请参阅《Directory Server Administration Reference》中的 Chapter 2 "Class of Service Plug-in"

受限的子树。您不能在 cn=configcn=schema 子树中创建 CoS 定义。因此,这些条目不能包含虚拟属性。

受限的属性类型。一定不能使用 CoS 机制生成下列属性类型,因为它们不会与同名的实际属性具有相同的行为:

属性子类型不受支持。 CoS 机制将不生成带有子类型的属性,如语言或 ;binary

实际属性值和虚拟属性值。CoS 机制不会生成包含“实际”值(在条目中定义)和“虚拟”值(在 CoS 模板中定义)的多值属性。属性值可能是存储在条目中的值,也可能是 CoS 机制生成的值,如“覆盖实际属性值”“多值 CoS 属性”中所述。

所有模板都必须是本地模板。 模板条目的 DN(位于 CoS 定义中,或者位于目标条目的指示符中)必须引用目录服务器中的本地条目。无法通过目录链接或引用检索模板和所包含的值。

使用控制台管理 CoS

本节说明如何通过 Directory Server Console 创建和编辑 CoS 定义。

另外,如果需要保护 CoS 值,则应为 CoS 定义和模板条目以及目标条目中的指示符属性定义访问控制指令 (ACI)。有关 CoS 安全性注意事项,请参阅《Directory Server Deployment Planning Guide》中的 Chapter 7 "Using CoS Securely";有关使用控制台创建 ACI 的过程,请参阅第 6 章“管理访问控制”

创建新的 CoS

如果是指针 CoS 和典型 CoS,则必须在定义条目之前创建模板条目:

  1. 在 Directory Server Console 的顶级“目录”选项卡上,右键单击目录树中希望添加的新模板条目,然后从弹出菜单中选择“新建”>“其他”项目。
  2. 或者,从“对象”菜单中选择父条目,并选择“新建”>“其他”项目。

  3. 在“新建对象”对话框中,从对象类列表中选择 costemplate。将打开“通用编辑器”对话框,其中有新模板中某些属性的默认值。
  4. 以下面的方式编辑新模板对象:
    1. LDAPsubentryextensibleobject 值添加到 objectclass 属性。
    2. 添加 cn 属性并给它赋予标识该模板的值,如 cosTemplateForHeadquartersFax
    3. 将命名属性更改为新的 cn 属性。
    4. 可以添加任何其他属性并将其作为命名属性代替使用,但通常使用 cn

    5. 通过将 cosPriority 属性设置为整数值以便修改,或者在不需要时将其完全删除。有关详细信息,请参阅 “Cos 属性优先级”
    6. 使用 CoS 机制将希望生成的属性及其值添加到目标条目上。
  5. 在“通用编辑器”对话框中单击“确定”以创建模板条目。
  6. 如果希望为此模板定义指针 CoS,请在目录树中选择新的模板条目并从菜单中选择“编辑”>“复制 DN”。

创建定义条目的过程对于所有类型的 CoS 都是相同的:

  1. 在 Directory Server Console 的顶级“目录”选项卡上,右键单击目录树中希望添加新 CoS 定义的条目,然后从弹出菜单中选择“新建”>“服务类”项目。
  2. 或者,从“对象”菜单中选择父条目,并选择“新建”>“服务类”项目。

    显示“服务类”条目的自定义编辑器。

  3. 输入新“服务类”的名称和可选的说明。该名称将显示在 CoS 定义条目的 cn 命名属性中。
  4. 单击左侧列表中的“属性”选项卡。对话框显示 CoS 机制将在目标条目上生成的属性的列表。
  5. 单击“添加”浏览可能属性的列表并将这些属性添加到列表中。

  6. 将属性添加到了列表后,“服务行为类”列将立即包含一个下拉列表。单击此单元选择备用行为:
    • 不覆盖目标条目属性-只有当目标条目的相同属性中没有存储相应的属性值时才会生成 CoS 属性值。
    • 覆盖目标条目属性-CoS 所生成的属性值将覆盖目标条目中该属性的任何值。
    • 覆盖目标条目属性并且是可操作的-该属性将覆盖任何目标值并且是可操作的属性,以便客户机应用程序看不到它(除非明确请求)。

    • 仅当某属性在该架构中定义为可操作时,才可以使之可操作。


  7. “合并”列包含一个合并架构复选框。选中该复选框以允许该 CoS 属性与与相同属性的其他 CoS 值合并。但是 CoS 属性不会和现存值合并,它或者替换该值,或者不会产生,就像前一列中定义的那样。
  8. 单击左侧列表中的“模板”选项卡。选择如何标识模板条目,然后填写相应字段。这样可以确定希望定义的 CoS 的类型。
    • 按照其 DN-此选项将定义指针 CoS:在“模板 DN” 字段中输入模板条目的 DN。单击“浏览”从目录中选择模板 DN,或者按 Ctrl-V 粘贴在创建模板条目后复制的 DN。
    • 使用其中一个目标条目的属性值-此选项将定义一个间接的 CoS:在“属性名”字段中输入指示符属性的名称。确保选择包含 DN 值的属性。单击“更改”从列表中选择属性。
    • 使用一个 DN 以及其中一个目标条目的属性值-此选项将定义一个典型的 CoS:输入模板的基准 DN 和属性名。单击“浏览”选择可能目标条目的父条目,单击“更改”从列表中选择属性。
  9. 单击“确定”创建 CoS 定义条目。

编辑现有的 CoS

  1. 在 Directory Server Console 的顶级“目录”选项卡上,双击 CoS 定义条目,或右键单击此条目,并从弹出菜单中选择“使用自定义编辑器编辑”。
  2. 显示“服务类”条目的自定义编辑器。

  3. 根据需要编辑名称和说明字段。
  4. 单击左侧列表中的“属性”选项卡添加或删除将由 CoS 机制生成的虚拟属性。
  5. 单击左侧列表中的“模板”选项卡重新定义模板指示符属性的名称或模板条目 DN。此对话框还允许您重新定义 CoS 定义的类型。
  6. 单击“确定”以保存更改。

删除 CoS

  1. 在 Directory Server Console 的顶级“目录”选项卡上,浏览目录树以显示 CoS 定义条目。
  2. 右键单击 CoS 条目并从弹出菜单中选择“删除”。显示对话框,要求您确认删除操作。单击“是”。

从命令行管理 CoS

因为所有配置信息和模板数据都作为条目存储在目录中,因此可以使用 LDAP 命令行工具配置和管理 CoS 定义。本节说明如何从命令行创建 CoS 定义和模板条目。

另外,如果需要保护 CoS 值,则应为 CoS 定义和模板条目以及目标条目中的指示符属性定义访问控制指令 (ACI)。有关 CoS 安全性注意事项,请参阅《Directory Server Deployment Planning Guide》中的 Chapter 7 "Using CoS Securely";有关从命令行创建 ACI 的过程,请参阅第 6 章“管理访问控制”

从命令行创建 CoS 定义条目

所有 CoS 定义条目都有 LDAPsubentry 对象类,而且都继承 cosSuperDefinition 对象类。另外,每种类型的 CoS 都继承自特定的对象类并包含相应属性。下表列出了与每种类型的 CoS 定义条目相关联的对象类和属性:

表 5-2 CoS 定义条目中的对象类和属性

CoS 类型

CoS 定义条目

指针 CoS

objectclass: top
objectclass: LDAPsubentry
objectclass: cosSuperDefinition
objectclass: cosPointerDefinition
cosTemplateDN:
DN
cosAttribute: attributeName override merge

间接 CoS

objectclass: top
objectclass: LDAPsubentry
objectclass: cosSuperDefinition
objectclass: cosIndirectDefinition
cosIndirectSpecifier:
attributeName
cosAttribute: attributeName override merge

典型 CoS

objectclass: top
objectclass: LDAPsubentry
objectclass: cosSuperDefinition
objectclass: cosClassicDefinition
cosTemplateDN:
DN
cosSpecifier: attributeName
cosAttribute: attributeName override merge

在所有情况下,cosAttribute 都是多值的,而且每个定义属性的值都将由 CoS 机制生成。

可以在 CoS 定义条目中使用下列属性(有关这些属性的详细信息,请参阅《Directory Server Administration Reference》中的 Chapter 10 "Attribute Reference"):

表 5-3 CoS 定义条目属性

属性

CoS 定义条目中的用途

cosAttribute:
 attributeName override merge

定义要生成值的虚拟属性的名称。此属性具有多个值,每个值给出将从模板生成其值的属性的名称。overridemerge 限定符指定如何在此表下面描述的特殊情况中计算 CoS 属性值。

attributeName 可能不包含任何子类型。带有子类型的属性名称将被忽略,但 cosAttribute 的其他值将被处理。

cosIndirectSpecifier:
 
attributeName

定义目标条目中属性的名称,间接 CoS 使用该值来标识模板条目。此命名属性称为指示符,并且必须在每个目标条目中包含完整的 DN 字符串。此属性只有一个值,但指示符属性可以有多个值以指定多个模板。

cosSpecifier:
 
attributeName

定义目标条目中属性的名称,典型 CoS 使用该属性的值来标识模板条目。此命名属性称为指示符,并且必须包含在目标条目的 RDN 中可以找到的字符串。此属性只有一个值,但指示符属性可以有多个值以指定多个模板。

cosTemplateDN:
 
DN

提供模板条目的完整 DN(对于指针 CoS 定义)或模板条目的基准 DN(对于典型 CoS)。

cosAttribute 属性允许在 CoS 属性名称后面带有两个限定符。override 限定符具有下面的一个值:

merge 限定符不存在或给出下列值:

覆盖实际属性值

可以创建带有 override 限定符的指针 CoS 定义条目,如下所示:

dn: cn=pointerCoS,dc=example,dc=com
objectclass: top
objectclass: LDAPsubentry
objectclass: cosSuperDefinition
objectclass: cosPointerDefinition
cosTemplateDn: cn=exampleUS,cn=data
cosAttribute: postalCode override

该指针 CoS 定义条目表示它与生成 postalCode 属性值的模板条目 cn=exampleUS,cn=data 相关联。override 限定符表示当目录条目中存在 postalCode 属性值时,该值将优于它。


如果 CoS 属性定义有 operational 或 override 限定符,则无法对 CoS 作用域中任何条目内该属性的“实际”值执行写操作。


多值 CoS 属性

指定 merge-schemes 限定符时,生成的 CoS 属性可能是多值的。有两种方式可以使 CoS 属性为多值的:

这两种情况可能同时出现并定义甚至更多的值。但是,在所有情况下,在生成的属性中重复值将只返回一次。

在缺少 merge-schemes 限定符的情况下,将使用模板条目的 cosPriority 属性在所有模板中为生成的属性确定一个值,如下一节中所述。

merge-schemes 限定符不会将目标中定义的“实际”值与从模板生成的值进行合并。merge 限定符独立于 override 限定符,所有成对情况都有可能,并且每个限定符所暗示的行为都表达出来。同时,这些限定符可以在属性名后以任何顺序指定。


同一属性具有多个 CoS 定义时,它们必须全部具有相同的 overridemerge 限定符。当不同对的限定符出现在 CoS 定义中时,在所有定义中随机选择一种组合。


Cos 属性优先级

如果有多个 CoS 定义或多值指示符,但没有 merge-schemes 限定符,则 Directory Server 使用优先级属性来选择定义虚拟属性的单值的一个模板。

cosPriority 属性表示在考虑的所有模板中,特定模板具有全局优先级。零优先级是最高优先级。不包含 cosPriority 属性的模板被认为是最低优先级。当两个或多个模板提供的属性值具有相同(或没有)优先级时,将随机选择一个值。

使用 merge-schemes 限定符时不考虑模板优先级。合并时,考虑的所有模板定义一个值,而无论它们定义的优先级如何。cosPriority 属性在 CoS 模板条目中定义,如下一节中所述。


cosPriority 属性不能有负值。另外,由间接 CoS 生成的属性不支持优先级。不要在间接 CoS 定义的模板条目中使用 cosPriority


从命令行创建 CoS 模板条目

使用指针 CoS 或典型 CoS 时,模板条目包含 LDAPsubentrycosTemplate 对象类。必须为 CoS 定义专门创建此条目。使 CoS 模板条目成为 LDAPsubentry 对象类的实例允许由配置条目不受限制地执行一般搜索。

间接 CoS 机制的模板是指目录中现有的任意条目。不需要提前对目标进行标识,也不需要给出 LDAPsubentry 对象类,但它必须有辅助的 cosTemplate 对象类。只有当 CoS 评估为生成虚拟属性及其值时才访问间接 CoS 模板。

在所有情况下,CoS 模板条目都必须在目标条目中包含 CoS 生成的属性和值。属性名在 CoS 定义条目的 cosAttribute 属性中指定。

下面的示例说明一个指针 CoS 具有最高优先级的模板条目,而该指针 CoS 生成 postalCode 属性:

dn: cn=ZipTemplate,ou=People,dc=example,dc=com
objectclass: top
objectclass: LDAPsubentry
objectclass: extensibleobject
objectclass: cosTemplate
postalCode: 95054
cosPriority: 0

以下各节提供了模板条目示例以及每种类型 CoS 定义条目的示例。

指针 CoS 示例

以下命令创建 pointer CoS 定义条目,该条目具有 cosPointerDefinition 对象类。该定义条目使用上面给出的 CoS 模板条目在 ou=People,dc=example,dc=com 树的所有条目之间共享一个普通的邮政编码。

ldapmodify -a -h host -p port -D "cn=Directory Manager" -w password
dn: cn=pointerCoS,ou=People,dc=example,dc=com
objectclass: top
objectclass: LDAPsubentry
objectclass: cosSuperDefinition
objectclass: cosPointerDefinition
cosTemplateDn: cn=ZipTemplate,ou=People,dc=example,dc=com
cosAttribute: postalCode

CoS 模板条目 (cn=ZipTemplate,ou=People,dc=example,dc=com) 将存储在其 postalCode 属性中的值提供给位于 ou=People,dc=example,dc=com 后缀下的所有条目。如果在同一子树中搜索不带有邮政编码的任何条目,则将看到生成的属性的值:

ldapsearch -h host -p port -D "cn=Directory Manager" -w password \
-b "ou=People,dc=example,dc=com" -s sub "(cn=*Jensen)"
dn: cn=Babs Jensen,ou=People,dc=example,dc=com
cn: Babs Jensen
...
postalCode: 95054

间接 CoS 示例

间接 CoS 对 cosIndirectSpecifier 属性中的属性进行命名以查找特定于每个目标的模板。此间接 CoS 使用目标条目的 manager 属性标识 CoS 模板条目。模板条目是 manager 的用户条目,它必须包含要生成的属性的值。

以下命令创建间接 CoS 定义条目,该条目包含 cosIndirectDefinition 对象类:

ldapmodify -a -h host -p port -D "cn=Directory Manager" -w password
dn: cn=generateDeptNum,ou=People,dc=example,dc=com
objectclass: top
objectclass: LDAPsubentry
objectclass: cosSuperDefinition
objectclass: cosIndirectDefinition
cosIndirectSpecifier: manager
cosAttribute: departmentNumber

接下来,将 cosTemplate 对象类添加到模板条目,并确保它们定义了要生成的属性。在此示例中,所有的 manager 条目都将成为模板:

ldapmodify -h host -p port -D "cn=Directory Manager" -w password
dn: cn=Carla Fuentes,ou=People,dc=example,dc=com
changetype: modify
add: objectclass
objectclass: cosTemplate
-
add: departmentNumber
departmentNumber: 318842

使用此 CoS,包含 manager 属性的目标条目(ou=People,dc=example,dc=com 下的条目)将自动拥有其经理的部门编号。departmentNumber 属性在目标条目上是虚拟的,因为它并不存在于服务器中,但是它会作为目标条目的一部分返回。例如,如果 Babs Jensen 的经理要定义为 Carla Fuentes,那么她的部门编号将为:

ldapsearch -h host -p port -D "cn=Directory Manager" -w password \
-b "ou=People,dc=example,dc=com" -s sub "(cn=*Jensen)"
dn: cn=Babs Jensen,ou=People,dc=example,dc=com
cn: Babs Jensen
...
manager: cn=Carla Fuentes,ou=People,dc=example,dc=com
departmentNumber: 318842

典型 CoS 示例

此示例说明如何利用典型 CoS 生成邮政地址。生成的值在一个模板条目中给出,该条目是由 CoS 定义中的 cosTemplateDN 和目标条目中的 cosSpecifier 属性的值一起找到的。以下命令使用 cosClassicDefinition 对象类创建定义条目:

ldapmodify -a -h host -p port -D "cn=Directory Manager" -w password
dn: cn=classicCoS,dc=example,dc=com
objectclass: top
objectclass: LDAPsubentry
objectclass: cosSuperDefinition
objectclass: cosClassicDefinition
cosTemplateDn: ou=People,dc=example,dc=com
cosSpecifier: building
cosAttribute: postalAddress

继续使用相同命令,创建为每个建筑物给定邮政地址的模板条目:

dn: cn=B07,ou=People,dc=example,dc=com
objectclass: top
objectclass: LDAPsubentry
objectclass: extensibleobject
objectclass: cosTemplate
postalAddres: 7 Old Oak Street$Anytown, CA 95054

使用此 CoS,包含 building 属性的目标条目(ou=People,dc=example,dc=com 下的条目)将自动具有相应的邮政地址。CoS 机制在其 RDN 中搜索具有指定符属性值的模板条目。在此示例中,如果 Babs Jensen 被分配到大楼 B07,则其邮政地址将生成如下:

ldapsearch -h host -p port -D "cn=Directory Manager" -w password \
-b "ou=People,dc=example,dc=com" -s sub "(cn=*Jensen)"
dn: cn=Babs Jensen,ou=People,dc=example,dc=com
cn: Babs Jensen
...
building: B07
postalAddress: 7 Old Oak Street$Anytown, CA 95054

创建基于角色的属性

可以创建典型 CoS 架构,根据条目所具有的角色为条目生成属性值。例如,可以使用基于角色的属性将服务器设置为逐条目地查看限制。

要创建基于角色的属性,请将 nsRole 属性用作典型 CoS 的 CoS 定义条目中的 cosSpecifier。因为 nsRole 属性可以具有多个值,因此可以定义具有多个可能的模板条目的 CoS 架构。要解析使用哪个模板条目的多义性,可以在 CoS 模板条目中包含 cosPriority 属性。

例如,可以创建一个 CoS,允许经理角色的成员超过标准邮箱配额。经理角色如下所示:

dn: cn=ManagerRole,ou=People,dc=example,dc=com
objectclass: top
objectclass: LDAPsubentry
objectclass: nsRoleDefinition
objectclass: nsComplexRoleDefinition
objectclass: nsFilteredRoleDefinition
cn: ManagerRole
nsRoleFilter: (isManager=True)
Description: filtered role for managers

将创建的典型 CoS 定义条目如下所示:

dn: cn=generateManagerQuota,ou=People,dc=example,dc=com
objectclass: top
objectclass: LDAPsubentry
objectclass: cosSuperDefinition
objectclass: cosClassicDefinition
cosTemplateDn: cn=managerCOS,dc=example,dc=com
cosSpecifier: nsRole
cosAttribute: mailboxquota override

CoS 模板名称必须是 cosTemplateDnnsRole 的值的组合,它是角色的 DN。例如:

dn:cn="cn=ManagerRole,ou=People,dc=example,dc=com",ou=People,
 dc=example,dc=com
objectclass: top
objectclass: LDAPsubentry
objectclass: extensibleobject
objectclass: cosTemplate
mailboxquota: 1000000

CoS 模板条目提供 mailboxquota 属性的值。override 的另一个限定符使得 CoS 覆盖目标条目中任何现有的 mailboxquota 属性值。是角色成员的目标条目将具有角色和 CoS 生成的虚拟属性,例如:

ldapsearch -h host -p port -D "cn=Directory Manager" -w password \
-b "ou=People,dc=example,dc=com" -s sub "(cn=*Fuentes)"
dn: cn=Carla Fuentes,ou=People,dc=example,dc=com
cn: Carla Fuentes
isManager: TRUE
...
nsRole: cn=ManagerRole,ou=People,dc=example,dc=com
mailboxquota: 1000000


role 条目和 CoS 定义条目应位于目录树中的同一位置,以便它们在其作用域中具有相同的目标条目。CoS 目标条目也应位于同一位置,以便易于查找和维护。


监视 CoS 插件

Directory Server 5.2 使您可以监视 CoS 插件的某些方面。CoS 监视属性保存在 cn=monitor,cn=Class of Service,cn=plugins,cn=config 条目下。有关这些属性的详细信息以及它们所提供的信息,请参阅《Directory Server Administration Reference》中的 Chapter 2 "cn=monitor,cn=Class of Service,cn=plugins, cn=config"



上一章      目录      索引      下一章     


版权所有 2004 Sun Microsystems, Inc. 保留所有权利。