25.4. LDAP 目录中的数据处理

OpenLDAP 提供一系列工具,可用于在 LDAP 目录中管理数据。下文简要说明了四种最重要的工具,分别对储存的数据执行添加、删除、搜索和修改等操作。

25.4.1. 将数据插入 LDAP 目录

/etc/openldap/lsapd.conf 中正确配置 LDAP 服务器并且准备就绪后(即已配置好 suffixdirectoryrootdnrootpwindex 这些项之后),接下来可以输入记录。OpenLDAP 为此任务提供了 ldapadd 命令。如果可行,最好以捆绑方式向数据库添加对象,这是较为实用的做法。LDAP 能够为此处理 LDIF 格式(LDAP 数据交换格式)。LDIF 文件是一个简单的文本文件,可以包含任意数量的特性和值对。请参见 slapd.conf 中声明的方案文件,了解可用的对象类和特性。为 图 25.1 “LDAP 目录的结构” 中的示例创建大致框架的 LDIF 文件将如 例 25.7 “LDIF 文件示例” 所示:

例 25.7. LDIF 文件示例

# The SUSE Organization
dn: dc=suse,dc=de
objectClass: dcObject
objectClass: organization
o: SUSE AG dc: suse

# The organizational unit development (devel)
dn: ou=devel,dc=suse,dc=de
objectClass: organizationalUnit
ou: devel

# The organizational unit documentation (doc)
dn: ou=doc,dc=suse,dc=de
objectClass: organizationalUnit
ou: doc

# The organizational unit internal IT (it)
dn: ou=it,dc=suse,dc=de
objectClass: organizationalUnit
ou: it
[Important]LDIF 文件的编码

LDAP 采用 UTF-8 (Unicode) 编码。必须对元音变音符正确编码。请使用支持 UTF-8 的编辑器,如 Kate 或 Emacs 的最近版本。否则请避免使用元音变音符和其它特殊字符,或使用 recode 将输入内容重新编码为 UTF-8。

.ldif 为后缀保存该文件,然后使用以下命令将其传递给服务器:

ldapadd -x -D <dn of the administrator> -W -f <file>.ldif

-x 在本例中用于关闭通过 SASL 鉴定。-D 用于声明调用操作的用户。在此输入管理员的有效 DN,就如同已经在 slapd.conf 中配置。在当前示例中为 cn=admin,dc=suse,dc=de-W 用于避免在命令行中输入口令(以明文形式),改为激活单独的口令提示。此口令此前已在 slapd.conf 中通过 rootpw 确定。-f 用于传递文件名。请参见例 25.8 “example.ldif 中的 ldapadd”中关于运行 ldapadd 的详细信息。

例 25.8. example.ldif 中的 ldapadd

ldapadd -x -D cn=admin,dc=suse,dc=de -W -f example.ldif 

Enter LDAP password: 
adding new entry "dc=suse,dc=de" 
adding new entry "ou=devel,dc=suse,dc=de" 
adding new entry "ou=doc,dc=suse,dc=de" 
adding new entry "ou=it,dc=suse,dc=de"

个人的用户数据可以储存在单独的 LDIF 文件中。例 25.9 “Tux 的 LDIF 数据” 向新的 LDAP 目录添加了 Tux

例 25.9. Tux 的 LDIF 数据

# coworker Tux
dn: cn=Tux Linux,ou=devel,dc=suse,dc=de
objectClass: inetOrgPerson
cn: Tux Linux
givenName: Tux
sn: Linux
mail: tux@suse.de
uid: tux
telephoneNumber: +49 1234 567-8

LDIF 文件可以包含任意数目的对象。一次可以将整个目录分支都传递到服务器中,也可以仅传递部分目录,如单个对象的示例所示。如果需要对某些数据进行较为频繁的修改,建议对单个对象进行细分。

25.4.2. 修改 LDAP 目录中的数据

使用 ldapmodify 工具可以修改储存数据。最简单的方法是修改相应的 LDIF 文件,然后将这个修改过的文件传递给 LDAP 服务器。若要将同事 Tux 的电话号码从 +49 1234 567-8 改为 +49 1234 567-10,请像在 例 25.10 “修改过的 LDIF 文件 tux.ldif” 中那样编辑 LDIF 文件。

例 25.10. 修改过的 LDIF 文件 tux.ldif

# coworker Tux
dn: cn=Tux Linux,ou=devel,dc=suse,dc=de 
changetype: modify
replace: telephoneNumber 
telephoneNumber: +49 1234 567-10

使用以下命令将修改过的文件导入 LDAP 目录:

ldapmodify -x -D cn=admin,dc=suse,dc=de -W -f tux.ldif

或者,直接将要更改的特性传递给 ldapmodify。该过程如下所述:

  1. 启动 ldapmodify 并输入您的口令:

    ldapmodify -x -D cn=admin,dc=suse,dc=de -W 
    Enter LDAP password:
    
  2. 输入更改,同时要小心地采用如下所示的语法顺序:

    dn: cn=Tux Linux,ou=devel,dc=suse,dc=de
    changetype: modify
    replace: telephoneNumber
    telephoneNumber: +49 1234 567-10

有关 ldapmodify 及其语法的详细信息,请参见 ldapmodify(1) 手册页。

25.4.3. 搜索或读取 LDAP 目录中的数据

OpenLDAP 提供 ldapsearch 命令行工具,用于搜索 LDAP 目录中的数据并从中读取数据。简单查询将采用以下语法:

ldapsearch -x -b dc=suse,dc=de "(objectClass=*)"

选项 -b 用于确定搜索基础 — 要对目录树的哪个部分执行搜索。在当前情况下为 dc=suse,dc=de。要在 LDAP 目录的某个子部分中执行更为精确的搜索(例如仅在 devel 部门内搜索),请使用 -b 将此部分传递给 ldapsearch-x 用于请求激活简单鉴定。(objectClass=*) 用于声明应该读取目录包含的所有对象。可以在创建新目录树后使用此命令选项,用来校验是否正确记录所有项并且服务器是否能按预期响应。有关 ldapsearch 用法的详细信息,请参见相应的手册页 (ldapsearch(1))。

25.4.4. 删除 LDAP 目录中的数据

使用 ldapdelete 可以删除不需要的项。该命令的语法与上述命令的语法相似。例如,要彻底删除 Tux Linux 项,请发出以下命令:

ldapdelete -x -D cn=admin,dc=suse,dc=de -W cn=Tux \
Linux,ou=devel,dc=suse,dc=de