![]() | |
Sun Java(TM) System Directory Server 5.2 2005Q1 管理指南 |
第 2 章
管理目录条目本章讨论如何使用 Directory Server Console 和命令行实用程序来管理目录的内容。并介绍了如何利用属性加密功能来存储属性,以及如何使用 DSML 访问目录。在计划目录部署时,您应当对目录将要包含的数据的类型进行描述。在创建条目和修改默认模式之前,请先阅读 Directory Server Deployment Planning Guide 中的相关章节。
本章假定读者具备 LDAP 模式和对象类及其定义的一些知识。有关模式和所有对象类的定义以及 Directory Server 中提供的属性的介绍,请参见 Directory Server Administration Reference。此外,如果没有定义适当的访问控制指令 (ACI),则不能修改目录。有关详细信息,请参见第 6 章“管理访问控制”。
本章包含以下小节:
配置条目Directory Server 在以下文件中存储其所有配置信息:
ServerRoot/slapd-serverID/config/dse.ldif
该文件采用 LDAP 数据交换格式 (LDIF)。LDIF 是条目、属性及其值的文本表示,并且是 RFC2849 (http://www.ietf.org/rfc/rfc2849) 所描述的标准格式。dse.ldif 文件中的 Directory Server 配置由以下部分组成:
Directory Server 通过使用 LDAP 使所有配置设置变得可读和可写。默认情况下,只有 Administration Server 中定义的目录管理员和目录管理员才能访问目录的 cn=config 分支。这些管理用户可以像查看和修改任何其他目录条目一样查看和修改配置条目。
应该避免在 cn=config 条目下创建条目,因为它们将存储在 dse.ldif 文件中,而不像常规条目一样存储在高伸缩性的数据库中。因此,如果在 cn=config 的下面存储了许多条目(尤其是那些可能需要经常更新的条目),性能将很可能会受到影响。然而,为了能集中配置信息,将特殊用户条目(如“复制管理员”(提供者绑定 DN)条目)存储在 cn=config 下是十分有用的。
使用控制台修改配置
推荐采用的修改配置方法是使用 Directory Server Console 的顶级“配置”选项卡。该选项卡的面板和对话框提供基于任务的控件以帮助您快速而有效地设置配置。另外,控制台界面为您管理配置的复杂性和相互依赖性。
该文档中名为“使用控制台...”的步骤描述了配置的控制台界面。这些步骤介绍如何使用“配置”选项卡的面板和对话框执行特定的管理任务。界面本身指明了如何保存配置和何时需要重新启动服务器以使更改生效。
从命令行修改配置
因为可通过 LDAP 访问 cn=config 子树,所以 ldapsearch、ldapmodify 和 ldapdelete 命令可用于查看和修改服务器配置。可使用从命令行管理条目中说明的步骤和 LDIF 格式修改 cn=config 条目和其下的所有条目。
然而,必须了解这些条目的含义、其属性的目的和可以使用的值。这些重要的注意事项在本文档中名为“从命令行...”的步骤中进行了说明。在这些步骤中,将为您展示配置条目及您可能设置的属性的示例。有关所有配置条目及属性的完整说明,包括允许的值的范围,请参见 Directory Server Administration Reference。
从命令行修改配置不像使用控制台那样简单。但是,一些很少使用的配置设置无法使用控制台进行修改,而仅能通过命令行步骤进行。也可以通过编写使用命令行工具的脚本来利用命令行步骤自动执行配置任务。
修改 dse.ldif 文件
dse.ldif 文件包含服务器启动和重新启动时将读取和使用的配置。该文件的 LDIF 内容为 cn=config 条目及其子树。只有在安装过程中所定义的系统用户才能对该文件读取和写入。
通过直接编辑该文件的内容来修改配置时,产生错误的可能性比较大,因此推荐不要使用此方法。您应该了解以下行为:
使用控制台管理条目您可以使用 Directory Server Console 上的“目录”选项卡和条目编辑器对话框,单独添加、修改或删除条目。如果想同时对多个条目执行操作,请参见使用控制台执行批量操作。
有关启动 Directory Server Console 和浏览用户界面的信息,请参见使用 Directory Server Console。
创建目录条目
Directory Server Console 为创建目录条目提供了几个自定义模板。每个模板都是一个用于特定类型对象类的自定义编辑器。表 2-1 列出了用于每个自定义编辑器的对象类。
这些自定义编辑器所包含的字段表示所有必填属性以及它们各自的对象类的某些常用可选属性。要使用这些模板之一创建条目,请遵循使用自定义编辑器创建条目中的说明。要创建其他类型的条目,请参见创建其他类型的条目。
使用自定义编辑器创建条目
- 在 Directory Server Console 的顶级“目录”选项卡上,展开目录树,显示要成为新条目的父级的条目。
- 右键单击父条目,选择“新建”菜单项,然后从子菜单中选择条目的类型:用户、组、组织单位、角色、服务类、密码策略或引用。或者,可以左键单击父条目将其选中,然后从“对象>新建”菜单中选择条目的类型。将显示选中的条目类型的自定义编辑器对话框。
自定义编辑器在左侧列中显示选项卡列表,而每个选项卡的字段则显示在右侧。默认情况下,所有自定义编辑器在打开的时候都会选中顶端的“用户”或“常规”选项卡,其中包含要命名和描述新条目的字段。
例如,下图显示用于用户条目的自定义编辑器:
图 2-1 Directory Server Console——用户条目的自定义编辑器
- 在自定义编辑器的字段中,输入要提供的属性的值。必须为所有必填属性输入值,必填属性由字段名旁的星号 (*) 标识。可以将其他任何字段留空。在允许有多个值的字段中,可以键入回车来分隔值。
单击“帮助”按钮,获取条目类型的自定义编辑器中特定字段的详细帮助信息。有关“用户”和“组织单位”编辑器的“语言”选项卡的说明,请参见设置语言支持属性。
有关创建组、角色和服务类条目的进一步说明,请参见第 5 章“管理身份和角色”。有关创建密码策略的说明,请参见第 7 章“管理用户帐户和密码”。有关创建引用的说明,请参见设置引用。
- 单击“确定”创建新条目并关闭自定义编辑器对话框。新条目出现在目录树中。
- 自定义编辑器对话框并不为其各自对象类的所有可选属性提供字段。如果希望添加未显示在自定义编辑器中的可选属性,请遵循使用通用编辑器修改条目中的说明。
创建其他类型的条目
遵循这些步骤创建除表 2-1 中列出的对象类以外的任何对象类条目。也可以使用该步骤创建在目录模式中定义的任何自定义对象类的条目:
- 在 Directory Server Console 的顶级“目录”选项卡上,展开目录树,显示要成为新条目的父级的条目。
- 右键单击父条目,并从子菜单中选择“新建”>“其他”项。或者,可以左键单击父条目将其选中,然后选择“对象”>“新建”>“其他”菜单项。
将显示“新建对象”对话框。
- 在“新建对象”对话框的对象类列表中,选择一个定义新条目的对象类,然后单击“确定”。
如果选择表 2-1 中列出的对象类,将显示相应的自定义编辑器(请参见使用自定义编辑器创建条目)。在所有其他情况下,将显示通用编辑器。
- 创建新条目时,通用编辑器包含一个字段,该字段用于所选的对象类的每个必需的属性。必须为所有必需属性输入值。某些字段具有通用占位符,如 New,应当为您的条目将其替换为有意义的值。
- 要定义所选对象类上允许的其他属性,必须显式地添加它们。要为可选的属性提供值,请执行以下操作:
- 单击“添加属性”按钮,显示允许的属性的列表。
- 从“添加属性”对话框中选择一个或多个属性,然后单击“确定”。
- 在通用编辑器中的新属性名称旁输入值。
有关该对话框中其他控件的详细信息,请参见使用通用编辑器修改条目。
- 默认情况下,必需属性之一会被选中作为命名属性,并出现在通用编辑器中显示的条目 DN 中。要更改命名属性,请执行以下操作:
- 在通用编辑器中单击“确定”,保存新条目。
新条目在目录树中显示为父条目的子级。
使用自定义编辑器修改条目
对于表 2-1 中列出的对象类,可以选择使用相应的自定义编辑器或通用编辑器编辑条目。使用自定义编辑器时,可以轻松访问最常用的字段,且界面会帮助您定义复杂属性的值,如角色或服务类定义中的值。
通用编辑器可以对条目执行更多的高级操作,如添加对象类、添加允许的属性和处理多值属性。要使用通用编辑器编辑条目,请参见使用通用编辑器修改条目。
注
自定义编辑器仅能用于编辑表 2-1 中列出的对象类。包含其他结构对象类的条目(例如从 inetorgperson 继承的自定义类)仅能通过通用编辑器进行编辑。
除了列出的对象类之一以外,还包含辅助对象类的条目,可以使用自定义编辑器进行管理。但是,所有由辅助类定义的属性在自定义编辑器中将不可见。有关辅助对象类的定义,请参见 Directory Server Administration Reference。
调用自定义编辑器
要编辑对象类在表 2-1 中列出的条目,请执行以下操作:
- 在 Directory Server Console 的顶级“目录”选项卡上,展开目录树,以显示要编辑的条目。
- 双击该条目。还有其他几种方法也可以调用条目的自定义编辑器:
- 右键单击该条目,并选择“使用自定义编辑器编辑”菜单项。
- 左键单击该条目将其选中,然后选择“对象”>“使用自定义编辑器编辑”菜单项。
- 左键单击该条目将其选中,然后使用键盘快捷键 Control-P。
将显示条目对象类的自定义编辑器。例如,图 2-1中显示了用户条目的自定义编辑器。
- 默认情况下,所有自定义编辑器在打开的时候都会选中顶端的“用户”或“常规”选项卡,其中包含要命名和描述新条目的字段。在自定义编辑器的字段中,编辑或删除要修改的属性的值。可以修改,但不能删除必填属性的值,必填属性由字段名旁的星号 (*) 标识。可以将其他任何字段留空。在允许有多个值的字段中,可以键入回车来分隔值。
选择左侧列中的其他选项卡,修改相应面板上的值。单击“帮助”按钮,获取条目类型的自定义编辑器中特定字段的详细帮助信息。
有关“用户”和“组织单位”编辑器的“语言”选项卡的说明,请参见设置语言支持属性。在第 7 章“管理用户帐户和密码”中对用户和组条目的“帐户”选项卡上的字段进行了说明。“NT 用户”和“Posix 用户”选项卡是为 Directory Server 同步服务提供的,请与 Sun 代表联系以获取详细信息。
有关修改组、角色和服务类条目的进一步说明,请参见第 5 章“管理身份和角色”。有关修改密码策略的说明,请参见第 7 章“管理用户帐户和密码”。有关修改引用的说明,请参见设置引用。
- 单击“确定”保存对条目所作的更改并关闭自定义编辑器对话框。如果修改了命名属性,例如用户条目的通用名称,则更改将在目录树中反映出来。
设置语言支持属性
用户条目和组织单位条目的自定义编辑器都提供了用于多语言目录的语言支持。
- 如调用自定义编辑器中所述打开条目的自定义编辑器。
- 在左侧列中单击“语言”选项卡。
- 对于用户条目,可以使用下拉列表设置一种首选语言。
- 对于用户条目和组织单位条目,您都可以在给定的字段中为列表中显示的任何语言输入本地化的值。选择一种语言,然后以该语言输入一个或多个值。当定义了本地化的值时,语言的名称将在列表中以粗体显示。
某些语言还具有发音字段,可在其中输入本地化值的语音表示法。
- 单击“确定”保存对条目所作的更改并关闭自定义编辑器对话框。
使用通用编辑器修改条目
通用编辑器使您能够根据用于登录到控制台的绑定 DN 来查看条目的所有可读属性,并编辑其可写属性。它还能用来添加和删除属性、设置多值属性并管理条目的对象类。添加属性时,可以为二进制属性和语言支持定义子类型。
调用通用编辑器
调用目录中任何条目的通用编辑器
- 在 Directory Server Console 的顶级“目录”选项卡上,展开目录树,以显示要编辑的条目。
- 右键单击该条目,并选择“用通用编辑器进行编辑”菜单项。还有其他几种方法也可以调用通用编辑器:
- 左键单击该条目将其选中,然后选择“对象”>“用通用编辑器进行编辑”菜单项。
- 如果条目的对象类未在表 2-1 中列出,请双击该条目。对于不具有自定义编辑器的对象类,默认情况下将使用通用编辑器。
将显示通用编辑器,如下图中所示。
图 2-2 Directory Server Console——通用编辑器
在通用编辑器中,条目的属性按字母顺序列出,每个属性具有一个文本框,其中包含每个属性的值。所有属性(包括只读属性和可操作属性)都会显示出来。右边的控件允许您修改编辑器的显示方式并编辑属性列表。
- 或者,可以使用“查看”框中的控件修改通用编辑器的显示方式。
- 选择“显示属性名称”选项以查看属性的名称,该名称是最先在模式中定义的名称。将重新安排属性列表,以便按名称的字母顺序排列。
- 选择“显示属性说明”选项,按照其属性的备用名称(如果已在模式中定义)列出属性。备用名称通常是属性更清楚明了的说明。将重新安排属性列表,以便按说明的字母顺序排列。
- 取消选中“只显示具值的属性”复选框,列出所有由条目对象类的模式明确允许的属性。如果该条目包括 extensibleObject 对象类,则所有条目将暗中允许,但不会列出。默认情况下,仅显示具有定义值的属性。
- 选中或取消选中“显示 DN”复选框,切换属性列表下条目的标识名的显示。
- “刷新”按钮将访问服务器以根据条目当前内容更新所有属性的值。
以下小节说明用于设置属性值、管理对象类和更改条目的命名属性的控件。
修改属性值
修改属性值
- 如调用通用编辑器中所述,打开通用编辑器。
- 滚动查看属性列表并单击要修改的值。
选中的属性将突出显示,且编辑光标出现在包含所选值的文本字段中。
- 使用鼠标和键盘将文本编辑为所需的值。可使用系统的剪贴板在该字段中复制、剪切和粘贴文本。
如果不能编辑文本字段中的内容,则属性为只读或没有写入权限以修改属性。
- 对该条目编辑其他任何值或执行其他所需修改,然后单击“确定”,保存更改并关闭通用编辑器。
编辑多值属性
在目录模式中定义为多值的属性在通用编辑器中可具有多值字段。有关详细信息,请参见第 9 章“扩展目录模式”。
要为多值属性添加一个新值,请执行以下操作:
- 如调用通用编辑器中所述,打开通用编辑器。
- 滚动属性列表,单击属性或属性的一个值。所选属性突出显示,且激活了“添加值”按钮。如果该按钮未激活,则所选属性未定义为多值属性,或属性为只读,或者您不具有写入权限,无法修改属性。
- 单击“添加值”按钮。列表中属性名称旁边将显示一个新的空白文本字段。
- 在新文本字段中输入该属性的新值。可使用系统的剪贴板在该字段中复制、剪切和粘贴文本。
- 对该条目编辑其他任何值或执行其他所需修改,然后单击“确定”,保存更改并关闭通用编辑器。
要删除多值属性的一个值,请执行以下操作:
- 如调用通用编辑器中所述,打开通用编辑器。
- 滚动查看属性列表并单击要删除的特定值。所选属性突出显示,且激活了“删除值”按钮。如果该按钮未激活,则所选属性为只读,或者您不具有写入权限,无法修改属性。
- 单击“删除值”按钮。包含所选值的文本字段被删除。
- 对该条目编辑其他任何值或执行其他所需修改,然后单击“确定”,保存更改并关闭通用编辑器。
添加属性
条目必须包含需要或允许该属性的对象类,您才能向其中添加属性。有关详细信息,请参见管理对象类和第 9 章“扩展目录模式”。
要向条目中添加属性,请执行以下操作:
- 如调用通用编辑器中所述,打开通用编辑器。
- 确保“仅显示具有值的属性”选项已选中。
- 单击“添加属性”按钮,显示带有属性列表的对话框。该列表仅包含为条目定义的对象类所允许的属性。
- 在“添加属性”对话框中,选择要添加的一个或多个属性。
- 或者,可从对话框顶部的下拉列表中选择以下两种子类型或其中之一:
- 选择属性及其可选的子类型后,请单击“确定”。属性即按字母顺序添加到通用编辑器中的列表中。
- 在新属性名称旁的空白文本字段中为该属性输入一个新值。可使用系统的剪贴板在该字段中复制、剪切和粘贴文本。
- 对该条目编辑其他任何值或执行其他所需修改,然后单击“确定”,保存更改并关闭通用编辑器。
删除属性
要从条目中删除属性及其所有值,请执行以下操作:
- 如调用通用编辑器中所述,打开通用编辑器。
- 滚动查看属性列表并单击要删除的属性名称。所选属性突出显示,且“删除属性”按钮被激活。如果该按钮未激活,则所选属性为只读,或者您不具有写入权限,无法修改属性。
- 单击“删除属性”按钮。将删除属性及其所有文本字段值。
- 对该条目编辑其他任何值或执行其他所需修改,然后单击“确定”,保存更改并关闭通用编辑器。
管理对象类
条目的对象类由多值 objectclass 属性定义。修改该属性时,通用编辑器提供特殊的对话框以帮助管理定义的对象类。
要向条目中添加对象类,请执行以下操作:
- 如调用通用编辑器中所述,打开通用编辑器。
- 滚动查看属性列表,然后选择 objectclass 属性。“添加值”按钮被激活。如果该按钮未激活,则说明您没有权限修改该条目的对象类。
- 单击“添加值”按钮。
将显示“添加对象类”对话框。它会显示可向条目中添加的对象类的列表。
- 选择要添加到该条目的一个或多个对象类,并单击“确定”。所选的对象类将出现在 objectclass 属性值的列表中。
- 如果新的对象类需要未存在于条目中的属性,则通用编辑器将自动添加这些属性。必须为所有必需属性提供值。
- 对该条目编辑其他任何值或执行其他所需修改,然后单击“确定”,保存更改并关闭通用编辑器。
要从条目中删除对象类,请执行以下操作:
- 如调用通用编辑器中所述,打开通用编辑器。
- 滚动查看属性列表并单击要删除的 objectclass 属性的特定值。如果模式允许删除所选的对象类,且您具有修改该条目的对象类的权限,则“删除值”按钮将被激活。
- 单击“删除值”按钮。特定的对象类被删除。
删除对象类时,通用编辑器将自动删除剩下的对象类不允许或不需要的所有属性。如果删除了命名属性之一,将自动选中另一个,且控制台将把此更改告知您。
- 对该条目编辑其他任何值或执行其他所需修改,然后单击“确定”,保存更改并关闭通用编辑器。
删除目录条目
要使用 Directory Server Console 删除条目,请执行以下操作:
使用控制台执行批量操作
可以使用 LDIF 文件添加多个条目、执行混合操作或导入整个后缀。要使用 LDIF 文件和 Directory Server Console 来添加条目,请执行以下操作:
- 使用前几节中显示的语法在 LDIF 文件中定义条目或操作。如果仅添加条目或初始化后缀,则不需要 changetype 关键字,且 LDIF 文件可能仅包含条目。如果执行混合操作,则每个 DN 后都应跟一个 changetype 以及特定的操作或属性值(如果适用)。
- 从 Directory Server Console 导入 LDIF 文件。有关详细信息,请参见导入 LDIF 文件。
如果执行混合操作,一定要取消选择“导入 LDIF”对话框上的“只添加”,这样服务器才能执行所有的 LDIF 操作。
从命令行管理条目ldapmodify 和 ldapdelete 命令行实用程序提供完整的功能性,用于添加、编辑和删除目录内容。可以使用它们管理服务器的配置条目和用户条目中的数据。这些实用程序还可以用于编写脚本,以便对一个或多个目录执行批量管理。
全书中的步骤都用到了 ldapmodify 和 ldapdelete 命令。以下各节说明了执行这些管理步骤所需的所有基本操作。有关 ldapmodify 和 ldapdelete 命令的详细信息,请参见 Directory Server Man Page Reference。
对这些命令行实用程序的输入总是采用 LDIF 格式,并且可以直接从命令行或通过输入文件提供输入。以下小节提供了有关 LDIF 输入的信息,而后继的小节则说明了每种修改类型的 LDIF。
提供 LDIF 输入
所有目录数据都使用 Unicode 的 UTF-8 编码进行存储。因此,所提供的任何 LDIF 输入也必须是 UTF-8 编码的。Directory Server Administration Reference 中的 "LDAP Data Interchange Format Reference" 详细说明了 LDIF 格式。
在提供 LDIF 输入时,请考虑以下几点:
- 对象是一个空白行,后面接着以 dn: 开头的行。该行是对象的标识名。所有其他行都是对象的属性。
- 注释以 # 开头(并以 EOL 结尾)。
- 以单个空格开头的行是上一行的未完部分。
- 二进制值是使用 base-64 编码的,并且在属性名称后面使用双冒号 (::) 来表示。
- 回车符和换行符在 LDIF 值中是不安全的,应该使用 base-64 编码。
- 在使用 ldapmodify 命令更改某个属性值时,不要在该属性值的末尾无意中留下结结尾空格。有关详细信息,请参见修改属性值。
在命令行上终止 LDIF 输入
ldapmodify 和 ldapdelete 实用程序读取您在命令后输入的 LDIF 语句的方式与从文件读取时相同。提供输入完成后,请输入 shell 将其识别为文件结束 (EOF) 换码序列的字符。
以下示例说明如何终止对 ldapmodify 命令的输入:
prompt> ldapmodify -h host -p port -D bindDN -w password
dn:cn=Barry Nixon,ou=People,dc=example,dc=com
changetype:modify
delete:telephonenumber
^D
prompt>出于简化性以及可迁移性的考虑,本文档中的示例未显示提示或 EOF 序列。
使用特殊字符
在命令行上输入命令选项时,您可能需要对对于命令行解释程序具有特殊意义的字符执行转义操作,如空格 ( )、星号 (*)、反斜杠 (\) 等。例如,很多 DN 包含空格,且对于大多数 UNIX shell,您必须用双引号 ("") 将值引起来。
-D "cn=Barbara Jensen,ou=Product Development,dc=example,dc=com"
根据命令行解释程序的具体情况,应使用单引号或双引号达到此目的。有关详细信息,请参见操作系统文档。
另外,如果使用包含逗号的 DN,则必须用反斜杠 (\) 对逗号进行转义。例如:
-D "cn=Patricia Fuentes,ou=People,o=example.com Bolivia\,S.A."
请注意 ldapmodify 命令后的 LDIF 语句由命令而不是 shell 来解释,所以不需要特殊考虑的注意事项。
使用属性 OID
默认情况下,属性名称中不支持属性 OID。这一点与某些 Directory Server 早期版本不同。如果在 Directory Server 早期版本中使用属性 OID 作为属性名称,则必须将属性 nsslapd-attribute-name-exceptions 设置为 on 以接受属性 OID。
模式检查
添加或修改条目时,您使用的属性必须是条目中的对象类必需或允许的,且属性必须包含匹配其定义语法的值。
修改条目时,Directory Server 对整个条目执行模式检查,而不仅仅是对正被修改的属性进行检查。因此,如果条目中任何对象类或属性不符合模式要求,则操作可能会失败。有关详细信息,请参见模式检查。
LDIF 条目排序
在用于添加条目的 LDIF 文本的任何序列中(不管是在命令行上还是文件中),父条目必须在其子级之前列出。这样,当服务器处理 LDIF 文本时,它将在子条目之前创建父条目。
例如,如果要在不存在于目录中的People子树中创建条目,然后在子树中的条目前列出代表 People 容器的条目,请执行以下操作:
dn:dc=example,dc=com
dn:ou=People,dc=example,dc=com
...
People subtree entries
...
dn:ou=Group,dc=example,dc=com
...
Group subtree entries
...可以使用 ldapmodify 命令行实用程序在目录中创建任何条目,但是,后缀或子后缀的根条目是一个特殊的条目,它必须与必需的配置条目相关联。要添加新的根后缀或子后缀及其相关配置条目,请参见从命令行创建后缀。
管理大型条目
添加或修改具有非常大的属性值的条目之前,可能需要配置服务器以接受它们。为防止服务器超过负载,默认情况下客户机被限制为只能发送不大于 2 MB 的数据。
如果添加大于 2 MB 的条目,或将属性修改为大于 2 MB 的值,服务器将拒绝执行此操作并立即关闭连接。例如,二进制数据(如条目的一个或多个属性中的多媒体内容)可能会超过此限制。
定义了一个大型静态组的条目也可能包括过多的成员,以致它们的表示会超出此限制。但是,出于性能考虑,不推荐使用这样的组,您应该考虑重新设计目录结构。有关详细信息,请参见管理组。
要修改服务器强制执行的客户机发送数据的大小限制,请执行以下操作:
- 为 cn=config 条目的 nsslapd-maxbersize 属性设置一个新值。
- 要使用控制台执行此操作,请以“管理员”或“目录管理员”的身份登录,并按照使用通用编辑器修改条目中所述的步骤编辑 cn=config 条目。将 nsslapd-maxbersize 属性设为客户机可以一次发送的最大字节数。
- 要从命令行执行此操作,请使用以下命令:
ldapmodify -h host -p port -D "cn=Directory Manager" -w password
dn:cn=config
changetype:modify
replace:nsslapd-maxbersize
nsslapd-maxbersize:sizeLimitInBytes
-d有关详细信息,请参见 Directory Server Administration Reference 中的 "nsslapd-maxbersize"。
- 如启动和停止 Directory Server 中所述,重新启动服务器。
错误处理
命令行工具按顺序处理 LDIF 输入中的所有条目或修改。默认行为是当第一个错误发生时停止处理。使用 -c 选项继续处理所有输入,而不管任何错误。在工具的输出中将看到错误状态。
除了以上列出的注意事项,常见错误有:
有关 ldapmodify 和 ldapdelete 命令发生的错误情况以及如何避免使用这两个命令的详细信息,请参见 Directory Server Man Page Reference。
使用 ldapmodify 添加条目
可使用 ldapmodify 的 -a 选项将一个或多个条目添加到目录。以下示例创建一个结构条目以包含用户,然后创建一个用户条目:
ldapmodify -a -h host -p port -D "cn=Directory Manager" -w password
dn:ou=People,dc=example,dc=com
objectclass:top
objectclass:organizationalUnit
ou:People
description:Container for user entries
dn:uid=bjensen,ou=People,dc=example,dc=com
objectclass:top
objectclass:person
objectclass:organizationalPerson
objectclass:inetorgPerson
uid:bjensen
givenName:Barbara
sn:Jensen
cn:Babs Jensen
telephoneNumber: (408) 555-3922
facsimileTelephoneNumber: (408) 555-4000
mail:bjensen@example.com
userPassword:clearPassword-D 和 -w 选项分别给出具有权限创建这些条目的用户的绑定 DN 和密码。-a 选项表示将添加 LDIF 中的所有条目。然后每个条目由其 DN 和属性值给定,每个条目间有一个空白行。ldapmodify 实用程序将在条目输入和报告所有错误后创建每个条目。
按照约定,条目的 LDIF 按照以下顺序列出属性:
当为 userpassword 属性输入值时,请给出明文形式的密码。服务器会将该值加密并仅存储加密值。一定要限制读取权限以保护 LDIF 文件中的明文密码。
也可使用 LDIF 的另一种形式,该形式在命令行中不需要 -a 选项。该形式的优点是可将条目条件和下一段中显示的条目修改语句合并。
ldapmodify -h host -p port -D "cn=Directory Manager" -w password
dn:ou=People,dc=example,dc=com
changetype:add
objectclass:top
objectclass:organizationalUnit
ou:People
description:Container for user entries
dn:uid=bjensen,ou=People,dc=example,dc=com
changetype:add
objectclass:top
objectclass:person
objectclass:organizationalPerson
objectclass:inetorgPerson
uid:bjensen
givenName:Barbara
sn:Jensen
cn:Barbara Jensen
telephoneNumber: (408) 555-3922
facsimileTelephoneNumber: (408) 555-4000
mail:bjensen@example.com
userPassword:clearPasswordchangetype:add 关键字表示具有给定 DN 的条目在创建时应带有所有后续的属性。所有其他选项和 LDIF 约定都一样。
两个示例中都可使用 -f filename 选项从文件读取 LDIF,而非从终端输入读取。按照 -a 选项的用法,LDIF 文件必须包含与终端输入相同的格式。
使用 ldapmodify 修改条目
使用 changetype:modify 关键字添加、替换或删除现有条目中的属性及其值。当指定 changetype:modify 时,必须也提供一个或多个更改操作以表示条目将如何修改。以下示例中显示了三个可能的 LDIF 更改操作:
dn:entryDN
changetype:modify
add:attribute
attribute:value
...
-
replace:attribute
attribute:newValue
...
-
delete:attribute
[attribute:value]
...在一行中使用连字号 (-) 以分开在同一条目上的操作,使用一空白行分开多组在不同条目上的操作。也可为每个操作给出多个 attribute:value 对以同时添加、替换或删除它们。
添加属性值
以下示例显示如何使用同一 add LDIF 语法将值添加到现有多值属性中或尚不存在的属性中:
ldapmodify -h host -p port -D "cn=Directory Manager" -w password
dn:uid=bjensen,ou=People,dc=example,dc=com
changetype:modify
add:cn
cn:Babs Jensen
-
add:mobile
mobile: (408) 555-7844
mobile: (408) 555-7845处于以下情况时,这些操作可能失败且服务器将返回一个错误:
使用二进制属性子类型
attribute;binary 子类型表示应将属性值作为二进制数据通过 LDAP 来传递,而不管其实际语法是什么。该子类型是为没有 LDAP 字符串表示法的复杂语法(如 userCertificate)设计的。二进制子类型不应当用于此外的其他目的。
可在与 ldapmodify 命令一起使用的任何 LDIF 语句中为属性名称添加适当的子类型。
要输入二进制值,可直接在 LDIF 文本中输入或从另一个文件中读取。以下示例显示了从文件读取二进制值的 LDIF 语法:
ldapmodify -h host -p port -D "cn=Directory Manager" -w password
version: 1
dn:uid=bjensen,ou=People,dc=example,dc=com
changetype:modify
add:userCertificate;binary
userCertificate;binary:< file:///path/certFile要使用 < 语法来指定文件名,必须以行 version:1 作为 LDIF 语句的开头。ldapmodify 处理此语句时,它将该属性设置为可以从给定文件的全部内容中读取的值。
添加一个具有 Language 子类型的属性
属性的 Language 和 pronunciation 子类型指定本地化的值。当为一个属性指定 language 子类型时,该子类型将按照以下方式添加到属性名称中:
attribute;lang-CC
其中 attribute 是现有属性类型,CC 是两个字母的国家/地区代码以指定语言。可选择为 language 子类型添加 pronunciation 子类型以指定本地化值的等效语音。在这种情况下,属性名称变为:
attribute;lang-CC;phonetic
要对具有子类型的属性执行操作,必须明确地匹配其子类型。例如,如果要修改包含 lang-fr language 子类型的属性值,则必须按如下所示在修改操作中包含 lang-fr:
ldapmodify -h host -p port -D "cn=Directory Manager" -w password
dn:uid=bjensen,ou=People,dc=example,dc=com
changetype:modify
replace:homePostalAddress;lang-fr
homePostalAddress;lang-fr:34\, avenue des Champs-Elysées修改属性值
以下示例说明如何在 LDIF 中使用 replace 语法来更改属性值:
ldapmodify -h host -p port -D "cn=Directory Manager" -w password
dn:uid=bjensen,ou=People,dc=example,dc=com
changetype:modify
replace:sn
sn:Morris
-
replace:cn
cn:Barbara Morris
cn:Babs Morris将删除指定属性的所有当前值,并添加所有给定的值。
在更改某个属性值后,可以使用 ldapsearch 命令验证更改。
结尾空格
在修改某个属性值时,不要在值的末尾无意中包含结尾空格。结尾空格可能产生以 base-64 编码形式出现的值(如 34xy57eg)。
如果属性值以结尾空格结尾,则会将结尾空格作为属性值的一部分进行编码。在使用控制台或 ldapsearch 命令验证更改时,看到的值可能是纯文本,但它也可能显示为 base-64 编码文本。这取决于所使用的 Directory Server 客户机。
删除属性值
以下示例显示如何完全删除属性和仅删除多值属性的一个值:
ldapmodify -h host -p port -D "cn=Directory Manager" -w password
dn:uid=bjensen,ou=People,dc=example,dc=com
changetype:modify
delete:facsimileTelephoneNumber
-
delete:cn
cn:Babs Morris当使用 delete 语法而未指定 attribute:value 对时,将删除属性的所有值。如果指定 attribute:value 对,则将仅删除该值。
修改多值属性的一个值
为了使用 ldapmodify 命令修改多值属性的一个值,必须执行以下示例中显示的两种操作:
ldapmodify -h host -p port -D "cn=Directory Manager" -w password
dn:uid=bjensen,ou=People,dc=example,dc=com
changetype:modify
delete:mobile
mobile: (408) 555-7845
-
add:mobile
mobile: (408) 555-5487使用 ldapdelete 删除条目
使用 ldapdelete 命令行实用程序从目录中删除条目。此实用程序绑定到目录服务器并删除一个或多个由其 DN 给定的条目。必须提供具有权限以删除指定条目的绑定 DN。
不能删除具有子条目的条目。LDAP 协议禁止出现子条目将不再拥有父条目的情形。例如,不能删除组织单位条目,除非首先删除了属于组织单位的所有条目。
警告
不要删除后缀 o=NetscapeRoot。Administration Server 使用此后缀存储有关已安装的 Sun Java System 服务器的信息。删除此后缀会强制您重新安装所有 Sun Java System 服务器,包括 Directory Server。
以下示例中,组织单位中仅有一个条目,因此可删除它,然后删除父条目:
ldapdelete -h host -p port -D "cn=Directory Manager" -w password
uid=bjensen,ou=People,dc=example,dc=com
ou=People,dc=example,dc=com使用 ldapmodify 删除条目
也可使用 changetype:delete 关键字以使用 ldapmodify 实用程序删除条目。当使用以上说明的 ldapdelete 时,也同样具有这些限制。使用 LDIF 语法删除条目的优点在于,您可以在单个 LDIF 文件中执行混合操作。
下面的示例将执行与前面的示例相同的删除操作:
ldapmodify -h host -p port -D "cn=Directory Manager" -w password
dn:uid=bjensen,ou=People,dc=example,dc=com
changetype:delete
dn:ou=People,dc=example,dc=com
changetype:delete
重命名和移动条目本节介绍修改 DN 操作,提供有关使用修改 DN 操作的指导以及描述如何使用控制台和命令行来执行修改 DN 操作。
修改 DN 操作简介
在 Directory Server 5.2 2005Q1 之前的 Directory Server 版本中,可以对某个条目进行重命名。在 Directory Server 5.2 2005Q1 和更高版本中,不仅可以重命名条目,而且还可以移动条目。
修改 DN 操作不能用于完成以下任务:
重命名操作和移动操作之间的差异
本节介绍重命名条目和移动条目之间的差异。
重命名条目
重命名条目操作更改条目 DN 中最左侧(最不重要)的属性 type=value 对。此属性 type=value 对是条目的 RDN。可以重命名属性类型、属性值或者同时重命名属性类型和属性值。为使重命名操作获得成功,新的 DN 一定不能已存在。
以下示例说明如何更改属性类型和属性值。
示例 1:要在下面的 DN 中将属性类型由 cn 更改为 uid,请执行以下操作:
dn:cn=john,dc=california,dc=sun,dc=com
示例 2:要在下面的 DN 中将属性值由 john 更改为 bob,请执行以下操作:
dn:cn=john,dc=california,dc=sun,dc=com
移动条目
移动条目操作更改条目 DN 中最右侧(最重要)的属性 type=value 对。此操作将条目移动到其他的子树。为使移动操作获得成功,新位置对应的 DN 必须在相同后缀中存在。
示例 3:要在下面的 DN 中将条目 john 从 california 移动到 france,请执行以下操作:
dn:cn=john,dc=california,dc=sun,dc=com
使用修改 DN 操作的指导和限制
在计划使用修改 DN 操作时,请遵循以下小节中提供的指导:
使用修改 DN 操作的一般指导
在使用修改 DN 操作时,请遵循以下建议。
- 不要使用修改 DN 操作来完成以下任务:
- 确保运行的是 Directory Server 5.2 2005Q1 或更高版本。不能在 Directory Server 5.2 2005Q1 之前的 Directory Server 版本中使用修改 DN 操作。如果使用的是复制拓扑,请确保拓扑中的所有服务器都运行 Directory Server 5.2 2005Q1 或更高版本。
- 不要在应用程序中使用 entryid 操作属性,因为它仅供内部使用而保留。在移动条目时,条目的 entryid 属性可能会发生变化。
- 为服务器上的所有后缀全局启用修改 DN 操作,或者为要运行该操作的每个后缀分别启用。默认情况下,禁用修改 DN 操作。如果运行的是复制拓扑,请在拓扑中的所有服务器上启用修改 DN 操作。有关如何启用修改 DN 操作的信息,请参见使用控制台启用修改 DN 操作或使用 ldapmodify 命令启用修改 DN 操作。
- 在要运行修改 DN 操作的每个后缀上扩展 ACI 权限。“导入”访问权限允许将条目导入到指定的 DN 中。“导出”访问权限允许从指定的 DN 中导出条目。有关如何扩展 ACI 权限的信息,请参见使用控制台启用修改 DN 操作或使用 ldapmodify 命令启用修改 DN 操作。
- 在执行修改 DN 操作之前,确保该操作不会中断客户机验证。如果移动的条目引用客户机证书,则会中断客户机验证。在移动条目后,请验证您的证书。
- 在执行修改 DN 操作之前,确保该操作不会中断应用程序。重命名或移动条目可能会影响某些后缀,或者可能会改变条目的以下特性:
使用带复制功能的修改 DN 操作的指导
如果使用带复制功能的修改 DN 操作,复制拓扑必须遵循以下要求:
要重新启动复制,请执行以下步骤:
1. 重新配置复制拓扑以便在所有服务器上启用修改 DN 操作。
2. 按以下方式之一启动复制会话:
- 按照通过控制台强制复制更新或通过命令行强制复制更新中的说明进行操作。
- 更改提供者服务器上的条目。所做的更改将被复制到消费者服务器。
- 在拓扑中的所有主副本上启用并配置引用完整性插件。此操作可确保服务器为组和角色维护引用完整性。有关如何启用和配置引用完整性插件的信息,请参见配置引用完整性。
- 在执行修改 DN 操作后,应留出足够长的时间使引用完整性插件复制其更改。
使用控制台重命名或移动条目
本节介绍如何使用控制台来重命名和移动条目。
使用控制台启用修改 DN 操作
除非配置了 ACI 权限以授予您权限,否则不能在后缀上执行修改 DN 操作。可以为服务器上的所有后缀全局启用或禁用修改 DN 操作,也可以为每个指定的后缀分别启用或禁用修改 DN 操作。
以下过程是如何配置各种 ACI 权限的示例。这些过程可能并没有为您配置最恰当的 ACI 权限。有关如何配置各种 ACI 权限的信息,请参见 Administration Server Administration Guide 中有关使用访问控制指令的信息。
使用控制台来扩展 ACI 权限此过程配置了 ACI 权限,以使所有用户都能在整个后缀上执行修改 DN 操作。
- 在“目录”选项卡上打开 Directory Server Console。
- 在左侧,选择要扩展其 ACI 权限的后缀。
- 右键单击该后缀并从弹出菜单中选择“设置访问权限”。
将显示管理访问控制对话框。它包含属于该条目的 ACI 列表。
- 在管理访问控制对话框中,突出显示“匿名访问 ACI”,然后单击“编辑”。
将显示 ACI 编辑器。
- 选中标记为 "import" 的复选框,以允许将子条目导入到指定的后缀。
- 选中标记为 "export" 的复选框,以允许将条目从指定后缀下移动到后缀中的另一个位置。
- 在编辑 ACI 窗口中,单击“确定”。此时将关闭该窗口。
- 在管理访问控制对话框中,单击“确定”。此时将关闭该窗口。
使用控制台全局启用或禁用修改 DN 操作
使用控制台为指定的后缀启用修改 DN 操作使用控制台重命名条目
本节介绍如何重命名条目。Directory Server 5.2 2005Q1 之前的 Directory Server 版本支持此操作。要执行此操作,不需要启用修改 DN 操作。
使用控制台重命名条目
- 在“目录”选项卡上打开 Directory Server Console。
- 展开目录树以显示要编辑的条目。
- 选择要重命名的条目,右键单击并选择“使用通用编辑器编辑”。
此时将打开通用编辑器窗口。图 2-2 显示了通用编辑器窗口。
- 选择与要更改的 RDN 对应的属性。
- 将属性框中的文本由条目的当前名称更改为条目的新名称。
- 单击“确定”。
使用控制台移动条目
Directory Server 5.2 2005Q1 之前的 Directory Server 版本不支持此过程。
使用控制台移动条目
- 确保全局启用修改 DN 操作,或者为包含要移动的条目的后缀启用此操作。有关信息,请参见使用控制台启用修改 DN 操作。
- 在“目录”选项卡上打开 Directory Server Console。
- 展开目录树以显示要编辑的条目。
- 选择要移动的条目。
- 将条目拖放到新的父条目上。
- 在警告弹出框中,单击“继续”。
使用控制台移动和重命名条目
要重命名和移动条目,请执行以下两个步骤:
使用 ldapmodify 命令重命名或移动条目
本节介绍如何使用 ldapmodify 命令重命名和移动条目。
以下属性与 LDIF 语句配合使用:
有关与 LDIF 语句配合使用的属性的信息,请参见 Directory Server Administration Reference 中的 "Attribute Reference"。有关 ldapmodify 命令及其选项的信息,请参见 Directory Server Man Page Reference。
使用 ldapmodify 命令启用修改 DN 操作
在使用修改 DN 操作之前,必须扩展 ACI 权限并启用修改 DN 操作。
有关如何扩展 ACI 权限的信息,请参见从命令行创建 ACI。
本节介绍如何启用修改 DN 操作。
使用 ldapmodify 命令全局启用修改 DN 操作运行 ldapmodify 命令。例如,以下示例启用了修改 DN 操作:
ldapmodify -h <hostname> -p <port> -D <user> -w <user_password>
dn:cn=config,cn=ldbm database,cn=plugins,cn=config
changetype:modify
replace:nsslapd-moddn-enabled
nsslapd-moddn-enabled:on
使用 ldapmodify 命令为某个后缀启用修改 DN 操作运行 ldapmodify 命令。例如,以下示例为名为 suffix-name 的后缀启用修改 DN 操作:
ldapmodify -h <hostname> -p <port> -D <user> -w <user_password>
dn:cn=<suffix-name>,cn=ldbm database,cn=plugins,cn=config
changetype:modify
replace:nsslapd-moddn-enabled
nsslapd-moddn-enabled:on使用 ldapmodify 命令重命名条目
本节介绍如何重命名条目。Directory Server 5.2 2005Q1 之前的 Directory Server 版本支持此操作。要执行此操作,不需要启用修改 DN 操作。
使用 ldapmodify 命令重命名叶条目运行 ldapmodify 命令。例如,以下示例将条目 john 重命名为 bob:
ldapmodify -h <hostname> -p <port> -D <user> -w <user_password>
dn:cn=john,dc=california,dc=sun,dc=com
changetype:modrdn
newrdn:cn=bob
deleteoldrdn: 1使用 ldapmodify 命令移动条目
本节介绍如何将条目移动到后缀的其他部分。Directory Server 5.2 2005Q1 之前的 Directory Server 版本不支持此操作。
使用 ldapmodify 命令移动条目
- 确保为修改 DN 操作扩展了 ACI 权限。有关信息,请参见使用 ldapmodify 命令启用修改 DN 操作。
- 确保为受重命名和移动操作影响的一个或多个后缀启用修改 DN 操作。有关信息,请参见使用 ldapmodify 命令启用修改 DN 操作。
- 运行 ldapmodify 命令。例如,以下命令将条目 john 从 California 子树移动到 France 子树:
ldapmodify -h <hostname> -p <port> -D <user> -w <user_password>
dn:cn=john,dc=california,dc=sun,dc=com
changetype:modrdn
newrdn:cn=john
deleteoldrdn: 0
newsuperior:dc=france,dc=france,dc=sun,dc=com使用 ldapmodify 命令重命名和移动条目
本节介绍如何重命名条目并将其移动到后缀的其他部分。Directory Server 5.2 2005Q1 之前的 Directory Server 版本不支持此操作。
使用 ldapmodify 命令重命名和移动条目
- 确保为修改 DN 操作扩展了 ACI 权限。有关信息,请参见使用 ldapmodify 命令启用修改 DN 操作。
- 确保为受重命名和移动操作影响的一个或多个后缀启用修改 DN 操作。有关信息,请参见使用 ldapmodify 命令启用修改 DN 操作。
- 运行 ldapmodify 命令。例如,以下命令将重命名操作和移动操作合并为一个操作:
ldapmodify -h <hostname> -p <port> -D <user> -w <user_password>
dn:cn=john,dc=california,dc=sun,dc=com
changetype:modrdn
newrdn:dc=bob
deleteoldrdn: 1
newsuperior:dc=france,dc=france,dc=sun,dc=com
设置引用使用引用告诉客户机应用程序,如果信息在本地不可用,应联系哪个服务器。引用是指向远程后缀或条目的指针,Directory Server 将其作为结果返回到客户机。然后,客户机必须在引用中指定的远程服务器上再次执行该操作。在三种情况下,会发生重定向:
- 当客户机应用程序请求一个本地服务器上不存在的条目时,服务器将返回默认引用。
- 当整个后缀由于安全原因或需要维护而脱机时,服务器将返回该后缀定义的参考。后缀级的引用在设置访问权限和引用中进行了说明。当客户机请求写入操作时,后缀的只读副本也会将引用返回到主服务器。
- 可以创建名为智能引用的条目。当客户机专门访问智能引用时,服务器将返回它所定义的引用。可以将Directory Server Console 配置为自动遵循智能引用,以便使它们看起来是顶级“目录”选项卡上的本地条目。
在所有情况下,引用即包含主机名、端口号以及其他服务器上的 DN(可选)的 LDAP URL。有关详细信息,请参见 Directory Server Administration Reference。有关如何在目录部署中使用引用的概念性信息,请参见 Directory Server Deployment Planning Guide。
以下小节说明定义目录的默认引用和智能引用的过程。
设置默认引用
当客户机应用程序提交一个 DN 上的操作,而由目录维护的任何后缀都不包含此 DN 时,会将默认引用返回到客户机应用程序。默认引用有时称为全局引用,因为默认引用应用于目录中的所有后缀。服务器将返回所有定义的引用,但返回的顺序没有定义。
使用控制台设置默认引用
- 在 Directory Server Console 的顶级“配置”选项卡上,选择配置树根部的服务器节点,然后在右面板中选择“网络”选项卡。
- 选中“返回引用”复选框,并在文本字段中输入 LDAP URL。或者,单击“构造 URL”,由系统引导您定义一个 LDAP URL。到安全端口的 LDAP URL 的示例如下:
ldaps://east.example.com:636/dc=example,dc=com
可输入多个用空格分隔并用引号括起的引用 URL,如下所示:
"ldap://east.example.com:389" "ldap://backup.example.com:389"
- 单击“保存”以使更改立即生效。
从命令行设置默认引用
使用 ldapmodify 命令行实用程序将一个或多个默认引用添加或替换到目录配置文件中的 cn=config 条目。例如:
ldapmodify -a -h host -p port -D "cn=Directory Manager" -w password
dn:cn=config
changetype:modify
replace:nsslapd-referral
nsslapd-referral:ldap://east.example.com:389
nsslapd-referral:ldap://backup.example.com:389无需重新启动服务器。
创建智能引用
智能引用允许将目录条目或目录树映射到特定的 LDAP URL。使用智能引用,可将客户机应用程序引用到特定服务器或特定服务器上的特定条目。
通常,智能引用指向一个在另一个服务器上有相同 DN 的实际条目。然而,可定义对相同服务器或不同服务器上的任何条目的智能引用。例如,可定义具有以下 DN 的条目:
uid=bjensen,ou=People,dc=example,dc=com
作为指向服务器 east.example.com 上的另一个条目的智能引用。
cn=Babs Jensen,ou=Sales,o=east,dc=example,dc=com
目录使用智能引用的方法符合 RFC 2251 (http://www.ietf.org/rfc/rfc2251.txt) 4.1.11 小节中指定的标准。
使用控制台创建智能引用
- 在 Directory Server Console 的顶级“目录”选项卡上,展开目录树,显示要成为智能引用的父级的条目。
- 右键单击父条目,并选择“新建”>“引用”菜单项。或者,可以左键单击父条目将其选中,然后选择“对象”>“新建”>“引用”菜单项。
显示引用条目的自定义编辑器对话框。
- 在编辑器的“常规”选项卡上,输入引用的名称并从下拉列表中选择其命名属性。该名称将成为所选的命名属性的值。也可选择输入引用的说明字符串。
- 在编辑器的“URL”选项卡上,单击“构造”按钮以定义智能引用的 URL。在显示的对话框中输入 LDAP URL 的元素。
URL 的元素包括持有引用条目的目录服务器的主机名和 LDAP 端口号,以及服务器上目标条目的 DN。默认情况下,目标 DN 就是智能引用条目的 DN。不过,目标 DN 可为任何后缀、子树或叶条目。
- 在 LDAP URL 构造对话框中单击“确定”。URL 显示在新引用文本框中。
- 单击新引用文本框旁的“添加”按钮,将引用添加到列表中。
- 可定义多个 URL 以作为该条目的引用返回。使用“构造”、“添加”、“删除”和“更改”按钮创建和管理“引用列表”。
- 单击“引用验证”按钮将显示一个对话框,其中可设置当 Directory Server Console 遵循对远程服务器的引用时用来绑定的凭证。可定义访问服务器时要使用的绑定 DN 和密码。所有对同一服务器的引用将使用相同的凭证。
- 使用“添加”、“编辑”和“删除”按钮管理服务器列表和相应的凭证。完成后单击“确定”。
- 在引用的自定义编辑器中,单击“确定”以保存智能引用条目。
在控制台的目录树中,应可在智能引用条目的位置看到目标子树或目标条目。如果智能引用条目上有黄色警告图标,则 URL 或凭证无效。双击条目,当看到“引用错误”时单击“继续”,并修改 URL 或“引用验证”以更正错误。
从命令行创建智能引用
要创建智能引用,请使用 referral 对象类和 extensibleObject 对象类创建条目。引用对象类允许 ref 属性,该属性将包含 LDAP URL。extensibleObject 对象类允许您使用任何模式属性作为命名属性,从而匹配目标条目。
例如,定义以下条目以返回智能引用,而非条目 uid=bjensen:
ldapmodify -a -h host -p port -D "cn=Directory Manager" -w password
dn:uid=bjensen,ou=People,dc=example,dc=com
objectclass:top
objectclass:extensibleObject
objectclass:referral
uid:bjensen
ref:ldap://east.example.com/cn=Babs%20Jensen,ou=Sales,
o=east,dc=example,dc=com
一旦定义了智能引用,对 uid=bjensen 条目的修改将实际在另一台服务器的 cn=Babs Jensen 条目上执行。ldapmodify 命令将自动遵循引用,例如:
ldapmodify -h host -p port -D "cn=Directory Manager" -w password
dn:uid=bjensen,ou=People,dc=example,dc=com
changetype:replace
replace:telephoneNumber
telephoneNumber: (408) 555-1234为了修改智能引用条目,必须使用 ldapmodify 的 -M 选项,例如:
ldapmodify -M -h host -p port -D "cn=Directory Manager" -w password
dn:uid=bjensen,ou=People,dc=example,dc=com
changetype:replace
replace:ref
ref:ldap://east.example.com/cn=Babs%20Jensen,ou=Marketing,
o=east,dc=example,dc=com
为属性值加密属性加密可以在将敏感数据存储在目录中时保护这些数据。属性加密允许您指定条目的某些属性以加密格式进行存储。这将防止数据存储在数据库文件、备份文件和导出的 LDIF 文件时可读。
使用此功能,属性值在存储到 Directory Server 数据库之前将被加密,在返回到客户机之前被解密并恢复其原始值。必须使用访问控制来防止客户机在没有权限的情况下访问这些属性,并在属性值于客户机和Directory Server 之间传输时使用 SSL 来加密属性值。有关数据安全性一般信息和属性加密详细信息的结构性概述,请参见 Directory Server Deployment Planning Guide。
仅当服务器上配置并启用了 SSL 时,属性加密才有效。但是,在默认情况下所有属性都是不加密的。属性加密在后缀级别进行配置。这意味着属性加密应用于它在其中显示为某一后缀的所有条目。如果要在整个目录中对属性进行加密,则必须对所有后缀中的该属性启用加密。
警告
属性加密将影响到与后缀相关联的所有数据和索引文件。如果修改了现有后缀的加密配置,则必须首先导出其内容,进行配置更改,然后重新导入内容。控制台将帮助您执行这些步骤。
此外,当启用加密时,必须手动删除数据库缓存文件,该文件可能仍然包含未加密的值。
最好在以新的后缀加载或创建数据之前启用加密属性。
如果选择加密一个属性,且该属性是某些条目的命名属性,DN 中显示的值将不加密,但条目中存储的值将被加密。
可选择使用 userPassword 属性进行加密,不过,除非密码需要以明文方式存储(如 DIGEST-MD5 SASL 验证),否则这不会真正实现安全性。如果密码已具有密码策略中定义的加密机制,则进一步的加密对安全性不会提高太多,反而会影响每个绑定操作的性能。
在存储器中时,加密属性前面有密码标记,用于表示所使用的加密算法。使用 DES 加密算法的加密属性会以如下方式出现:
使用控制台配置属性加密
- 在 Directory Server Console 中选择“配置”选项卡,展开“数据”节点,然后选择要加密属性值的后缀。在右面板中选择“属性加密”选项卡。
该选项卡包含一个表格,表格中列出了此后缀的所有当前已加密的属性的名称和加密模式。
- 要启用属性的加密,请执行以下操作:
- 要使属性不再加密,请从表格中选择属性名称,并单击“删除属性”按钮。
- 单击“保存”。系统会提示您在修改配置之前将后缀的内容导出到一个 LDIF 文件。
- 单击“导出后缀”打开“导出”对话框,或单击“继续”修改属性加密配置而不进行导出操作。新配置随后将被保存。
如果还未导出后缀,则必须现在导出以保存其内容。当您计划使用该 LDIF 文件在下一步中重新初始化后缀时,如果后缀包含加密属性,则可在已导出的 LDIF 中继续保持加密。
系统现在会提示您从 LDIF 文件初始化后缀。
- 单击“初始化后缀”打开“初始化”对话框,然后输入 LDIF 文件的名称以加载到目录中。
如果在上一步中导出了具有加密属性的后缀,则现在必须使用该文件进行初始化,因为一旦后缀重新初始化,已加密的值将无法恢复。文件加载完成并创建了索引后,指定属性的所有值就被加密了。
如果不想立即初始化后缀,请单击“关闭”。稍后可以使用导入数据中所述的步骤导入数据。
- 如果已更改配置对一个或多个属性进行加密,且这些属性在导入操作前具有值,则那些未加密的值中的一部分可能在数据库缓存中仍然可见。要清除数据库缓存,请执行以下操作:
- 如启动和停止 Directory Server 中所述,停止 Directory Server。
- 作为 root 或具有管理员特权的用户,从文件系统中删除数据库缓存文件:
ServerRoot/slapd-serverID/db/__db.*
- 再次启动 Directory Server。服务器将自动创建新的数据库缓存文件。
从命令行配置属性加密
- 如果要配置属性加密的后缀包含任何条目,则必须先将该后缀的内容导出到 LDIF 文件。有关详细信息,请参见导出数据。
当您计划使用该 LDIF 文件在步骤 5 中重新初始化后缀时,如果后缀包含加密属性,则可在已导出的 LDIF 中继续保持加密。
- 要启用属性的加密,请使用 ldapmodify 命令添加以下配置条目:
ldapmodify -a -h host -p port -D cn=Directory Manager -w password
dn:cn=attributeName, cn=encrypted attributes, cn=databaseName,
cn=ldbm database, cn=plugins, cn=config
objectclass:top
objectclass:dsAttributeEncryption
cn:attributeName
dsEncryptionAlgorithm:cipherName其中 attributeName 是要加密的属性的类型名称,databaseName 是与后缀对应的数据库的符号名称,而 cipherName 是以下任一项:
- 要使属性不再加密,请使用 ldapmodify 命令修改以下配置条目:
ldapmodify -h host -p port -D cn=Directory Manager -w password
dn:cn=attributeName, cn=encrypted attributes, cn=databaseName,
cn=ldbm database, cn=plugins, cn=config
changetype:modify
replace:dsEncryptionAlgorithm
dsEncryptionAlgorithm:clearText其中 attributeName 是要加密的属性的类型名称,databaseName 是与后缀对应的数据库的符号名称。
- 如果已更改配置对一个或多个属性进行加密,且这些属性在导入操作前具有值,则那些未加密的值中的一部分可能在数据库缓存中仍然可见。要清除数据库缓存,请执行以下操作:
- 如启动和停止 Directory Server 中所述,停止 Directory Server。
- 作为 root 或具有管理员特权的用户,从文件系统中删除数据库缓存文件:
ServerRoot/slapd-serverID/db/__db.*
- 再次启动 Directory Server。服务器将自动创建新的数据库缓存文件。该后缀中操作的性能将受到轻微的影响,直到缓存被重新填充。
- 如导入数据中所述,使用 LDIF 文件初始化后缀。
文件加载完成并创建了相应的索引后,指定属性的所有值就被加密了。
维护引用的完整性引用完整性是确保相关条目之间的关系得以维持的一种插件机制。几种属性类型(如用于组成员身份的属性)包含另一个条目的 DN。引用完整性可用于确保当条目被删除时,所有包含其 DN 的属性也将被删除。
例如,如果从目录中删除了某个用户的条目且启用了引用完整性,则服务器还从包含此用户成员的任何组中删除此用户。如果未启用引用完整性,则必须由管理员手动从组中删除此用户。如果未启用引用完整性,则用户必须由管理员手动从组中删除。如果您要将 Directory Server 与依赖用户和组管理的目录的其他 Sun Java System 产品集成,则这是一个重要功能。
引用完整性的工作方式
启用引用完整性插件时,它在执行了删除、重命名或移动操作后,会立即对指定属性执行完整性更新。但默认情况下,系统禁用引用完整性插件。
不论何时删除、重命名或移动目录中的用户条目或组条目,都会将操作记录到引用完整性日志文件中:
ServerRoot/slapd-serverID/logs/referint
在指定的时间(即更新时间间隔)后,服务器对已启用引用完整性的所有属性执行搜索,并将此搜索获得的条目与日志文件中已删除或已修改的条目的 DN 进行匹配。如果日志文件显示已删除条目,则删除对应的属性。如果日志文件显示已更改条目,则相应地修改对应的属性值。
当启用了引用完整性插件的默认配置时,每次执行删除、重命名或移动操作后,此插件都会对 member、uniquemember、owner、seeAlso 和 nsroledn 属性执行完整性更新。但是,可以配置引用完整性插件的行为以适合您的需要:
配置引用完整性
使用以下步骤从 Directory Server Console 启用或禁用引用完整性以及配置插件。
注
引用完整性插件使用的所有数据库中的所有属性必须已被索引。需要在所有数据库的配置中创建索引。如果启用了回退更改日志,则必须对 cn=changelog 后缀进行索引。有关信息,请参见第 10 章“创建目录数据的索引”。
从控制台配置引用完整性
- 在 Directory Server Console 的顶级“配置”选项卡上,展开“插件”节点,然后选择 "referential integrity postoperation" 插件。
该插件的设置显示在右面板中。
- 选中“启用插件”复选框可启用该插件,取消选中此复选框可禁用该插件。
- 设置参数 1 的值以修改更新时间间隔(以秒为单位)。通用值为:
- 将参数 2 的值设置为要使用的引用完整性日志文件的绝对路径。
参数 3 未使用,但是必须存在。
- 为引用完整性而监视的属性从参数 4 开始列出,单击“添加”和“删除”按钮管理该列表以及添加自己的属性。
- 单击“保存”保存更改。
- 要使更改生效,必须重新启动 Directory Server。
使用带复制功能的引用完整性
在复制环境中使用引用完整性插件时存在一定的限制:
要在复制拓扑结构中配置引用完整性插件,请执行以下操作:
- 确保所有副本已配置且所有复制协议已定义。
- 确定要为其维护引用完整性的属性集。也请确定要在主服务器上使用的更新时间间隔。
- 使用相同的属性集和相同的更新时间间隔,在所有主服务器上启用引用完整性插件。此过程在配置引用完整性中已进行了说明。
- 确保在全部的消费者服务器上禁用引用完整性插件。
将引用完整性与旧版复制一起使用
从 4.x 主服务器向 5.x 消费者复制时,在启用引用完整性的情况下,必须在 4.x 主服务器上重新配置引用完整性插件,才能将引用完整性更改写入 4.x 更改日志。此操作使引用完整性更改被复制。如果您没有重新配置插件,那么引用完整性将无法正常工作。
在以下环境中重新配置引用完整性插件:
- 停止 4.x 服务器。
- 打开位于 ServerRoot/slapd-ServerID/config/ 下的 slapd.ldbm.conf 文件。
- 找到以下面的句子开始的行:
plugin postoperation on "referential integrity postoperation"
- 通过将属性列表前的参数 0 更改为 1 来修改此行。
例如,将
plugin postoperation on "referential integrity postoperation" "ServerRoot/lib/referint-plugin.dll" referint_postop_init 0 "ServerRoot/slapd-serverID/logs/referint" 0 "member" "uniquemember" "owner" "seeAlso"
更改为
plugin postoperation on "referential integrity postoperation" "ServerRoot/lib/referint-plugin.dll" referint_postop_init 0 "ServerRoot/slapd-serverID/logs/referint" 1 "member" "uniquemember" "owner" "seeAlso"
- 保存 slapd.ldbm.conf 文件。
- 重新启动服务器。
- 从 4.x 提供者重新初始化 5.x 消费者。
搜索目录可以使用任何 LDAP 客户机在目录中查找条目。大多数客户机都提供了某些形式的搜索界面,使您能够搜索目录和检索条目信息。
已在目录中设置的访问控制决定了搜索的结果。普通用户通常不会“看见”很多目录,而目录管理员对所有数据(包括配置)有完整访问权。
使用 ldapsearch 搜索目录
还可以使用 ldapsearch 命令行实用程序来查找和检索目录条目。注意,这一节描述的实用程序 ldapsearch 不是 Solaris 平台附带的实用程序,但它是 Directory Server Resource Kit 的一部分。有关此实用程序的详细信息,请参见 Directory Server Resource Kit Tools Reference。
该实用程序将使用指定的用户身份(经常是识别名)和密码来打开与服务器的连接,并基于搜索过滤器查找条目。搜索范围可以包括一个条目、条目的直接子条目或整个树或子树。
搜索结果以 LDIF 格式返回。
ldapsearch 命令行格式
使用 ldapsearch,必须使用如下格式输入命令:
ldapsearch [optional_options] [search_filter] [optional_list_of_attributes]
其中
- optional_options 代表一组命令行选项。如果有的话,必须在搜索过滤器之前指定它们。
- search_filter 代表在 LDAP 搜索过滤器中所描述的 LDAP 搜索过滤器。必须指定搜索过滤器,除非在文件中使用 -f 选项提供了搜索过滤器。
- optional_list_of_attributes 代表一个以空格分隔的属性列表。指定属性列表可以减少搜索结果中返回的属性个数。该属性列表必须出现在搜索过滤器之后。有关示例,请参见显示属性的子集。如果没有指定属性列表,则搜索将返回目录中设置的访问控制所允许的所有属性的值(操作属性除外)。
使用特殊字符
使用 ldapsearch 命令行实用程序时,可能需要指定包含对命令行解释程序有特殊意义的字符(如空格 [ ]、星号 [*]、反斜杠 [\] 等)的值。指定特殊字符时,用引号 ("") 将值引起来。例如:
-D "cn=Charlene Daniels,ou=People,dc=example,dc=com"
根据命令行解释程序的具体情况,请使用单引号或双引号达到此目的。有关详细信息,请参见 shell 文档。
常用的 ldapsearch 选项
下面列出了常用的 ldapsearch 命令行选项。如果指定的值包含空格 [ ],该值应当用双引号引起来,例如,-b "ou=groups, dc=example,dc=com"。
-b
指定搜索的起点。这里指定的值必须是当前存在于数据库中的标识名。如果 LDAP_BASEDN 环境变量已经设置为基 DN,则该选项是可选的。
在该选项中指定的值应当放在双引号中。例如:
-b "cn=Charlene Daniels, ou=People, dc=example,dc=com"
-D
指定标识名,使用此名称对服务器进行验证。如果服务器支持匿名访问,则该选项是可选的。如果指定了此值,它必须是由 Directory Server 识别的 DN,而且它还必须有修改此条目的授权。例如:
-D "uid=cdaniels, dc=example,dc=com"
-h
指定用来安装 Directory Server 的计算机的主机名或 IP 地址。如果没有指定主机,则 ldapsearch 使用 localhost。例如,-h myServer。
-l
指定等待执行完一次搜索请求的最大秒数。不管在这里指定的值是什么,ldapsearch 的等待时间永远不会超过服务器的 nsslapd-timelimit 属性所允许的时间(除非发生持久搜索)。有关持久搜索的详细信息,请参见 Directory Server Resource Kit Tools Reference。
例如,-l 300。nsslapd-timelimit 属性的默认值是 3,600 秒(1 小时)。
-p
指定 Directory Server 使用的 TCP 端口号。例如,-p 5201。默认是 389,使用 SSL 选项时是 636。
-s
指定搜索的范围。范围可是下列一种:
-w
指定与在 -D 选项中指定的标识名相关联的密码。如果不指定该选项,则使用匿名访问。例如,-w diner892。
-x
指定在服务器上而不是客户机上对搜索结果进行排序。如果想要按照匹配规则排序(在多语言搜索情况下),则该选项是有用的。通常,在服务器上比在客户机上排序速度更快,尽管服务器端排序需要使用服务器资源。
-z
指定为响应搜索请求而返回的最大条目数。例如,-z 1000。
通常,不管在这里指定的值是多少,ldapsearch 返回的条目数永远不会超过服务器的 nsslapd-sizelimit 属性所允许的条目数。但是,通过在使用该命令行参数时绑定为 root DN,可以覆盖该限制。绑定为 root DN 时,该选项默认值为零 (0)。nsslapd-sizelimit 属性的默认值为 2,000 个条目。
有关所有 ldapsearch 实用程序选项的详细信息,请参见 Directory Server Resource Kit Tools Reference。
ldapsearch 示例
在下一组示例中,假设有如下情况:
返回所有条目
在给定上述信息的情况下,以下调用将返回目录中的所有条目:
ldapsearch -h myServer -p 5201 -D "cn=directory manager" -w password
-b "dc=example,dc=com" -s sub "(objectclass=*)""(objectclass=*)" 是匹配目录中任何条目的搜索过滤器。
在命令行上指定搜索过滤器
可以直接在命令行上指定搜索过滤器。如果这样做,一定要将过滤器包括在引号中(“过滤器”)。而且,不要指定 -f 选项。
例如:
ldapsearch -h myServer -p 5201 -D "cn=directory manager" -w password
-b "dc=example,dc=com" "(cn=Charlene Daniels)"搜索根 DSE 条目
根 DSE 是特殊的条目,它包含与当前的服务器实例相关的信息,例如,受支持的后缀列表、可用的验证机制等等。通过提供搜索基础 "",可以搜索该条目。还必须指定搜索范围 base 和过滤器 "(objectclass=*)"。
例如:
ldapsearch -h myServer -p 5201 -D "cn=directory manager" -w password
-b "" -s base "(objectclass=*)"搜索模式条目
Directory Server 将所有目录服务器模式存储在特殊的 cn=schema 条目中。该条目包含了为目录服务器定义的每个对象类和属性的相关信息。
可以按如下方式检查该条目的内容:
ldapsearch -h myServer -p 5201 -D "cn=directory manager" -w password
-b "cn=schema" -s base "(objectclass=*)"使用 LDAP_BASEDN
为了使搜索更容易,可以使用 LDAP_BASEDN 环境变量来设置搜索基础。这样做允许您跳过用 -b 选项指定搜索基础的步骤(有关如何设置环境变量的信息,请参见操作系统的文档)。
通常,将 LDAP_BASEDN 设置为目录的后缀值。由于目录后缀等于根,或目录中最上面的条目,所以这将导致所有搜索从目录的根条目开始。
例如,如果已经将 LDAP_BASEDN 设置为 dc=example,dc=com,则可以使用如下命令行调用在目录中搜索 (cn=Charlene Daniels):
ldapsearch -h myServer -p 5201 -D "cn=directory manager" -w password
"(cn=Charlene Daniels)"在该示例中,使用了 sub 的默认范围,这是因为没有用 -s 选项指定范围。
显示属性的子集
ldapsearch 命令以 LDIF 格式返回所有搜索结果。默认情况下,ldapsearch 返回条目的标识名,以及允许您读取的所有属性。可以将目录访问控制设置为只允许您读取任何给定目录条目的属性的子集。只有操作属性不会返回。如果想让操作属性作为搜索操作的结果返回,必须在搜索命令中明确指定它们。有关操作属性的详细信息,请参见 Directory Server Administration Reference。
假设您不想看见在搜索结果中返回的所有属性。您可以在命令行中紧靠搜索过滤器的后面指定您想看见的属性,以便将返回属性限制为只有少量具体属性。例如,要显示目录中每个条目的 cn 和 sn 属性,请使用如下命令:
ldapsearch -h myServer -p 5201 -D "cn=directory manager" -w password
"(objectclass=*)" sn cn该示例假定您使用 LDAP_BASEDN 设置搜索基础。
搜索多值属性
在搜索期间,Directory Server 不一定以经过排序的顺序返回多值属性。例如,假设想要搜索要求服务器在更改生效之前重新启动的 cn=config 的配置属性。
ldapsearch -h myServer -p 5201 -D "cn=directory manager" -w password
-b cn=config "(objectclass=*)" nsslapd-requiresrestart将返回下列结果:
dn:cn=config
nsslapd-requiresrestart:cn=config:nsslapd-port
nsslapd-requiresrestart:cn=config:nsslapd-secureport
nsslapd-requiresrestart:cn=config:nsslapd-plugin
nsslapd-requiresrestart:cn=config:nsslapd-changelogdir
nsslapd-requiresrestart:cn=config:nsslapd-changelogsuffix
nsslapd-requiresrestart:cn=config:nsslapd-changelogmaxentries
nsslapd-requiresrestart:cn=config:nsslapd-changelogmaxage
nsslapd-requiresrestart:cn=config:nsslapd-db-locks
nsslapd-requiresrestart:cn=config:nsslapd-return-exact-case
nsslapd-requiresrestart:cn=config,cn=ldbm database,cn=plugins,
cn=config:nsslapd-allidsthreshold
nsslapd-requiresrestart:cn=config,cn=ldbm database,cn=plugins,
cn=config:nsslapd-dbcachesize
nsslapd-requiresrestart:cn=config,cn=ldbm database,cn=plugins,
cn=config:nsslapd-dbncache
nsslapd-requiresrestart:cn=config,cn=ldbm database,cn=plugins,
cn=config:nsslapd-directory
nsslapd-requiresrestart:cn=encryption,cn=config:nssslsessiontimeout
nsslapd-requiresrestart:cn=encryption,cn=config:nssslclientauth
nsslapd-requiresrestart:cn=encryption,cn=config:nssslserverauth
nsslapd-requiresrestart:cn=encryption,cn=config:nsssl2
nsslapd-requiresrestart:cn=encryption,cn=config:nsssl3
...如上所示,nsslapd-requiresrestart 属性接受多个值。但是,这些值不是按排序后的顺序提供的。如果您开发的应用程序需要以排序顺序提供的多值属性,请应当确保应用程序执行排序。
搜索时使用客户机验证
该示例显示用户 cdaniels 使用客户机验证搜索目录:
ldapsearch -h myServer -p 636 -b "dc=example,dc=com"
-N "cdanielsscertname" -Z -W certdbpassword
-P /home/cdaniels/certdb/cert.db "(givenname=Richard)"LDAP 搜索过滤器
搜索过滤器会选择搜索操作所返回的条目。它们大多数情况下与 ldapsearch 命令行实用程序一起使用。使用 ldapsearch 时,可以在文件中放置多个搜索过滤器,每个过滤器在文件中单独的一行上,也可以直接在命令行指定搜索过滤器。
例如,如下过滤器指定对通用名 Lucie Du Bois 的搜索:
(cn=Lucie Du Bois)
该搜索过滤器返回包含通用名 Lucie Du Bois 的所有条目。搜索通用名值不区分大小写。
如果通用名属性有与语言标记关联的值,则返回所有值。这样,如下两个属性值都与该过滤器匹配:
cn:Lucie Du Bois
cn;lang-fr:Lucie Du Bois
搜索过滤器语法
搜索过滤器的基本语法是:
(attribute operator value)
例如:
(buildingname>=alpha)
该示例中,buildingname 是属性,>= 是运算符,alpha 是值。您定义的过滤器也可以使用通过布尔运算符组合在一起的不同属性。
下面各节详细介绍了搜索过滤器:
在搜索过滤器中使用属性
搜索条目时,可以指定与条目的类型关联的属性。例如,搜索人员条目时,可以使用 cn 属性来搜索有特定通用名的人员。
下面是人员条目可能包括的属性的示例:
有关与条目类型关联的属性的列表,请参见 Directory Server Administration Reference。
在搜索过滤器中使用运算符
表 2-2 列出了可以在搜索过滤器中使用的运算符:
扩展运算符用于将搜索扩展到 dn 属性(例如 cn:dn:=John),并为多语言搜索提供支持。
在搜索过滤器中使用 OID
LDAPv3 允许您为特定属性生成匹配运算符和规则。匹配规则定义了如何用特定语法比较属性值。换句话说,匹配规则定义了如何比较潜在匹配属性。例如,匹配规则可以定义在比较属性时是否考虑文本大小写。
在创建规则后,可以在搜索过滤器中引用这些规则。
例如,以下搜索过滤器使用 OID 2.5.13.5 指定的匹配规则比较包含姓 Jensen 的条目:
(sn:2.5.13.5:=Jensen)
以下示例说明使用“:dn”符号来表明在进行比较时应使用 OID 2.5.13.5,并且在评估匹配时应将条目标识名的属性作为条目的一部分考虑在内:
(sn:dn:2.5.13.5:=Jensen)
使用复合搜索过滤器
可以使用以前缀表示法表示的布尔运算符将多个搜索过滤器组件组合在一起,如下所示:
(Boolean-operator(filter)(filter)(filter)...)
其中,Boolean-operator 是表 2-3 列出的任意一个布尔运算符。
布尔运算符可以组合和嵌套在一起,形成复杂的表达式,例如:
(Boolean-operator(filter)(Boolean-operator(filter)(filter)))
可用于搜索过滤器的布尔运算符包括:
对布尔表达式的评估遵循如下顺序:
使用文件指定搜索过滤器
可以不将搜索过滤器输入命令行,而是将它们输入文件。这样做时,应在文件中单独的一行上指定每个搜索过滤器。ldapsearch 命令以每个搜索在文件中的出现顺序运行每个搜索。
例如,如果文件包含:
(sn=Daniels)
(givenname=Charlene)那么,ldapsearch 先查找姓为 Daniels 的所有条目,然后查找名为 Charlene 的所有条目。如果发现条目与这两个搜索条件都匹配,则条目将返回两次。
例如,假设您在名为 searchdb 的文件中指定前面的搜索过滤器,并使用 LDAP_BASEDN 设置搜索基础。以下命令行将返回与任一搜索过滤器匹配的所有条目:
ldapsearch -h myServer -p 5201 -D "cn=directory manager" -w password
-f searchdb通过在搜索行的末尾指定需要的属性名称,可以限制在这里返回的属性集。例如,如下 ldapsearch 命令将执行这两个搜索,但只返回每个条目的 DN 和 givenname 以及 sn 属性:
ldapsearch -h myServer -p 5201 -D "cn=directory manager" -w password
-f searchdb sn givenname在搜索过滤器中指定非 7 位 ASCII 字符
必须将搜索过滤器中的非 7 位 ASCII 字符替换为某种字符表示形式,其中 UTF-8 编码的每个字节前面有一个反斜杠。在 UTF-8 中,用十六进制代码表示字符的每个字节。
例如,字符 é 的 UTF-8 表示形式为 c3a9。因此,在搜索过滤器中将 é 表示为 \c3\a9。因此,要搜索 cn=Véronique Martin,请使用以下命令:
ldapsearch -h myServer -b "dc=example,dc=com" "(cn=V\c3\a9ronique Martin)"
在搜索过滤器中使用表 2-4 中列出的特殊字符时,也必须按此方式来表示这些字符。
表 2-4 搜索过滤器中的特殊字符
特殊字符
包含特殊字符的值
示例过滤器
*
Five*Star
(cn=Five\2aStar)
\
c:\File
(cn=\5cFile)
()
John (2nd)
(cn=John \282nd\29)
null
0004
(bin=\00\00\00\04)
搜索过滤器内标识名中的转义字符
在 Directory Server 任何部分中使用 DN 时,必须使用反斜杠 (\) 转义逗号和某些其他特殊字符。如果在搜索过滤器中使用 DN,则必须用 \5c 表示用于转义 DN 中特殊字符的反斜杠。例如:
DN:cn=Julie Fulmer,ou=Marketing\,Bolivia,dc=example,dc=com
搜索过滤器中的 DN:ldapsearch -h myServer -b "dc=example,dc=com" "(manager=cn=Julie Fulmer,ou=Marketing\5c,Bolivia,dc=example,dc=com)"
搜索过滤器示例
以下过滤器将搜索包含 manager 属性的一个或多个值的条目。这也称为存在搜索:
(manager=*)
以下过滤器将搜索包含通用名 Ray Kultgen 的条目。这也称为等式搜索:
(cn=Ray Kultgen)
以下过滤器将返回包含描述属性并且该属性包含子串 X.500 的所有条目:
(description=*X.500*)
以下过滤器将返回其组织单位是 Marketing 且其描述字段不包含子串 X.500 的所有条目:
(&(ou=Marketing)(!(description=*X.500*)))
以下过滤器将返回其组织单位是 Marketing 且其 manager 为 Julie Fulmer 或 Cindy Zwaska 的所有条目:
(&(ou=Marketing)(|(manager=cn=Julie Fulmer,ou=Marketing,
dc=example,dc=com)(manager=cn=Cindy Zwaska,ou=Marketing,
dc=example,dc=com)))以下过滤器返回不表示人的所有条目:
(!(objectClass=person))
注意,上面的过滤器将对性能有负面影响,并且应当作为复杂搜索的一部分使用。以下过滤器返回不表示人且其通用名类似于 printer3b 的所有条目:
(&(cn~=printer3b)(!(objectClass=person)))
搜索操作属性
如果想让操作属性作为搜索操作的结果返回,必须在搜索命令中明确指定它们。
ldapsearch -h myServer -p 5201 -D "cn=directory manager" -w password
"(objectclass=*)" aci要检索除了明确指定的操作属性以外的常规属性,除了操作属性外,还需要指定“*”。例如:
ldapsearch -h myServer -p 5201 -D "cn=directory manager" -w password
"(objectclass=*)" aci *
搜索多语言目录在执行搜索操作时,可以要求目录基于某种语言(服务器具有支持该语言的排序顺序)对结果进行排序。有关目录支持的排序顺序列表,请参见 Directory Server Administration Reference。
本节重点介绍 ldapsearch 语法的匹配规则过滤器部分。有关常规 ldapsearch 语法的详细信息,请参见 LDAP 搜索过滤器。有关使用 Directory Server Console 的“用户和组”部分搜索多语言目录的信息,请参见联机帮助或 Administration Server Administration Guide。
本部分包括以下主题:
匹配规则过滤器语法
匹配规则提供了目录在搜索操作过程中比较字符串的特殊准则。在多语言搜索中,匹配规则会告诉系统在执行搜索操作时应使用的排序顺序和运算符。匹配规则过滤器的语法如下所示:
attr:matchingRule:=value
其中:
- attr 是属于要搜索的条目的属性,如 cn 或 mail。
- matchingRule 是标识排序顺序或者排序顺序及关系运算符的字符串,具体情况取决于您要使用的格式。有关匹配规则格式的讨论,请参见匹配规则格式。
- value 是要搜索的属性值,或者是要搜索的关系运算符和属性值。过滤器值部分的语法取决于所使用的匹配规则格式。
匹配规则格式
可以按以下方式来表示搜索过滤器的匹配规则部分:
以下几节中讨论了其中每个选项的语法:
在匹配规则中使用 OID
Directory Server 支持的每个语言环境都有一个关联的排序顺序 OID。有关支持的语言环境及其关联 OID 的列表,请参见 Directory Server Administration Reference。
可以按如下所示,在匹配规则过滤器的匹配规则部分中使用排序顺序 OID:
attr:OID:=(relational_operator value)
关系运算符包含在字符串的值部分中,运算符与值之间用一个空格分隔。例如,要搜索所有位于 N4709 或其后面的 departmentNumber 属性(使用瑞典语排序顺序),请使用以下过滤器:
departmentNumber:1.3.6.1.4.1.42.2.27.9.4.129.1:=>= N4709
在匹配规则中使用语言标记
Directory Server 支持的每个语言环境都有一个关联的语言标记。有关支持的语言环境及其关联语言标记的列表,请参见 Directory Server Administration Reference。
可以按如下所示,在匹配规则过滤器的匹配规则部分中使用语言标记:
attr:language-tag:=(relational_operator value)
关系运算符包含在字符串的值部分中,运算符与值之间用一个空格分隔。例如,要在目录中搜索所有具有值 estudiante 的描述属性(使用西班牙语排序顺序),请使用以下过滤器:
description:es:== estudiante
在匹配规则中使用 OID 和后缀
作为使用关系运算符-值对的一种替代方法,您可以在过滤器的匹配规则部分中将表示特定运算符的后缀附加到 OID 的后面。可以按如下所示合并 OID 和后缀:
attr:OID+suffix:=value
例如,要搜索具有值 Softwareprodukte 的 businessCategory 属性(使用德语排序顺序),请使用以下过滤器:
businessCategory:1.3.6.1.4.1.42.2.27.9.4.28.1.3:=Softwareprodukte
上一示例中的 .3 是等式后缀。
在匹配规则中使用语言标记和后缀
作为使用关系运算符-值对的一种替代方法,您可以在过滤器的匹配规则部分中将表示特定运算符的后缀附加到语言标记的后面。可以按如下所示合并语言标记和后缀:
attr:language-tag+suffix:=value
例如,要搜索所有排在 La Salle 或其后面的姓氏(使用法语排序顺序),请使用以下过滤器:
sn:fr.4:=La Salle
在匹配规则过滤器中使用通配符
在使用匹配规则过滤器执行子串搜索时,可以使用星号 (*) 字符作为通配符来表示零个或多个字符。
例如,要搜索以字母 k 开头且以字母 n 结尾的属性值,应在搜索过滤器的值部分中输入 k*n。类似地,要搜索所有以字母 u 开头的属性值,应在搜索过滤器的值部分中输入值 u*。
要搜索包含星号 (*) 字符的值,必须转义星号字符。
支持的搜索类型
目录服务器支持以下类型的多语言搜索:
仅在英语中支持近似、语音和存在搜索。
与常规 ldapsearch 搜索操作一样,多语言搜索也使用运算符来定义搜索类型。然而,在调用多语言搜索时,可以在搜索字符串的值部分中使用标准运算符(=、>=、>、<、<=),也可以在过滤器的匹配规则部分中使用称为“后缀”(不要与目录后缀混淆)的特殊类型的运算符。表 2-5 描述了每种搜索类型、运算符和等效后缀。
多语言搜索示例
以下几节介绍了如何对目录数据执行多语言搜索的示例。每个示例给出了所有可能的匹配规则过滤器格式,因此,您可以熟悉这些格式并选择一种最适合的格式。
小于示例
在使用小于运算符 (<) 或后缀 (.1) 执行特定语言环境的搜索时,将会搜索所有位于给定属性之前(使用特定排序顺序)的属性值。
例如,要搜索所有排在姓 Marquez 之前的姓氏(使用西班牙语排序顺序),可以使用以下任何匹配规则过滤器:
sn:1.3.6.1.4.1.42.2.27.9.4.49.1:=< Marquez
sn:es:=< Marquez
sn:1.3.6.1.4.1.42.2.27.9.4.49.1.1:=Marquez
sn:es.1:=Marquez小于等于示例
在使用小于等于运算符 (<=) 或后缀 (.2) 执行特定语言环境的搜索时,将会搜索位于给定属性或其前面的所有属性值(使用特定排序顺序)。
例如,要搜索所有排在 CZ422 或其前面的房间号(使用匈牙利语排序顺序),可以使用以下任何匹配规则过滤器:
roomNumber:1.3.6.1.4.1.42.2.27.9.4.88.1:=<= CZ422
roomNumber:hu:=<= CZ422
roomNumber:1.3.6.1.4.1.42.2.27.9.4.88.1.2:=CZ422
roomNumber:hu.2:=CZ422等于示例
在使用等于运算符 (=) 或后缀 (.3) 执行特定语言环境的搜索时,将会搜索与给定属性匹配的所有属性值(使用特定排序顺序)。
例如,要搜索所有具有值 Softwareprodukte 的 businessCategory 属性(使用德语排序顺序),可以使用以下任何匹配规则过滤器:
businessCategory:1.3.6.1.4.1.42.2.27.9.4.28.1:== Softwareprodukte
businessCategory:de:== Softwareprodukte
businessCategory:1.3.6.1.4.1.42.2.27.9.4.28.1.3:=Softwareprodukte
businessCategory:de.3:=Softwareprodukte大于等于示例
在使用大于等于运算符 (>=) 或后缀 (.4) 执行特定语言环境的搜索时,将会搜索所有在给定属性或其后面的属性值(使用特定排序顺序)。
例如,要搜索所有位于 Québec 或其后面的地区(使用法语排序顺序),可以使用以下任何匹配规则过滤器:
locality:1.3.6.1.4.1.42.2.27.9.4.76.1:=>= Québec
locality:fr:=>= Québec
locality:1.3.6.1.4.1.42.2.27.9.4.76.1.4:=Québec
locality:fr.4:=Québec大于示例
在使用大于运算符 (>) 或后缀 (.5) 执行特定语言环境的搜索时,将会搜索所有在给定属性后面的属性值(使用特定排序顺序)。
例如,要搜索所有位于主机 schranka4 后面的邮件主机(使用捷克语排序顺序),可以使用以下任何匹配规则过滤器:
mailHost:1.3.6.1.4.1.42.2.27.9.4.26.1 :=> schranka4
mailHost:cs:=> schranka4
mailHost:1.3.6.1.4.1.42.2.27.9.4.26.1.5:=schranka4
mailHost:cs.5:=schranka4子串示例
在执行多语言子串搜索时,将会搜索所有与给定模式匹配的值(使用指定的排序顺序)。
例如,要搜索所有以 ming 结尾的用户 ID(使用中文排序顺序),可以使用以下任何匹配规则过滤器:
uid:1.3.6.1.4.1.42.2.27.9.4.143.1:=* *ming
uid:zh:=* *ming
uid:1.3.6.1.4.1.42.2.27.9.4.143.1.6:=*ming
uid:zh.6:=*ming
使用 DSMLv2 访问目录以下示例说明如何使用 DSML 请求来访问和搜索目录。有关 DSML 相关属性的完整列表和有关 DSMLv2 标准的信息,请参见 Directory Server Administration Reference。
本节包含以下示例:
注意,这些示例中的 content-length: 标头包含 DSMLv2 请求的完整长度。为了让这些示例正常工作,请确保您使用的编辑器会保持这些内容长度,否则请相应地修改它们。
空的匿名 DSML "Ping" 请求
默认情况下,DSML 前端处于禁用状态。有关如何启用它的信息,请参见启用 DSML 请求。要检查 DSML 前端是否已启用,请发送空的 DSML 批请求,如代码示例 2-1 所示:
代码示例 2-1 空的匿名 DSML 请求
该 DSML 请求的第一部分包含 HTTP 方法行 (POST /dsml HTTP/1.1),其后是很多 HTTP 头。HTTP 方法行指定 DSML 前端将使用的 HTTP 方法请求和 URL。POST 是 DSML 前端所接受的唯一的 HTTP 方法请求。/dsml URL 是 Directory Server 的默认 URL,但是可以使用任何其他的有效 URL 配置它。后面的 HTTP 头指定 DSML 请求的其余细节。
请求的其余部分是 SOAP/DSML 部分。DSML 请求以 XML 序言标头开始:
<?xml version='1.0' encoding='UTF-8'?>
它指定请求必须以 UTF8 字符集编码。标头后面是 SOAP 包络和正文元素,其中强制性包括 XML 模式、XML 模式实例和 SOAP 名称空间。
DSML 批请求元素标志 DSML 批请求的开始,它的后面紧接着强制性包括的 DSMLv2 名称空间:
xmlns='urn:oasis:names:tc:DSML:2:0:core'。
可以通过以下请求ID 来标识请求。
requestID='Ping!'>
空的批请求
<!-- empty batch request -->
是 XML 注释,使用关闭批请求、关闭 SOAP 正文和关闭 SOAP 包络元素,可以关闭 SOAP/DSML 批请求。
如果启用了 DSML 前端,则返回空的 DSML 响应,如代码示例 2-2 所示。
代码示例 2-2 空的匿名 DSML 响应
HTTP/1.1 200 OK
Cache-control:no-cache
Connection:close
Date:Mon, 09 Sep 2002 13:56:49 GMT
Accept-Ranges:none
Server:Sun-ONE-Directory/5.2
Content-Type:text/xml; charset="utf-8"
Content-Length: 500
<?xml version='1.0' encoding='UTF-8' ?>
<soap-env:Envelope
xmlns:xsd='http://www.w3.org/2001/XMLSchema'
xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance'
xmlns:soap-env='http://schemas.xmlsoap.org/soap/envelope/'
>
<soap-env:Body>
<batchResponse
xmlns:xsd='http://www.w3.org/2001/XMLSchema'
xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance'
xmlns='urn:oasis:names:tc:DSML:2:0:core'
requestID='Ping!'
>
</batchResponse>
</soap-env:Body>
</soap-env:Envelope>
如果不返回任何内容,则可以判断前端已被禁用。
可同时连接到目录的客户机数和 DSML 请求的大小存在最大限制。客户机的限制数由 ds-dsml-poolsize 和 ds-dsml-poolmaxsize 属性指定,而请求大小限制则由 ds-dsml-requestmaxsize 属性指定。有关 DSML 相关属性的详细信息,请参见 Directory Server Administration Reference。
发出 DSML 请求以便绑定为特殊用户
通过发出 DSML 请求,可以作为指定的用户或以匿名方式绑定到目录。要绑定为指定的用户,请求必须包括 HTTP 授权标头,该标头中必须包含映射到 DN 的 UID 和密码,如代码示例 2-3 所示。
代码示例 2-3 DSML 扩展操作:绑定为特定用户
POST /dsml HTTP/1.1
content-length: 578
Content-Type:text/xml; charset="utf-8"
HOST:hostMachine
Authorization:Basic ZWFzdGVyOmVnZw==
SOAPAction: ""
Connection:close
<?xml version='1.0' encoding='UTF-8'?>
<soap-env:Envelope
xmlns:xsd='http://www.w3.org/2001/XMLSchema'
xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance'
xmlns:soap-env='http://schemas.xmlsoap.org/soap/envelope/'>
<soap-env:Body>
<batchRequest
xmlns='urn:oasis:names:tc:DSML:2:0:core'>
<extendedRequest>
<requestName>1.3.6.1.4.1.4203.1.11.3</requestName>
</extendedRequest>
</batchRequest>
</soap-env:Body>
</soap-env:Envelope>
在该示例中,HTTP 授权标头传递了 uid easter 和密码 egg,而且它们是明文的,其格式为 easter:egg,并且以 base64 编码为 Authorization: Basic ZWFzdGVyOmVnZw==。
<extendedRequest> 标记用来指定 LDAP 扩展操作。<requestName> 标记用来指定扩展操作的 OID。在该示例中,OID 1.3.6.1.4.1.4203.1.11.3 识别 whoami 扩展操作。
DSML 扩展操作的响应显示发出绑定请求的用户的 DN。在代码示例 2-4 中,whoami 响应(包含 DN)显示在以下行中:
<response>dn:uid=easter,ou=people,dc=france,dc=sun,dc=com</response>。有关 whoami 扩展操作的详细信息,请参见
http://www.ietf.org/internet-drafts/draft-zeilenga-ldap-authzid-08.txt。代码示例 2-4 DSML 扩展操作的响应
HTTP/1.1 200 OK
Cache-control:no-cache
Connection:close
Date:Fri, 30 Jul 2004 09:15:09 GMT
Accept-Ranges:none
Server:Sun-ONE-Directory/5.2
Content-Type:text/xml; charset="utf-8"
Content-Length: 697
<?xml version='1.0' encoding='UTF-8' ?>
<soap-env:Envelope
xmlns:xsd='http://www.w3.org/2001/XMLSchema'
xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance'
xmlns:soap-env='http://schemas.xmlsoap.org/soap/envelope/'
>
<soap-env:Body>
<batchResponse
xmlns:xsd='http://www.w3.org/2001/XMLSchema'
xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance'
xmlns='urn:oasis:names:tc:DSML:2:0:core'
>
<extendedResponse>
<resultCode code='0' descr='success'/>
<responseName>1.3.6.1.4.1.4203.1.11.3</responseName>
<response>dn:uid=easter,ou=people,dc=france,dc=sun,dc=com</response>
</extendedResponse>
</batchResponse>
</soap-env:Body>
</soap-env:Envelope>
对于匿名访问来说,尽管通常会受访问控制的严格约束,并且还可能受数据访问限制的制约,但匿名访问不需要有 HTTP 授权标头。同样,可以发出 DSML 请求以便让 LDAP 代理执行 LDAP 操作。
因为 DSML 请求是成批进行管理的,所以,如果由 LDAP 代理发出请求,则必需的 DSML 代理授权请求必须是给定的一批请求中的第一个请求。
DSML 搜索请求
代码示例 2-5 显示了一个对根 DSE 条目的 DSML 基本对象搜索请求。
代码示例 2-5 DSML 搜索请求
POST /dsml HTTP/1.1
HOST:hostMachine
Content-Length: 1081
Content-Type:text/xml
SOAPAction: ""
Connection:close
<?xml version='1.0' encoding='UTF-8'?>
<soap-env:Envelope
xmlns:xsd='http://www.w3.org/2001/XMLSchema'
xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance'
xmlns:soap-env='http://schemas.xmlsoap.org/soap/envelope/'
>
<soap-env:Body>
<batchRequest
xmlns='urn:oasis:names:tc:DSML:2:0:core'
requestID='Batch of search requests'
>
<searchRequest
dn=""
requestID="search on Root DSE"
scope="baseObject"
derefAliases="neverDerefAliases"
typesOnly="false"
>
<filter>
<present name="objectClass"/>
</filter>
<attributes>
<attribute name="namingContexts"/>
<attribute name="supportedLDAPversion"/>
<attribute name="vendorName"/>
<attribute name="vendorVersion"/>
<attribute name="supportedSASLMechanisms"/>
</attributes>
</searchRequest>
</batchRequest>
</soap-env:Body>
</soap-env:Envelope>
在该示例中:
对于与过滤器匹配的条目,使用如下代码表示是否存在 objectclass 过滤器:
<filter>
<present name="objectClass"/>
</filter>这等价于 LDAP 过滤器字符串 (objectclass=*)。该过滤器后面是需要的属性列表:
<attribute>
<attribute name="namingContexts"/>
<attribute name="supportedLDAPversion"/>
<attribute name="vendorName"/>
<attribute name="vendorVersion"/>
<attribute name="supportedSASLMechanisms"/>
</attributes>示例 DSML 搜索响应如代码示例 2-6 所示。
代码示例 2-6 DSML 搜索响应
HTTP/1.1 200 OK
Cache-control:no-cache
Connection:close
Date:Fri, 30 Jul 2004 09:21:43 GMT
Accept-Ranges:none
Server:Sun-ONE-Directory/5.2
Content-Type:text/xml; charset="utf-8"
Content-Length: 1287
<?xml version='1.0' encoding='UTF-8' ?>
<soap-env:Envelope
xmlns:xsd='http://www.w3.org/2001/XMLSchema'
xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance'
xmlns:soap-env='http://schemas.xmlsoap.org/soap/envelope/'
>
<soap-env:Body>
<batchResponse
xmlns:xsd='http://www.w3.org/2001/XMLSchema'
xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance'
xmlns='urn:oasis:names:tc:DSML:2:0:core'
requestID='Batch of search requests'
>
<searchResponse requestID='search on Root DSE'>
<searchResultEntry>
<attr name='namingContexts'>
<value>dc=france,dc=sun,dc=com</value>
<value>o=NetscapeRoot</value>
</attr>
<attr name='supportedLDAPVersion'>
<value>2</value>
<value>3</value>
</attr>
<attr name='vendorName'>
<value>Sun Microsystems, Inc.</value>
</attr>
<attr name='vendorVersion'>
<value>Sun-ONE-Directory/5.2</value>
</attr>
<attr name='supportedSASLMechanisms'>
<value>EXTERNAL</value>
<value>GSSAPI</value>
<value>DIGEST-MD5</value>
</attr>
</searchResultEntry>
<searchResultDone>
<resultCode code='0' descr='success'/>
</searchResultDone>
</searchResponse>
</batchResponse>
</soap-env:Body>
</soap-env:Envelope>