参考:
http://linux.chinaunix.net/techdoc/net/2007/02/27/951125.shtml
http://blog.youkuaiyun.com/zhangjunfangkaixin/article/details/3976669
启动与停止
服务启动$ /usr/sbin/slapd
可以通过以下命令查看slapd是否启动
$ ps aux |grep slapd
openldap 6406 0.0 0.2 14608 2764 ? Ssl 13:27 0:00 /usr/sbin/slapd -g openldap -u openldap
tony 6417 0.0 0.0 4892 752 pts/1 R+ 13:28 0:00 grep slapd
如果服务没有启动,可以
$ /usr/sbin/slapd -d 256
来查看错误信息
配制
比如说我们的域名是debsir.org, 在配制文件/etc/ldap/slapd.conf中可以做如下调整
database bdb #设置使用的资料库
suffix "dc=debsir,dc=org" #设置目录后缀
rootdn "cn=admin,dc=debsir,dc=org" #设置目录管理员
directory "/var/lib/ldap" #设置数据库路径
rootpw secret #设置管理密码
这里用了明文的“secret”密码。这样设置不安全,如果需使用加密的密码,则可以借助slappasswd 命令
比如:
$ slappasswd -h {MD5}
New password:
Re-enter new password:
{MD5}4QrcOUm6Wau+VuBX8g+IPg==
其中使用 -h 选项用于指定加密方式, 它支持{CRYPT}, {MD5}, {SMD5}, {SSHA}, 和 {SHA} 方式
然后修改/etc/ldap/slapd.conf 中的rootpw 行为:
rootpw {MD5}4QrcOUm6Wau+VuBX8g+IPg==
修改后,需要重启slapd服务
首先要添加根,这一步是必要的,不然任何数据都添加不进去,并且也搜索不到数据,会报错。我们编辑一个test.ldif文件:
dn: dc=debsir,dc=orgobjectClass: dcObject
objectClass: organization
dc: test
o: Example Company
dn: cn=Manager,dc=debsir,dc=org
objectClass: organizationalRole
objectClass: top
cn: Manager
执行命令:
# ldapadd -x -D "cn=Manager, dc=debsir,dc=org" -w secret -f test.ldif$ sudo /etc/init.d/slapd restsart
这时可以使用客户端工具ldapsearch连接服务器查看目录信息:
~$ ldapsearch -x -b '' -s base '(objectclass=*)' namingContexts
如果命令执行成功,返回一些信息,则说明服务器正常运行了
# extended LDIF
#
# LDAPv3
# base with scope baseObject
# filter: (objectclass=*)
# requesting: namingContexts
#
#
dn:
namingContexts: dc=debsir,dc=org
# search result
search: 2
result: 0 Success
# numResponses: 2
# numEntries: 1
或者
$ ldapsearch -x -b dc=debsir,dc=org
# extended LDIF
#
# LDAPv3
# base with scope subtree
# filter: (objectclass=*)
# requesting: ALL
#
# debsir.org
dn: dc=debsir,dc=org
objectClass: top
objectClass: dcObject
objectClass: organization
o: debsir.org
dc: debsir
# admin, debsir.org
dn: cn=admin,dc=debsir,dc=org
objectClass: simpleSecurityObject
objectClass: organizationalRole
cn: admin
description: LDAP administrator
# search result
search: 2
result: 0 Success
# numResponses: 3
# numEntries: 2
如果启动不成功,它会提示一些出错信息,多数是slapd.conf配置出错。回头仔细核查一下配置文档。
如果执行命令“ldapsearch -x -b dc=debsir,dc=org”,报错“32 No such object”,那么说明没有成功添加根。
客户端配置文档
客户端配置文档是ldap.conf。该文档相当简单,其实不用配置也能正常操作。
BASE dc=it, dc=com #设置目录起点
URI ldap://localhost ldap://localhost:666
3.5
数据录入
定义一个组织单元创建文件group.ldif,内容如下:
dn: ou=people,dc=debsir,dc=org
objectClass: organizationalUnit
ou: people
创建用户
创建文件person.ldif,内容如下:
dn: cn=tony,ou=people,dc=test,dc=com
objectClass: organizationalPerson
objectClass: top
cn: tony
sn: an
postalCode: 330005
telephoneNumber: 12345678
title: System Administrator
postalAddress: Guiyang, China
* dn唯一地确定了这个对象的位置
* objectClass确定了这个对象所具有的属性
* objectClass可以有多个
注意每行后面不要留有空格。
3. 将信息添加到数据库
$ ldapadd -x -D cn=admin,dc=debsir,dc=org -W -f group.ldif
Enter LDAP Password:
adding new entry "ou=people,dc=debsir,dc=org"
tony@tonybox:~$ ldapadd -x -D cn=admin,dc=debsir,dc=org -W -f person.ldif
Enter LDAP Password:
adding new entry "cn=tony,ou=people,dc=debsir,dc=org"
其中
* x,使用简单认证方式
* -v,输出更多信息
* -D cn=admin,dc=cg,dc=com,dc=cn,使用此用户进行增加操作,显然用管理员比较好使,增加用户的权限不是谁都有的
* -W,提示输入密码,也可以在命令行里面给出密码,这时的参数应该是 -w password,这对于脚本来说比较方便
4.查看
然后可以用以下命令查看录入信息
~$ ldapsearch -x -b cn=tony,ou=people,dc=debsir,dc=org
# extended LDIF
#
# LDAPv3
# base with scope subtree
# filter: (objectclass=*)
# requesting: ALL
#
# tony, people, debsir.org
dn: cn=tony,ou=people,dc=debsir,dc=org
objectClass: inetOrgPerson
objectClass: top
cn: tony
sn: an
givenName: an
displayName: Tony an
mail: etony@tom.com
postalCode: 330005
telephoneNumber: 12345678
mobile: 12345678912
homePhone: 9999999
title: System Administrator
postalAddress: Guiyang, China
# search result
search: 2
result: 0 Success
# numResponses: 2
# numEntries: 1
添加组:
dn: cn=group2,dc=dc=debsir,dc=org
objectClass: groupOfUniqueNames
cn: group2
uniqueMember: cn=tony,ou=people,dc=debsir,dc=org
添加用户到组:
dn: cn=group3,dc=test,dc=com
changetype: modify
add: uniquemember
uniqueMember: cn=tony1,ou=people,dc=test,dc=com
权限定义
access to attrs=userPassword,shadowLastChange
by dn="cn=admin,dc=debsir,dc=org" write
by anonymous auth
by self write
by * none
access to *
by dn="cn=admin,dc=debsir,dc=org" write
by * read
3.7
其它常用操作
修改密码$ ldappasswd -x -v -S -W -D cn=admin,dc=debsir,dc=org cn=tony,ou=people,dc=debsir,dc=org
New password:
Re-enter new password:
Enter LDAP Password:
ldap_initialize( )
Result: Success (0)
* S 参数是要求命令提示用户输入两次新的密码,来确认密码更新,使用 -s newpasswd 可以在命令行中指定新密码。
删除对象
删除对象的命令则是 ldapdelete,也要指定两个对象,哪个对象删除和删除哪个对象
$ ldapdelete -x -v -W -D cn=admin,dc=debsir,dc=org cn=tony,ou=people,dc=debsir,dc=org
修改对象
$ ldapmodify -x -D cn=admin,dc=debsir,dc=org -W -f person.ldif
Enter LDAP Password:
modifying entry "cn=tony,ou=people,dc=debsir,dc=org"