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

管理条目

管理条目的最佳方式取决于环境:

使用 DSCC 管理条目

DSCC 允许您查看条目的所有可读属性以及编辑其可写属性。此外,您还可以添加和删除属性、设置多值属性,以及管理条目的对象类。有关如何使用 DSCC 管理条目的详细信息,请参见 DSCC 联机帮助。有关 DSCC 的一般详细信息,请参见目录服务控制中心界面

使用目录编辑器管理条目

目录编辑器是一种易于使用的目录编辑工具,允许管理员和最终用户搜索、创建和编辑数据。此数据采用用户、组和容器的形式。

管理条目 ldapmodifyldapdelete

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

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

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

有关正确格式化 LDIF 输入的信息,请参见《Sun Java System Directory Server Enterprise Edition 6.1 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 的一部分。

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

Procedure使用 ldapmodify 移动或重命名条目

以下过程将使用修改 DN 操作。在开始此操作之前,请确保您已经熟悉使用修改 DN 操作的准则和限制部分的内容。

对于此过程的某些部分,可以使用 DSCC 执行此任务。有关信息,请参见目录服务控制中心界面和 DSCC 联机帮助。此过程的其他部分只能使用命令行完成。


注 –

在修改作为组中 uniquemember 的条目的 DN 时,您必须启用引用完整性插件。引用完整性可确保在移动条目时对组成员进行调整。有关如何启用和配置引用完整性插件的信息,请参见配置引用完整性插件


  1. 如果要将条目从一个父条目移动到另一个父条目中,请在这些父条目上扩展 ACI 权限。

    • 在要移动的条目的当前父条目上,确保 ACI 允许通过使用语法 allow (export ...) 执行导出操作

    • 在要移动的条目的将来父条目上,确保 ACI 允许通过使用语法 allow (import ...) 执行导入操作

    有关使用 ACI 的信息,请参见第 6 章,目录服务器访问控制

  2. 确保全局启用修改 DN 操作,或至少为将受移动操作影响的后缀启用该操作。

    为了确保与以前的目录服务器发行版兼容,默认情况下不启用修改 DN 操作。

    如果以前启用了修改 DN 操作,请转至下一步。

    要为服务器全局启用修改 DN 操作,请使用以下命令:


    $ dsconf set-server-prop -h host -p port moddn-enabled:on
  3. 运行 ldapmodify 命令。

    此步骤将使用修改 DN 操作。执行以下任一操作:

    • 移动条目。

      例如,以下命令可将条目uid=bjensen 从承包商的子树 ou=Contractors,dc=example,dc=com 移动到员工的子树 ou=People,dc=example,dc=com 中:


      $ ldapmodify -h host1 -p 1389 -D cn=admin,cn=Administrators,cn=config -w -
      Enter bind password:
      dn: uid=bjensen,ou=Contractors,dc=example,dc=com
      changetype: modrdn
      newrdn: uid=bjensen
      deleteoldrdn: 0
      newsuperior: ou=People,dc=example,dc=com
    • 重命名条目。

      例如,以下命令可将条目 uid=bbjensen 重命名为 uid=bjensen


      $ ldapmodify -h host1 -p 1389 -D cn=admin,cn=Administrators,cn=config -w -
      Enter bind password:
      dn: uid=bbjensen,ou=People,dc=example,dc=com
      changetype: modrdn
      newrdn: uid=bjensen
      deleteoldrdn: 1

    编写 LDIF 语句时请注意以下属性:

    • dn - 指定要重命名或移动的条目。

    • changetype: modrdn - 指定要使用的修改 DN 操作。

    • newrdn - 提供新的命名属性。

    • deleteoldrdn - 表示是否应该从条目中删除以前的命名属性(1 表示是,而 0 表示否)。

      请注意,如果命名属性是条目定义中必需的属性,则无法从条目中删除此属性。

    • newsuperior - 指定条目的新上级属性。

    有关 ldapmodify 命令及其选项的信息,请参见 ldapmodify(1) 手册页。

  4. 如果在移动或重命名包含大量条目的子树时遇到资源限制错误,请增加数据库可以使用的锁定数。


    $ dsconf set-server-prop -h host -p port db-lock-count:value
    

    如果修改此属性,则必须重新启动服务器以使更改生效。

使用修改 DN 操作的准则和限制

使用修改 DN 操作时(如上一部分所述),请遵循以下部分介绍的准则。

使用修改 DN 操作的一般准则

协同使用修改 DN 操作和复制时的准则


注意 – 注意 –

使用修改 DN 操作时如果不符合以下要求,可能会中断复制并破坏目录服务。