Sun Java System Directory Server Enterprise Edition 6.3 管理指南

使用 ldapmodify ldapdelete 管理条目

ldapmodifyldapdelete 命令行实用程序提供了用于添加、编辑和删除目录内容的完整功能。可以使用这些实用程序管理服务器的配置条目和用户条目中的数据。还可以使用这些实用程序编写脚本,以便对一个或多个目录执行批量管理。

本书中的过程几乎都使用了 ldapmodifyldapdelete 命令。以下部分介绍执行这些过程所需的基本操作。有关 ldapmodifyldapdelete 命令的详细信息,请参见《Sun Java System Directory Server Enterprise Edition 6.3 Reference》

命令行实用程序的输入始终采用 LDIF 格式,可以直接从命令行或通过输入文件提供此输入。以下部分提供了与 LDIF 输入有关的信息,后续部分将介绍适用于每种修改类型的 LDIF 输入。

有关正确设置 LDIF 输入格式的信息,请参见《Sun Java System Directory Server Enterprise Edition 6.3 Reference》中的“Guidelines for Providing LDIF Input”

以下部分介绍这些基本操作:

使用 ldapmodify 添加条目

可使用 DSCC 执行此任务。有关信息,请参见目录服务控制中心界面和 DSCC 联机帮助。

可以使用 ldapmodify-a 选项向目录中添加一个或多个条目。以下示例将创建包含用户的结构条目,然后再创建用户条目:


$ ldapmodify -a -h host1 -p 1389 -D cn=admin,cn=Administrators,cn=config -w -
Enter bind 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: secret

-D-w 选项分别提供用户的绑定 DN 和密码(该用户具有创建这些条目的权限)。-a 选项表示将添加 LDIF 中的所有条目。然后将按 DN 和属性值列出每个条目,各条目之间以空行分隔。ldapmodify 实用程序将在输入每个条目后创建该条目,并会报告任何错误。

    按照约定,条目的 LDIF 将列出以下属性:

  1. 条目 DN。

  2. 对象类列表。

  3. 一个或多个命名属性。此属性是 DN 中使用的属性,它不一定属于必需属性。

  4. 所有对象类的必需属性列表。

  5. 要包含的所有允许的属性。

键入 userPassword 属性值时,请提供明文形式的密码。服务器将对此值进行加密,并且只存储加密的值。请务必限制读取权限以保护 LDIF 文件中出现的明文密码。

还可以使用另一种形式的 LDIF,它不要求在命令行中使用 -a 选项。此形式的优点是可以合并条目添加语句和条目修改语句,如以下示例所示。


$ ldapmodify -h host1 -p 1389 -D cn=admin,cn=Administrators,cn=config -w -
Enter bind 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: secret

changetype: add 关键字表示应该使用所有后续属性创建具有给定 DN 的条目。所有其他选项和 LDIF 约定都与本部分前面的叙述相同。

在这两个示例中,都可以使用 -f filename 选项从文件(而非终端输入)中读取 LDIF。LDIF 文件所包含的格式必须与终端输入使用的格式相同,这取决于您是否使用 -a 选项。

使用 ldapmodify 修改条目

可使用 DSCC 执行此任务。有关信息,请参见目录服务控制中心界面和 DSCC 联机帮助。

可以使用 changetype: modify 关键字在现有条目中添加、替换或删除属性及属性值。指定 changetype: modify 时,还必须提供一个或多个更改操作,以表明将如何修改条目。以下示例中显示了三种可能的 LDIF 更改操作:


dn: entryDN
changetype: modify
add: attribute 
attribute: value...
-
replace: attribute 
attribute: newValue...
-
delete: attribute 
[attribute: value]
...

可以使用独占一行的连字符 (-) 分隔相同条目上的操作,并可使用空行来分隔不同条目上的操作组。还可以为每个操作提供多个 attribute: value 对。

添加属性值

无法使用 DSCC 执行此任务。请使用命令行,如以下过程所述。

以下示例显示如何使用相同的 add LDIF 语法向现有多值属性和尚未存在的属性中添加值:


$ ldapmodify -h host1 -p 1389 -D cn=admin,cn=Administrators,cn=config -w -
Enter bind password:
dn: uid=bjensen,ou=People,dc=example,dc=com
changetype: modify
add: cn
cn: Babs Jensen
-
add: mobile
mobile: (408) 555-7844

如果存在以下任一情况,则此操作可能会失败,并且服务器将返回错误:

使用二进制属性子类型

可使用 DSCC 执行此任务。有关信息,请参见目录服务控制中心界面和 DSCC 联机帮助。

attribute;binary 子类型表示属性值必须作为二进制数据通过 LDAP 进行传输,而不考虑属性值的实际语法。此子类型适用于没有 LDAP 字符串表示的复杂语法,如 userCertificate。不应将二进制子类型用于其他目的。

ldapmodify 命令中使用时,可以将相应的子类型添加到任何 LDIF 语句的属性名称中。

要输入二进制值,可以在 LDIF 文本中直接键入或从其他文件读取。以下示例显示了用于从文件读取二进制值的 LDIF 语法:


$ ldapmodify -h host1 -p 1389 -D cn=admin,cn=Administrators,cn=config -w -
Enter bind password:
version: 1
dn: uid=bjensen,ou=People,dc=example,dc=com
changetype: modify
add: userCertificate;binary
userCertificate;binary:< file:///local/cert-file

要使用 :< 语法指定文件名,必须将 version: 1 行作为 LDIF 语句的开头。当 ldapmodify 处理此语句时,它会将属性设置为从给定文件的全部内容中读取的值。

添加具有语言子类型的属性

可使用 DSCC 执行此任务。有关信息,请参见目录服务控制中心界面和 DSCC 联机帮助。

属性的语言和发音子类型可指定本地化的值。为属性指定语言子类型时,该子类型将添加到属性名称中,如下所示:


attribute;lang-CC

其中 attribute 是现有属性类型,而 cc 是用于指定语言的双字母国家/地区代码。您还可以将发音子类型添加到语言子类型中,以便为本地化的值指定一个语音值。在本案例中,属性名称如下所示:


attribute;lang-CC;phonetic

要对具有子类型的属性执行操作,必须明确匹配其子类型。例如,如果要修改具有 lang-fr 语言子类型的属性值,则必须在修改操作中包含 lang-fr,如下所示:


$ ldapmodify -h host1 -p 1389 -D cn=admin,cn=Administrators,cn=config -w -
Enter bind password:
dn: uid=bjensen,ou=People,dc=example,dc=com
changetype: modify
add: homePostalAddress;lang-fr
homePostalAddress;lang-fr: 34, rue de la Paix

注 –

如果属性值包含非 ASCII 字符,则这些字符必须为 UTF-8 编码的字符。


修改属性值

可使用 DSCC 执行此任务。有关信息,请参见目录服务控制中心界面和 DSCC 联机帮助。

以下示例说明如何通过使用 LDIF 中的 replace 语法更改属性值:


$ ldapmodify -h host1 -p 1389 -D cn=admin,cn=Administrators,cn=config -w -
Enter bind 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)。

如果属性值的末尾是空格,则此空格将作为属性值的一部分进行编码。在使用 DSCC 或 ldapsearch 命令验证更改时,所显示的值可能是纯文本,也可能是 base-64 编码的文本。这取决于您所使用的目录服务器客户端。

删除属性值

可使用 DSCC 执行此任务。有关信息,请参见目录服务控制中心界面和 DSCC 联机帮助。

以下示例说明如何完整地删除属性,以及如何仅删除多值属性的一个值:


$ ldapmodify -h host1 -p 1389 -D cn=admin,cn=Administrators,cn=config -w -
Enter bind password:
dn: uid=bjensen,ou=People,dc=example,dc=com
changetype: modify
delete: facsimileTelephoneNumber
-
delete: cn
cn: Babs Morris

使用 delete 语法时如果不指定 attribute: value 对,将删除该属性的所有值。如果指定 attribute: value 对,则只会删除该值。

修改多值属性的一个值

可使用 DSCC 执行此任务。有关信息,请参见目录服务控制中心界面和 DSCC 联机帮助。

要使用 ldapmodify 命令修改多值属性的一个值,必须执行以下示例中显示的两个操作:


$ ldapmodify -h host1 -p 1389 -D cn=admin,cn=Administrators,cn=config -w -
Enter bind 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 删除条目

可使用 DSCC 执行此任务。有关信息,请参见目录服务控制中心界面和 DSCC 联机帮助。

可以使用 ldapdelete 命令行实用程序从目录中删除条目。此实用程序将绑定到目录服务器,并根据条目 DN 删除一个或多个条目。必须提供具有删除指定条目的权限的绑定 DN。

您无法删除具有子条目的条目。LDAP 协议不允许出现子条目不再具有父条目的情形。例如,您无法删除组织单位条目,除非先删除了属于该组织单位的所有条目。

以下示例仅显示组织单位的一个条目。可以先后删除此条目及其父条目。


$ ldapdelete -h host1 -p 1389 -D cn=admin,cn=Administrators,cn=config -w -
Enter bind password:
uid=bjensen,ou=People,dc=example,dc=com
ou=People,dc=example,dc=com

使用 ldapmodify 删除条目

可使用 DSCC 执行此任务。有关信息,请参见目录服务控制中心界面和 DSCC 联机帮助。

使用 ldapmodify 实用程序时,还可以使用 changetype: delete 关键字删除条目。使用 ldapdelete 时的所有限制此时同样适用,如上一部分所述。使用 LDIF 语法删除条目的优点在于,您可以在单个 LDIF 文件中执行混合操作。

以下示例执行与上一示例相同的删除操作:


$ ldapmodify -h host1 -p 1389 -D cn=admin,cn=Administrators,cn=config -w -
dn: uid=bjensen,ou=People,dc=example,dc=com
changetype: delete

dn: ou=People,dc=example,dc=com
changetype: delete

使用 ldapsearch 搜索条目

可使用 DSCC 执行此任务。有关信息,请参见目录服务控制中心界面和 DSCC 联机帮助。

可以使用 ldapsearch 命令行实用程序查找和检索目录条目。请注意,ldapsearch 实用程序不是 Solaris 平台提供的实用程序,而是 Directory Server Resource Kit 的一部分。

有关使用 ldapsearchldapsearch 常用选项、接受的格式以及示例的详细信息,请参阅《Sun Java System Directory Server Enterprise Edition 6.3 Reference》