1. 创建LDIF文件

对以上内容有一定了解之后,就可以编写输入LDIF文件,编辑需要向目录数据库添加的条目了。
下面根据如下图所示的结构,创建LDIF文件dlw.com.ldif
image.png
对上图进行分析,该目录结构分为3层,有4个结点。根据上图可创建LDIF文件如下:
温馨提示:每个结点可用一个dn表示,对于每个结点,又可继续添加新的结点。如在根结点中可添加其他部门ou,在ou=managers结点也可继续添加其他管理人员的信息。

  1. dn:dc=dlw,dc=com
  2. objectclass:top
  3. objectclass:dcobject
  4. objectclass:organization
  5. dc:dlw
  6. o:dlw,Inc.
  7. dn:ou=managers, dc=dlw, dc=com
  8. ou:managers
  9. objectclass:organizationalUnit
  10. dn:cn=dlw,ou=managers,dc=dlw,dc=com
  11. cn:dlw
  12. sn:wangshibo
  13. objectclass:person
  14. dn:cn=test,ou=managers,dc=dlw,dc=com
  15. cn:test
  16. sn:Test User
  17. objectclass:person

以上文件中各行的含义如下:
第1~6行创建根结点,这部分在前面也有介绍,就不再重复了。
第7、11、16行为空行,用来分隔4个dn条目(4个结点)。
第8~10行定义cn=managers结点的条目,该条目的objectClass为organizationalUnit,因此需要用ou属性定义组织名称。
第12~15行定义cn=dlw结点的条目,该条目使用的objectClass为person,因此需设置cn和sn两个属性值。
第17~20行与第12~15行的意义相同。
在以上LDIF文件中,第1、8、12、17行以dn开头,这部分内容必须唯一,并且在向目录数据库添加这些数据时,也要确保这些数据不能与目录数据库中已有数据相同,否则,添加操作将中断。

2. ldap命令的使用

  1. 1)增加增:ldapadd
  2. 选项:
  3. -x 进行简单认证
  4. -D 用来绑定服务器的DN
  5. -h 目录服务的地址
  6. -w 绑定DN的密码
  7. -f 使用ldif文件进行条目添加的文件
  8. 例子:
  9. test.ldif 中的数据导入 ldap
  10. [root@openldap ~]# ldapadd -x -D "cn=root,dc=kevin,dc=com" -w secret -f /root/test.ldif
  11. 2)删除:ldapdelete
  12. 例子
  13. [root@openldap ~]# ldapdelete -x -D "cn=Manager,dc=test,dc=com" -w secret "uid=test1,ou=People,dc=test,dc=com"
  14. [root@openldap ~]# ldapdelete -x -D 'cn=root,dc=it,dc=com' -w secert 'uid=zyx,dc=it,dc=com'
  15. 3)修改:ldapmodify
  16. 选项
  17. -a 添加新的条目.缺省的是修改存在的条目.
  18. -C 自动追踪引用.
  19. -c 出错后继续执行程序并不中止.缺省情况下出错的立即停止.
  20. -D binddn 指定搜索的用户名(一般为一dn 值).
  21. -e 设置客户端证书文件,例: -e cert/client.crt
  22. -E 设置客户端证书私钥文件,例: -E cert/client.key
  23. -f file 从文件内读取条目的修改信息而不是从标准输入读取.
  24. -H ldapuri 指定连接到服务器uri。常见格式为ldap://hostname:port
  25. -h ldaphost 指定要连接的主机的名称/ip 地址.它和-p 一起使用.
  26. -p ldapport 指定要连接目录服务器的端口号.它和-h 一起使用.
  27. -M[M] 打开manage DSA IT 控制. -MM 把该控制设置为重要的.
  28. -n 用于调试到服务器的通讯.但并不实际执行搜索.服务器关闭时,返回错误;服务器打开时,常和-v 参数一起测试到服务器是否是一条通路.
  29. -v 运行在详细模块.在标准输出中打出一些比较详细的信息.比如:连接到服务器的ip 地址和端口号等.
  30. -V 启用证书认证功能,目录服务器使用客户端证书进行身份验证,必须与-ZZ 强制启用TLS 方式配合使用,并且匿名绑定到目录服务器.
  31. -W 指定了该参数,系统将弹出一提示入用户的密码.它和-w 参数相对使用.
  32. -w bindpasswd 直接指定用户的密码. 它和-W 参数相对使用.
  33. -x 使用简单认证.
  34. -Z[Z] 使用StartTLS 扩展操作.如果使用-ZZ,命令强制使用StartTLS 握手成功.
  35. 例子
  36. [root@openldap ~]# ldapmodify -x -D "cn=root,dc=it,dc=com" -W -f modify.ldif
  37. 4)查询:ldapsearch
  38. 选项
  39. -x 进行简单认证
  40. -D 用来绑定服务器的DN
  41. -w 绑定DN的密码
  42. -b 指定要查询的根节点
  43. -H 制定要查询的服务器
  44. 例子
  45. [root@openldap ~]# ldapsearch -x -D "cn=root,dc=kevin,dc=com" -w secret -b "dc=kevin,dc=com"
  46. 使用简单认证,用 "cn=root,dc=kevin,dc=com" 进行绑定,要查询的根是 "dc=kevin,dc=com"。这样会把绑定的用户能访问"dc=kevin,dc=com"下的所有数据显示出来。
  47. [root@openldap ~]# ldapsearch -x -W -D "cn=administrator,cn=users,dc=osdn,dc=cn" -b "cn=administrator,cn=users,dc=osdn,dc=cn" -h troy.osdn.zzti.edu.cn
  48. [root@openldap ~]# ldapsearch -b "dc=canon-is,dc=jp" -H ldaps://192.168.10.192:389
  49. 5)设置使用者密码:ldappasswd
  50. 选项
  51. -x 进行简单认证
  52. -D 用来绑定服务器的DN
  53. -w 绑定DN的密码
  54. -S 提示的输入密码
  55. -s pass 把密码设置为pass
  56. -a pass 设置old passwdpass
  57. -A 提示的设置old passwd
  58. -H 是指要绑定的服务器
  59. -I 使用sasl会话方式
  60. 例子
  61. [root@openldap ~]# ldappasswd -x -D 'cm=root,dc=it,dc=com' -w secret 'uid=zyx,dc=it,dc=com' -S

3.将LDIF文件添加到目录数据库

使用OpenLDAP客户端工具ldapadd命令,可将LDIF文件中的条目添加到目录数据库中,该命令的格式如下:
# ldappadd 选项 LDIF文件

在ldappadd命令中常用的选项如下:
-x:进行简单认证。
-D:用来绑定服务器的dn。
-h:目录服务的地址。
-w:绑定dn的密码。
-f:使用LDIF文件进行条目添加的文件。
将前面编写的LDIF文件的条目数据添加到目录数据库中。
具体操作步骤如下:
1)检查dlw.com.ldif文件中的内容,需要注意的是,每个冒号后面都需要空一格,而每行结束处不能留有空格字符。
2)使用以下命令将dlw.com.ldif文件中的条目添加到目录中:
# ldapadd -x -D “cn=root,dc=dlw,dc=com” -w secret -f dlw.com.ldif
温馨提示:如果以上命令执行不成功,需要逐个字符检查dlw.com.ldif文件中的内容,特别注意空格的问题。

4.查询

添加到目录中的条目被保存在目录数据库,在Linux命令界面下,可使用OpenLDAP客户端工具ldapsearch命令来进行查询。该命令的格式如下:
# ldapsearch 选项 过滤 属性值
常用的选项有以下几个:
-x:进行简单认证。
-D:用来绑定服务器的dn。
-w:绑定dn的密码。
-b:指定要查询的根节点。
-H:制定要查询的服务器。
使用ldapsearch命令查询“dc=dlw, dc=com”下的所有条目,可使用以下命令:
# ldapsearch -x -b “dc=dlw,dc=com”
而如果使用以下命令,将查询显示sn中以字符wu开头的条目,将得到如下图所示的查询结果,只找到一个条目。
# ldapsearch -x -b ‘dc=dlw,dc=com’ ‘sn=wu*’

5.修改条目

使用OpenLDAP客户端工具ldapmodify命令可对目录数据库中的条目进行修改。该命令的格式如下:
# ldapmodify 选项

该命令的选项也很多,常用选项与ldapadd类似,这里就不再列出了。
温馨提示:使用ldapmodify命令不能修改条目的dn,但可以修改其他属性值。
使用ldapmodify命令修改条目信息可以有两种方式:一种是交互式进行修改,另一种是通过文件进行修改。
1) 交互式修改
修改前面创建的条目”cn=test, ou=managers, dc=dlw, dc=com”,将其sn属性修改为”Test User Modify”,并添加一个description属性,设置其值为”add Attribute”。
首先输入以下命令,进行修改状态:
# ldapmodify -x -D “cn=root,dc=dlw,dc=com” -W secret
执行以上命令后,终端将等候用户输入需要修改条目的dn,输入以下内容:
dn: cn=test, ou=managers, dc=dlw, dc=com
changetype: modify
replace: sn
sn: Test User Modify

以上输入内容中,第1行查找需要修改的条目,第2行设置修改模式,第3行设置需要替换的属性sn,第4行给属性sn重新设置一个值,替换该属性原有的值。
输入完以上内容之后再按Enter键,程序将按以上设置更新数据,然后按Ctrl+C键退出修改命令。
使用以上命令修改条目的数据之后,可使用以下命令查看是否修改成功:
# ldapsearch -x -b ‘dc=dlw,dc=com’ ‘cn=test’

2) 通过文件修改
通过前面的方式对条目进行修改时,很不方便,如果在交互方式时输错了某个字符,只能中断命令后重新进行修改。因此,更好的修改方法是首先将修改时输入的文字保存到一个文件中,然后以该文件作为输入进行修改。用这种方式进行操作,首先需要创建一个临时文件,用来保存需要进行的修改操作,下面演示这种方式的修改过程。
【例子】通过修改命令将前面LDAP数据库中的信息还原,即将sn属性由“Test User Modify”修改为“Test User”
具体操作步骤如下:
[1] 使用vi编辑器创建一个文件modify,在其中输入以下内容:
dn: cn=test,ou=managers,dc=dlw,dc=com
changetype: modify
replace: sn
sn: Test User
从以上输入内容可看到,与在交互式时输入的内容完全相同。
技巧:使用文件方式修改条目,可方便修改和检查,若某个地方有输入错误,可修改后再调用ldapmodify进行修改,减少输入量。
[2] 使用以下命令调用modify的内容进行修改:
# ldapmodify -x -D “cn=root,dc=dlw,dc=com” -w secret -f modify

6.删除条目

对于目录数据库中不用的条目,也可使用ldapdelete命令将其删除。该命令的格式如下:
# ldapdelete 选项 删除条目
该命令使用的选项与ldapadd类似,就不再列出来了。
删除目录数据库中的“cn=test,ou=managers,dc=dlw,dc=com”条目,具体命令如下:
# ldapdelete -x -D “cn=root,dc=dlw,dc=com” -w secret “cn=test,ou=managers,dc=dlw,dc=com”
顺利执行以上命令后,终端上将不会有任何信息输出,表示完成了删除操作。
使用ldapdelete命令只能删除树形结构中的叶结点条目,如果删除非叶结点条目,将出现错误提示。例如,执行以下命令删除根结点“dc=dlw,dc=com”,由于根结点下面还有结点,将显示如下图所示的错误提示信息:
创建LDIF文件 - 图2
应该使用命令:
# ldapdelete -x -D “cn=root,dc=dlw,dc=com” -w secret “dc=dlw,dc=com”

7.数据导出

通过ldapadd命令可向目录数据库中添加数据,在某些情况下,可能还需要进行反向操作,即将目录数据库中的数据导出。
使用ldapsearch命令对目录数据库进行搜索,然后通过重定向将搜索结果保存到一个文件中,可达到导出数据的目的。另外,导出数据更常用的是slapcat命令,该命令的格式如下:
# slapcat 选项
最常用的选项就是-l,表示导出为LDIF文件格式
如将前面例子中创建的目录数据库导出为export.ldif文件,可使用以下命令:
# slapcat -l export.ldif
温馨提示:从导出结果可看出,除了使用ldapadd命令添加到目录数据库中的条目数据外,还导出了很多其他信息,包括条目录UUID、时间戳等信息。
**