LDAP 通用命令行
ldapadd, ldapmodify, ldapdelete, ldapsearch是各个LDAP实现都支持的命令行工具,它们有比较一致的命令行参数和使用约定。通常这些命令是操作系统自带的,比如Solaris 9上这四个命令在/usr/bin目录下,但是操作系统自带的版本往往只有一些常用的功能,具体产品自带的版本则提供了增强功能,比如Solaris 9上的Sun ONE Directory Server 5.2所包含的ldapmodify, ldapdelete, ldapsearch通常放在/var/opt/mps/serverroot/shared/bin目录下。这些命令都需要-D -w -h -p参数,分别用来指定LDAP绑定的用户和密码,LDAP服务器名和端口。此外,它们都和LDIF文件格式相关,ldapadd和ldapmodify 命令以LDIF文件作为输入,而ldapsearch命令则可以输出LDIF文件。
LDIF文件和ldapmodify命令
LDIF 最早是用在密歇根大学的LDAP实现中,当时主要用来描述目录信息树的结构,后来扩充到也可以描述对目录树的修改操作。RFC2849对此进行标准化。当 LDIF文件和ldapmodify命令一起使用时,它的功能正是描述对目录节点修改的操作。LDIF文件是文本文件,可以由五种类型的行构成:指令行、 续行、空行、注释行、分隔行。空行就是不包含任何字符的行;注释行是以"#"井号开头的行;分隔行是只有"-"减号的行,它用来分隔对一个目录条目的多个 操作;续行是以一个空格开头的行;指令行是除了以"#"井号和空格开头的行。这五种类型的行组合在一起可以构成两种类型的段落:目录条目段落和操作段落。
ldapadd、ldapdelete和ldapmodify命令
ldapmodify 命令ldapadd和ldapdelete的超集,通过在ldif文件中加入相应的指令,ldapmodify可以完成ldapadd和 ldapmodify的功能。而通常操作系统自带的ldapadd其实就是ldapmodify硬连接,它相当于运行了ldapmodify -a。ldapmodify可以从文件、标准输入接受LDIF文件,并根据LDIF文件创建、修改目录。
用ldapmodify创建目录
基本语法是ldapmodify -a -h host -p port -D <bind dn> -w <password> -f <ldif file>
除了从ldif文件中获得数据外,ldapmodify还可以从标准输入和管道获得数据。
该ldif文件除了要遵循一般的ldif文件格式外,还要注意数据的次序,比如要确保父节点在子节点之前。用户密码只要写明文即可。
例子:
ldapmodify -a -h localhost -p 389 -D "cn=Directory Manager" -w password -f my.ldif
其中my.ldif文件的内容如下:
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: clearPassword
用ldapmodify修改目录
修 改目录时ldapmodify接受的ldif文件略有不同,每个目录节点除了指定dn外,还需要指定操作类型(changetype),涉及的属性,如果 是修改还要属性具体的值。changetype modify用来修改、增加、删除属性。changetype delete用来删除目录节点。changetype add用来新增目录节点。changetype modrdn用来重命名和移动一个目录节点
修改的例子:
ldapmodify -h localhost -p 389 -D "cn=Directory Manager" -w password -f my.ldif
其中my.ldif文件的内容如下:
dn: uid=hz07197,ou=people,o=cn,o=ut,dc=abc,dc=com
changetype: modify
replace: inetuserstatus
inetuserstatus: Active
dn: uid=HZ00274,ou=people,o=cn,o=ut,dc=abc,dc=com
changetype: modify
replace: inetuserstatus
inetuserstatus: Active
一个复杂的例子:
dn: cn=Modify Me, o=XYZ, c=US
changetype: modify
replace: mail
mail: modme@atlanta.xyz.com
-
add: title
title: System Manager
-
add: jpegPhoto
jpegPhoto:< file:///tmp/modme.jpeg
-
delete: description
-
该例子中属性jpegPhoto属性值从运行ldapmodify的主机的/tmp/modme.jpeg文件中获得。
ldapdelete命令
ldapdelete命令用来删除目录节点。基本语法是:
ldapdelete -h host -p port -D <bind dn> -w <password> [dn1 dn2 ...]
除了在命令行上指定dn外还可以在文件中指定,并用以下语法:
ldapdelete -h host -p port -D <bind dn> -w <password> < filename
文件中每一行是一个dn,如:
uid=HZ00274,ou=people,o=cn,o=ut,dc=abc,dc=com
uid=SH00200,ou=people,o=cn,o=ut,dc=abc,dc=com
ldapsearch命令
该命令的基本格式如下:
ldapsearch [options] filter [attributes]
使用该命令通常要提供绑定的用户名和密码、base dn、搜索条件,搜索范围(base, one, sub,默认是sub),典型的用例如下:
ldapsearch -D "cn=Directory Manager" -w password -b ou=hz,o=ut,dc=abc,dc=com -s sub "(objectClass=*)" > hz.ldif
该命令将ou=hz,o=ut,dc=abc,dc=com下的目录树导出到hz.ldif文件中。
ldapsearch -D "cn=Directory Manager" -w password -b ou=hz,o=ut,dc=abc,dc=com -s sub "(&(objectClass=inetOrgPerson)(uid=HZ*))" > hz-employee.ldif
该命令将ou=hz,o=ut,dc=abc,dc=com下的目录树中的类型是inetOrgPerson并且UID以HZ开头的目录条目导出到hz-employee.ldif文件中。
ldapsearch -D "cn=Directory Manager" -w password -b "" -s base objectClass=* > rootdse.ldif
该命令将ROOT DSE下的目录条目导出到rootdse.ldif文件中。
ldapsearch -D "cn=Directory Manager" -w password -b cn=config "(objectClass=*)" nsslapd-requriesrestart
该命令找出Sun ONE Directory Server中所有修改后需要重启ldap服务的配置选项。
ldapsearch命令的某些选项可以省略而用环境变量代替,比如-b指定的base dn可以用环境变量LDAP_BASEDN代替,所以上述第一个命令等价于以下命令:
export LDAP_BASEDN="ou=hz,o=ut,dc=abc,dc=com"
ldapsearch -D "cn=Directory Manager" -w password "(objectClass=*)" > hz.ldif
关于LDIF的参考资料:
http://www.zytrax.com/books/ldap/ch8
该网站具体描述的ldif文件的格式,特别详细的描述了被用作修改目录树的ldif指令,并给出了详尽的例子。
http://www.faqs.org/rfcs/rfc2849.html
该网站列出了RFC2849,该RFC是LDIF的官方spec。
LDAP做整合非常好用。。。。