第 5 章 管理目录属性和值


了解如何使用 openldap-clients 软件包中的工具管理目录服务器条目。强制属性唯一性、分配服务类(CoS)以简化条目管理、减少存储要求并避免复制冲突。

5.1. 使用命令行管理目录条目

您可以使用命令行添加、编辑、重命名和删除 LDAP 条目。

当您添加、更新或删除目录中的条目或属性时,您可以使用工具的交互模式进入 LDAP 数据交换格式(LDIF)语句,或将 LDIF 文件传递给它们。

5.1.1.1. OpenLDAP 客户端工具的交互模式

在交互模式中,ldapaddldapmodifyldapdelete 工具从命令行读取输入。要退出交互模式,请按 Ctrl+D (^D)组合键来发送文件结束(EOF)转义序列。

在交互模式中,当您按 Enter 两次或发送 EOF 序列时,实用程序会将语句发送到 LDAP 服务器。

使用互动模式:

  • 在不创建文件的情况下输入 LDAP 数据交换格式(LDIF)语句。

    例 5.1. 使用 ldapmodify 交互模式输入 LDIF 语句

    以下示例以交互模式运行 ldapmodify,删除 telephoneNumber 属性,并将带有 cn= manager _name,ou=people,dc=example,dc=com 值的 manager 属性添加到 uid=user,ou=people,dc=example,dc=com 条目。在最后的声明后按 Ctrl+D 退出交互模式。

    # ldapmodify -D "cn=Directory Manager" -W -H ldap://server.example.com -x
    
    dn: uid=user,ou=people,dc=example,dc=com
    changetype: modify
    delete: telephoneNumber
    -
    add: manager
    manager: cn=manager_name,ou=people,dc=example,dc=com
    
    modifying entry "uid=user,ou=people,dc=example,dc=com"
    
    ^D
    Copy to Clipboard Toggle word wrap
  • 要将 LDIF 语句(由另一个命令输出)重定向到服务器:

    例 5.2. 使用带有重定向内容的 ldapmodify 互动模式

    以下示例将 command_that_outputs_LDIF 命令的输出重定向到 ldapmodify。重定向命令退出后,交互模式会自动退出。

    # command_that_outputs_LDIF | ldapmodify -D "cn=Directory Manager" -W -H ldap://server.example.com -x
    Copy to Clipboard Toggle word wrap

5.1.1.2. OpenLDAP 客户端工具的文件模式

在交互模式中,ldapadd,ldapmodify, 和 ldapdelete 工具从文件中读取 LDAP 数据交换格式(LDIF)语句。使用此模式向服务器发送大量 LDIF 语句。

例 5.3. 将带有 LDIF 声明的文件传递给 ldapmodify

  1. 使用 LDIF 语句创建文件。例如,使用以下语句创建 ~/example.ldif 文件:

    dn: uid=user,ou=people,dc=example,dc=com
    changetype: modify
    delete: telephoneNumber
    -
    add: manager
    manager: cn=manager_name,ou=people,dc=example,dc=com
    Copy to Clipboard Toggle word wrap

    本例删除 telephoneNumber 属性,并将带有 cn= manager _name,ou=people,dc=example,dc=com 值的 manager 属性添加到 uid=user,ou=people,dc=example,dc=com 条目。

  2. 使用 the -f 参数将文件传递给 ldapmodify 命令:

    # ldapmodify -D "cn=Directory Manager" -W -H ldap://server.example.com -x -f ~/example.ldif
    Copy to Clipboard Toggle word wrap

5.1.1.3. OpenLDAP 客户端工具的持续操作模式

默认情况下,如果您向服务器发送多个 LDAP 数据交换格式(LDIF)语句,且一个操作失败,该过程会停止。但是,在发生错误前处理的条目被成功添加、修改或删除。

要忽略错误并继续批处理中的其他 LDIF 语句,请将 -c 参数传递给 ldapaddldapmodify

# ldpamodify -c -D "cn=Directory Manager" -W -H ldap://server.example.com -x
Copy to Clipboard Toggle word wrap

5.1.2. 使用命令行添加 LDAP 条目

要在目录中添加新条目,请使用 ldapaddldapmodify 工具。请注意,/bin/ldapadd 是到 /bin/ldapmodify 的符号链接。因此,ldapadd 执行与 ldapmodify -a 相同的操作。

注意

只有父条目已存在时,才能添加新目录条目。例如,如果 ou=people,dc=example,dc=com 不存在,则无法添加 cn=user,ou=people,dc=example,dc=com 父条目。

5.1.2.1. 使用 ldapadd 添加条目

要使用 ldapadd 工具添加,例如 cn=user,ou=people,dc=example,dc=com 用户条目,请输入:

# ldapadd -D "cn=Directory Manager" -W -H ldap://server.example.com -x

dn: uid=user,ou=People,dc=example,dc=com
uid: user
givenName: given_name
objectClass: top
objectClass: person
objectClass: organizationalPerson
objectClass: inetorgperson
sn: surname
cn: user
Copy to Clipboard Toggle word wrap
注意

运行 ldapadd 会自动执行 changetype: add 操作。因此,您不需要在 LDIF 语句中指定 changetype: add

5.1.2.2. 使用 ldapmodify 添加条目

要使用 ldapmodify 工具来添加,例如 cn=user,ou=people,dc=example,dc=com 用户条目,请输入:

# ldapmodify -a -D "cn=Directory Manager" -W -H ldap://server.example.com -x

dn: uid=user,ou=People,dc=example,dc=com
uid: user
givenName: given_name
objectClass: top
objectClass: person
objectClass: organizationalPerson
objectClass: inetorgperson
sn: surname
cn: user
Copy to Clipboard Toggle word wrap
注意

-a 参数传递给 ldapmodify 命令时,工具会自动执行 changetype: add 操作。因此,您不需要在 LDIF 语句中指定 changetype: add

5.1.2.3. 创建数据库后缀的根条目

要创建数据库后缀的根条目,如 dc=example,dc=com,绑定为 cn=Directory Manager 用户并添加该条目。可分辨名称(DN)对应于数据库的 root 或 sub-suffix 的 DN。

例如,要添加 dc=example,dc=com 后缀,请输入:

# ldapmodify -D "cn=Directory Manager" -W -H ldap://server.example.com -x

dn: dc=example,dc=com
changetype: add
objectClass: top
objectClass: domain
dc: example
Copy to Clipboard Toggle word wrap
注意

只有在每个后缀有一个数据库时,才能添加 root 对象。如果您创建存储在多个数据库的后缀,则必须使用 dsctl ldif2db 命令设置保存新条目的数据库。

5.1.3. 使用命令行更新 LDAP 条目

当您修改目录条目时,请使用 changetype: modify 语句。根据更改操作,您可以添加、更改或删除条目中的属性。

5.1.3.1. 在 LDAP 条目中添加属性

若要向 LDAP 条目添加属性,可使用 add 操作。

例如,要将带有 555-1234567 值的 telephoneNumber 属性添加到 uid=user,ou=People,dc=example,dc=com 条目中,请输入:

# ldapmodify -D "cn=Directory Manager" -W -H ldap://server.example.com -x

dn: uid=user,ou=People,dc=example,dc=com
changetype: modify
add: telephoneNumber
telephoneNumber: 555-1234567
Copy to Clipboard Toggle word wrap

如果属性是多值,您可以多次指定属性名称,以便在单个操作中添加所有值。例如,要将两个 telephoneNumber 属性添加到 uid=user,ou=People,dc=example,dc=com 中,请输入:

# ldapmodify -D "cn=Directory Manager" -W -H ldap://server.example.com -x

dn: uid=user,ou=People,dc=example,dc=com
changetype: modify
add: telephoneNumber
telephoneNumber: 555-1234567
telephoneNumber: 555-7654321
Copy to Clipboard Toggle word wrap

5.1.3.2. 更新属性值

更新属性的值的步骤取决于属性是单值还是多值:

  • 更新单值属性:

    在更新单值属性时,请使用 replace 操作来覆盖现有的值。以下命令更新 uid=user,ou=People,dc=example,dc=com 条目的 manager 属性:

    # ldapmodify -D "cn=Directory Manager" -W -H ldap://server.example.com -x
    
    dn: uid=user,ou=People,dc=example,dc=com
    changetype: modify
    replace: manager
    manager: uid=manager_name,ou=People,dc=example,dc=com
    Copy to Clipboard Toggle word wrap
  • 更新多值属性的特定值:

    要更新多值属性的特定值,请首先删除您要替换的条目,然后添加新值。以下命令只更新 uid=user,ou=People,dc=example,dc=com 条目中被设置为 555-1234567telephoneNumber 属性:

    # ldapmodify -D "cn=Directory Manager" -W -H ldap://server.example.com -x
    
    dn: uid=user,ou=People,dc=example,dc=com
    changetype: modify
    delete: telephoneNumber
    telephoneNumber: 555-1234567
    -
    add: telephoneNumber
    telephoneNumber: 555-9876543
    Copy to Clipboard Toggle word wrap

5.1.3.3. 从条目中删除属性

要从条目中删除属性,请使用 delete 操作:

  • 删除属性:

    例如,要从 uid=user,ou=People,dc=example,dc=com 条目中删除 manager 属性,请输入:

    # ldapmodify -D "cn=Directory Manager" -W -H ldap://server.example.com -x
    
    dn: uid=user,ou=People,dc=example,dc=com
    changetype: modify
    delete: manager
    Copy to Clipboard Toggle word wrap
    重要

    如果属性包含多个值,则此操作将删除所有值。

  • 删除多值属性的特定值:

    如果要从多值属性中删除特定值,请在 LDAP Data Interchange Format (LDIF)语句中列出属性及其值。例如,要只删除将 uid=user,ou=People,dc=example,dc=com 条目设置为 555-1234567telephoneNumber 属性,请输入:

    # ldapmodify -D "cn=Directory Manager" -W -H ldap://server.example.com -x
    
    dn: uid=user,ou=People,dc=example,dc=com
    changetype: modify
    delete: telephoneNumber
    telephoneNumber: 555-1234567
    Copy to Clipboard Toggle word wrap

5.1.4. 重命名和移动 LDAP 条目

存在以下重命名操作:

重命名条目

如果您重命名条目,modrdn 操作会更改条目的相对可分辨名称(RDN):

重命名子条目

对于子树条目,modrdn 操作会重命名子树,以及子条目的 DN 组件:

请注意,对于大型子树,这个过程可能需要大量时间和资源。

将条目移动到新父对象

重命名子树的类似操作是将条目从一个子树移到另一个子树。这是 modrdn 操作的扩展类型,它同时重命名条目并设置 newSuperior 属性,它将条目从一个父项移到另一个父项:

5.1.4.1. 重命名 LDAP 条目的注意事项

执行重命名操作时请注意以下几点:

  • 您无法重命名根后缀。
  • 子树重命名操作对复制具有最小的效果。复制协议应用于整个数据库,而不是应用到数据库中的子树。因此,子树重命名操作不需要重新配置复制协议。子树重命名操作之后的所有名称都会正常进行复制。
  • 重命名子树可能需要重新配置任何同步协议。同步协议在后缀或子树级别设置。因此,重命名子树可能会破坏同步。
  • 重命名子树要求手动重新配置为子树设置的任何子树级访问控制指令(ACI),以及为子树的子条目设置的任何条目级 ACI。
  • 尝试更改子树的组件(如从 ou 移到 dc )可能会失败,并显示 schema 冲突。例如,organizationalUnit 对象类需要 ou 属性。如果将该属性作为重命名子树的一部分删除,则操作会失败。
  • 如果您移动组,MemberOf 插件会自动更新 memberOf 属性。但是,如果您移动包含组的子树,您必须在 cn=memberof 任务条目中手动创建任务,或使用 dsconf memberof fixup 命令更新相关的 memberOf 属性。

当您重命名条目时,deleteOldRDN 属性控制是否删除旧相对可分辨名称(RDN)还是保留:

deleteOldRDN: 0

现有 RDN 保留为新条目中的值。生成的条目包含两个 cn 属性:一个带有旧属性,另一个带有新的通用名称(CN)。

例如,以下属性属于从 cn=old_group,dc=example,dc=com 重命名为 cn=new_group,dc=example,dc=comdeleteOldRDN 属性设置为 0 的组:

dn: cn=new_group,ou=Groups,dc=example,dc=com
objectClass: top
objectClass: groupOfUniqueNames
cn: old_group
cn: new_group
Copy to Clipboard Toggle word wrap
deleteOldRDN: 1

目录服务器删除旧条目并使用新的 RDN 创建新条目。新条目仅包含新条目的 cn 属性。

例如,以下组被重命名为 cn=new_group,dc=example,dc=comdeleteOldRDN 属性设置为 1:

dn: cn=new_group,ou=Groups,dc=example,dc=com
objectClass: top
objectClass: groupofuniquenames
cn: new_group
Copy to Clipboard Toggle word wrap

5.1.4.3. 重命名 LDAP 条目或子树

要重命名条目或子树,请使用 changetype: modrdn 操作,并在 newrdn 属性中设置新的相对可分辨名称(RDN)。

例如,要将 cn=demo1,dc=example,dc=com 条目重命名为 cn=demo2,dc=example,dc=com,请输入:

# ldapmodify -D "cn=Directory Manager" -W -H ldap://server.example.com -x

dn: cn=demo1,dc=example,dc=com
changetype: modrdn
newrdn: cn=demo2
deleteOldRDN: 1
Copy to Clipboard Toggle word wrap

5.1.4.4. 将 LDAP 条目移动到新父条目

要将条目移到新的父项,请使用 changetype: modrdn 操作,并将以下内容设置为属性:

  • newrdn :设置移动条目的相对可分辨名称(RDN)。您必须设置此条目,即使 RDN 保持不变。
  • newsuperior :设置新 父条目的可分辨名称(DN)。

例如,要将 cn=demo 条目从 ou=Germany,dc=example,dc=com 移到 ou=France,dc=example,dc=com,请输入:

# ldapmodify -D "cn=Directory Manager" -W -H ldap://server.example.com -x

dn: cn=demo,ou=Germany,dc=example,dc=com
changetype: modrdn
newrdn: cn=demo
newSuperior: ou=France,dc=example,dc=com
deleteOldRDN: 1
Copy to Clipboard Toggle word wrap

5.1.5. 使用命令行删除 LDAP 条目

您可以从 LDAP 目录中删除条目,但只能删除没有子条目的条目。例如,如果 uid=user, ou=People,dc=example,dc=com 条目仍然存在,则无法删除 ou=People,dc=example,dc=com 条目。

5.1.5.1. 使用 ldapdelete 删除条目

ldapdelete 工具可让您删除一个或多个条目。例如,要删除 uid=user,ou=People,dc=example,dc=com 条目,请输入:

# ldapdelete -D "cn=Directory Manager" -W -H ldap://server.example.com -x "uid=user,ou=People,dc=example,dc=com"
Copy to Clipboard Toggle word wrap

要删除一个操作中的多个条目,请将它们附加到命令中:

# ldapdelete -D "cn=Directory Manager" -W -H ldap://server.example.com -x "uid=user1,ou=People,dc=example,dc=com" "uid=user2,ou=People,dc=example,dc=com"
Copy to Clipboard Toggle word wrap

5.1.5.2. 使用 ldapmodify 删除条目

要使用 ldapmodify 工具删除条目,请使用 changetype: delete 操作。例如,要删除 uid=user,ou=People,dc=example,dc=com 条目,请输入:

# ldapmodify -D "cn=Directory Manager" -W -H ldap://server.example.com -x

dn: uid=user,ou=People,dc=example,dc=com
changetype: delete
Copy to Clipboard Toggle word wrap

5.1.6. 在 OpenLDAP 客户端工具中使用特殊字符

使用命令行时,用引号括起有特殊含义的字符,这些字符对命令行解释程序(如空格()、星号 Tag 或反斜杠(\))具有特殊含义,带有引号。根据命令行解释器,使用单引号或双引号。例如,要以 cn=Directory Manager 用户身份进行身份验证,请将用户的可分辨名称(DN)包含在引号中:

# ldapmodify -a -D "cn=Directory Manager" -W -H ldap://server.example.com -x
Copy to Clipboard Toggle word wrap

另外,如果 DN 在组件中包含逗号,则使用反斜杠进行转义。例如,要以 uid=user,ou=People,dc=example.com Chicago 进行验证,请输入:

# ldapmodify -a -D "cn=uid=user,ou=People,dc=example.com Chicago\, IL" -W -H ldap://server.example.com -x
Copy to Clipboard Toggle word wrap

5.1.7. 在 LDIF 语句中使用二进制属性

某些属性支持二进制值,如 jpegPhoto 属性。当您添加或更新此类属性时,工具会从文件中读取属性的值。要添加或更新此类属性,您可以使用 ldapmodify 工具。

例如,要将 jpegPhoto 属性添加到 uid=user,ou=People,dc=example,dc=com 条目,并从 /home/user_name/photo.jpg 文件中读取属性的值,请输入:

# ldapmodify -D "cn=Directory Manager" -W -H ldap://server.example.com -x

dn: uid=user,ou=People,dc=example,dc=com
changetype: modify
add: jpegPhoto
jpegPhoto:< file:///home/user_name/photo.jpg
Copy to Clipboard Toggle word wrap
重要

请注意,:和 &lt ; 之间 没有空格

5.1.8. 更新国际化中的 LDAP 条目

要将属性值与英语以外的语言一起使用,请将属性的值与语言标签相关联。

当使用 ldapmodify 更新设置了语言标签的属性时,您必须完全匹配值和语言标签,否则操作将失败。

例如,要修改设置了 lang-fr 语言标签的属性值,请在 modify 操作中包含该标签:

# ldapmodify -D "cn=Directory Manager" -W -H ldap://server.example.com -x

dn: uid=user,ou=People,dc=example,dc=com
changetype: modify
replace: homePostalAddress;lang-fr
homePostalAddress;lang-fr: 34 rue de Seine
Copy to Clipboard Toggle word wrap
返回顶部
Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。 了解我们当前的更新.

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

Theme

© 2025 Red Hat