第 5 章 管理目录属性和值
了解如何使用 openldap-clients 软件包中的工具管理目录服务器条目。强制属性唯一性、分配服务类(CoS)以简化条目管理、减少存储要求并避免复制冲突。
5.1. 使用命令行管理目录条目 复制链接链接已复制到粘贴板!
您可以使用命令行添加、编辑、重命名和删除 LDAP 条目。
5.1.1. 为 ldapadd、ldapmodify 和 ldapdelete 工具提供输入 复制链接链接已复制到粘贴板!
当您添加、更新或删除目录中的条目或属性时,您可以使用工具的交互模式进入 LDAP 数据交换格式(LDIF)语句,或将 LDIF 文件传递给它们。
5.1.1.1. OpenLDAP 客户端工具的交互模式 复制链接链接已复制到粘贴板!
在交互模式中,ldapadd、ldapmodify 和 ldapdelete 工具从命令行读取输入。要退出交互模式,请按 Ctrl+D (^D)组合键来发送文件结束(EOF)转义序列。
在交互模式中,当您按 Enter 两次或发送 EOF 序列时,实用程序会将语句发送到 LDAP 服务器。
使用互动模式:
在不创建文件的情况下输入 LDAP 数据交换格式(LDIF)语句。
例 5.1. 使用 ldapmodify 交互模式输入 LDIF 语句
以下示例以交互模式运行
ldapmodify,删除telephoneNumber属性,并将带有cn=值的 manager 属性添加到manager_name,ou=people,dc=example,dc=comuid=user,ou=people,dc=example,dc=com条目。在最后的声明后按 退出交互模式。Copy to Clipboard Copied! Toggle word wrap Toggle overflow 要将 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
# command_that_outputs_LDIF | ldapmodify -D "cn=Directory Manager" -W -H ldap://server.example.com -xCopy to Clipboard Copied! Toggle word wrap Toggle overflow
5.1.1.2. OpenLDAP 客户端工具的文件模式 复制链接链接已复制到粘贴板!
在交互模式中,ldapadd,ldapmodify, 和 ldapdelete 工具从文件中读取 LDAP 数据交换格式(LDIF)语句。使用此模式向服务器发送大量 LDIF 语句。
例 5.3. 将带有 LDIF 声明的文件传递给 ldapmodify
使用 LDIF 语句创建文件。例如,使用以下语句创建
~/example.ldif文件:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 本例删除
telephoneNumber属性,并将带有cn=值的 manager 属性添加到manager_name,ou=people,dc=example,dc=comuid=user,ou=people,dc=example,dc=com条目。使用 the
-f参数将文件传递给ldapmodify命令:ldapmodify -D "cn=Directory Manager" -W -H ldap://server.example.com -x -f ~/example.ldif
# ldapmodify -D "cn=Directory Manager" -W -H ldap://server.example.com -x -f ~/example.ldifCopy to Clipboard Copied! Toggle word wrap Toggle overflow
5.1.1.3. OpenLDAP 客户端工具的持续操作模式 复制链接链接已复制到粘贴板!
默认情况下,如果您向服务器发送多个 LDAP 数据交换格式(LDIF)语句,且一个操作失败,该过程会停止。但是,在发生错误前处理的条目被成功添加、修改或删除。
要忽略错误并继续批处理中的其他 LDIF 语句,请将 -c 参数传递给 ldapadd 和 ldapmodify :
ldpamodify -c -D "cn=Directory Manager" -W -H ldap://server.example.com -x
# ldpamodify -c -D "cn=Directory Manager" -W -H ldap://server.example.com -x
5.1.2. 使用命令行添加 LDAP 条目 复制链接链接已复制到粘贴板!
要在目录中添加新条目,请使用 ldapadd 或 ldapmodify 工具。请注意,/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 会自动执行 changetype: add 操作。因此,您不需要在 LDIF 语句中指定 changetype: add。
5.1.2.2. 使用 ldapmodify 添加条目 复制链接链接已复制到粘贴板!
要使用 ldapmodify 工具来添加,例如 cn=user,ou=people,dc=example,dc=com 用户条目,请输入:
将 -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 后缀,请输入:
只有在每个后缀有一个数据库时,才能添加 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 条目中,请输入:
如果属性是多值,您可以多次指定属性名称,以便在单个操作中添加所有值。例如,要将两个 telephoneNumber 属性添加到 uid=user,ou=People,dc=example,dc=com 中,请输入:
5.1.3.2. 更新属性值 复制链接链接已复制到粘贴板!
更新属性的值的步骤取决于属性是单值还是多值:
更新单值属性:
在更新单值属性时,请使用
replace操作来覆盖现有的值。以下命令更新uid=user,ou=People,dc=example,dc=com条目的manager属性:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 更新多值属性的特定值:
要更新多值属性的特定值,请首先删除您要替换的条目,然后添加新值。以下命令只更新
uid=user,ou=People,dc=example,dc=com条目中被设置为555-1234567的telephoneNumber属性:Copy to Clipboard Copied! Toggle word wrap Toggle overflow
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
# ldapmodify -D "cn=Directory Manager" -W -H ldap://server.example.com -x dn: uid=user,ou=People,dc=example,dc=com changetype: modify delete: managerCopy to Clipboard Copied! Toggle word wrap Toggle overflow 重要如果属性包含多个值,则此操作将删除所有值。
删除多值属性的特定值:
如果要从多值属性中删除特定值,请在 LDAP Data Interchange Format (LDIF)语句中列出属性及其值。例如,要只删除将
uid=user,ou=People,dc=example,dc=com条目设置为555-1234567的telephoneNumber属性,请输入:Copy to Clipboard Copied! Toggle word wrap Toggle overflow
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属性。
5.1.4.2. 在重命名条目时控制相对可分辨的名称行为 复制链接链接已复制到粘贴板!
当您重命名条目时,deleteOldRDN 属性控制是否删除旧相对可分辨名称(RDN)还是保留:
- deleteOldRDN: 0
现有 RDN 保留为新条目中的值。生成的条目包含两个
cn属性:一个带有旧属性,另一个带有新的通用名称(CN)。例如,以下属性属于从
cn=old_group,dc=example,dc=com重命名为cn=new_group,dc=example,dc=com且deleteOldRDN属性设置为0的组:dn: cn=new_group,ou=Groups,dc=example,dc=com objectClass: top objectClass: groupOfUniqueNames cn: old_group cn: new_group
dn: cn=new_group,ou=Groups,dc=example,dc=com objectClass: top objectClass: groupOfUniqueNames cn: old_group cn: new_groupCopy to Clipboard Copied! Toggle word wrap Toggle overflow - deleteOldRDN: 1
目录服务器删除旧条目并使用新的 RDN 创建新条目。新条目仅包含新条目的
cn属性。例如,以下组被重命名为
cn=new_group,dc=example,dc=com,deleteOldRDN属性设置为1:dn: cn=new_group,ou=Groups,dc=example,dc=com objectClass: top objectClass: groupofuniquenames cn: new_group
dn: cn=new_group,ou=Groups,dc=example,dc=com objectClass: top objectClass: groupofuniquenames cn: new_groupCopy to Clipboard Copied! Toggle word wrap Toggle overflow
5.1.4.3. 重命名 LDAP 条目或子树 复制链接链接已复制到粘贴板!
要重命名条目或子树,请使用 changetype: modrdn 操作,并在 newrdn 属性中设置新的相对可分辨名称(RDN)。
例如,要将 cn=demo1,dc=example,dc=com 条目重命名为 cn=demo2,dc=example,dc=com,请输入:
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,请输入:
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"
# ldapdelete -D "cn=Directory Manager" -W -H ldap://server.example.com -x "uid=user,ou=People,dc=example,dc=com"
要删除一个操作中的多个条目,请将它们附加到命令中:
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"
# 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"
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
# ldapmodify -D "cn=Directory Manager" -W -H ldap://server.example.com -x
dn: uid=user,ou=People,dc=example,dc=com
changetype: delete
5.1.6. 在 OpenLDAP 客户端工具中使用特殊字符 复制链接链接已复制到粘贴板!
使用命令行时,用引号括起有特殊含义的字符,这些字符对命令行解释程序(如空格()、星号 Tag 或反斜杠(\))具有特殊含义,带有引号。根据命令行解释器,使用单引号或双引号。例如,要以 cn=Directory Manager 用户身份进行身份验证,请将用户的可分辨名称(DN)包含在引号中:
ldapmodify -a -D "cn=Directory Manager" -W -H ldap://server.example.com -x
# ldapmodify -a -D "cn=Directory Manager" -W -H ldap://server.example.com -x
另外,如果 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
# ldapmodify -a -D "cn=uid=user,ou=People,dc=example.com Chicago\, IL" -W -H ldap://server.example.com -x
5.1.7. 在 LDIF 语句中使用二进制属性 复制链接链接已复制到粘贴板!
某些属性支持二进制值,如 jpegPhoto 属性。当您添加或更新此类属性时,工具会从文件中读取属性的值。要添加或更新此类属性,您可以使用 ldapmodify 工具。
例如,要将 jpegPhoto 属性添加到 uid=user,ou=People,dc=example,dc=com 条目,并从 /home/user_name/photo.jpg 文件中读取属性的值,请输入:
请注意,:和 < ; 之间 没有空格。
5.1.8. 更新国际化中的 LDAP 条目 复制链接链接已复制到粘贴板!
要将属性值与英语以外的语言一起使用,请将属性的值与语言标签相关联。
当使用 ldapmodify 更新设置了语言标签的属性时,您必须完全匹配值和语言标签,否则操作将失败。
例如,要修改设置了 lang-fr 语言标签的属性值,请在 modify 操作中包含该标签: