1.概念介绍
LDAP是轻量目录访问协议,英文全称是Lightweight Directory Access Protocol,一般都简称为LDAP。它是基于X.500标准的,但是简单多了并且可以根据需要定制。与X.500不同,LDAP支持TCP/IP, 这对访问Internet是必须的。LDAP的核心规范在RFC中都有定义,所有与LDAP相关的RFC都可以在LDAPman RFC网页中找到。 简单说来,LDAP是一个得到关于人或者资源的集中、静态数据的快速方式。 LDAP是一个用来发布目录信息到许多不同资源的协议。通常它都作为一个集中的地址本使用,不过根据组织者的需要,它可以做得更加强大
现在市场上有关LDAP的产品已有很多,各大软件公司都在他们的产品中集成了LDAP服务,如Microsoft的 ActiveDirectory、Lotus的Domino Directory、IBM的WebSphere中也集成了LDAP服务。LDAP的开源实现是OpenLDAP,它比商业产品一点也不差,而且源码开 放。
OpenLDAP 是最常用的目录服务之一,它是一个由开源社区及志愿者开发和管理的一个开源项目,提供了目录服务的所有功能,包括目录搜索、身份认证、安全通道、过滤器等 等。大多数的 Linux 发行版里面都带有 OpenLDAP 的安装包。OpenLDAP 服务默认使用非加密的 TCP/IP 协议来接收服务的请求,并将查询结果传回到客户端。由于大多数目录服务都是用于系统的安全认证部分比如:用户登录和身份验证,所以它也支持使用基于 SSL/TLS 的加密协议来保证数据传送的保密性和完整性。OpenLDAP 是使用 OpenSSL 来实现 SSL/TLS 加密通信的
2. 环境介绍
这里准备3台虚拟机,在cloudstack上生成很方便,当然可以根据自己需求来部署,可以只部署简单的ldap,也可以部署ldap+ca,也可以部署ldap复制,前2个都可以在一台服务器上进行。
openldap master: 192.168.1.137 域名:openldap.54im.com
openldap slave: 192.168.1.143 域名:openldap2.54im.com
ca+openldap client: 192.168.1.111 域名:openldap-ca.54im.com
2. 准备工作
在3台服务器上均进行如下操作。
- dns配置
nameserver 8.8.8.8
nameserver 8.8.4.4
- selinux配置
当然生产环境建议还是开启,我这里偷懒下先关掉。
setenforce
- epel配置
rpm -Uvh
http://mirror-fpt-telecom.fpt.net/fedora/epel/6/x86_64/epel-release-6-8.noarch.rpm
3. yum部署ldap
- yum安装openldap:
yum install openldap openldap-servers openldap-clients openldap-devel compat-openldap
- 日志配置:
mkdir /var/log/slapd chmod 755 /var/log/slapd/ chown ldap:ldap /var/log/slapd/ sed -i "/local4.*/d" /etc/rsyslog.conf cat >> /etc/rsyslog.conf << EOF local4.* /var/log/slapd/slapd.log EOF service rsyslog restart
- 创建管理员密码,尽量使用高强度密码
这里我设置的密码为 54im.com,生存的{SSHA}DOS0VOBzmvD3beMsuFllLBOi6CAt4Kcj一会配置文件要用
[[email protected] ~]# slappasswd New password: Re-enter new password: {SSHA}DOS0VOBzmvD3beMsuFllLBOi6CAt4Kcj
默认情况下,在/etc/openldap/slapd.d/目录下,有一些默认的配置文件,要删掉重新建立,这一步很重要
修改slapd.conf配置cp /usr/share/openldap-servers/slapd.conf.obsolete /etc/openldap/slapd.confrm -rf /etc/openldap/slapd.d/* chown ldap:ldap /var/lib/ldap/ /etc/init.d/slapd restart slaptest -f /etc/openldap/slapd.conf -F /etc/openldap/slapd.d chown -R ldap:ldap /etc/openldap/slapd.d
vi /etc/openldap/slapd.conf 我这里列出要修改的项
修改suffix 和rootdn,rootpw,suffix我这里用了二级域名,如果你想用主域名也可以,写成dc=54im,dc=com,其中rootpw可以是明文,这里我们经过SSHA算法加密下,
114 database bdb 115 suffix "dc=ldap,dc=54im,dc=com" 116 checkpoint 1024 15 117 rootdn "cn=Manager,dc=openldap,dc=54im,dc=com" 118 # Cleartext passwords, especially for the rootdn, should 119 # be avoided. See slappasswd(8) and slapd.conf(5) for details. 120 # Use of strong authentication encouraged. 121 # rootpw secret 122 # rootpw {crypt}ijFYNcSNctBYg 123 rootpw {SSHA}hHZMkvQ3bj07PYOb6emsZHZfGtXvd5g8 //这里用上面产生的密码
- 测试下配置文件是否修改成功
[root@openldap-master openldap]# slaptest -u -f slapd.conf config file testing succeeded
这里有个日志级别的问题
[root@openldap-master ~]# slapd -d ? Installed log subsystems: Any (-1, 0xffffffff)记录所有的信息 Trace (1, 0x1)跟踪功能调用的信息 Packets (2, 0x2)包处理的debug信息 Args (4, 0x4)丰富的debug信息 Conns (8, 0x8)连接管理信息 BER (16, 0x10)包的收发信息 Filter (32, 0x20)搜索过滤的处理过程 Config (64, 0x40)配置文件的处理过程 ACL (128, 0x80)访问控制列表处理过程 Stats (256, 0x100)连接、操作及其结果的统计数据 Stats2 (512, 0x200)向客户端返回的结果的统计信息 Shell (1024, 0x400)与shell后端的通信信息 Parse (2048, 0x800)显示记录条目的分析信息 Sync (16384, 0x4000)从服务器数据同步资源消耗处理信息 None (32768, 0x8000) NOTE: custom log subsystems may be later installed by specific code
你可以同时设置几种日志级别,方法是将日志级别的数字加起来。 比如同时设置Trace和Stats级别,那么在slapd.conf中:
loglevel 257
或者启动OpenLDAP时,使用命令参数-d 257来指定
- 创建数据库文件(从模版复制)生成DB_CONFIG
cd /var/lib/ldap/ cp /usr/share/openldap-servers/DB_CONFIG.example ./DB_CONFIG chown ldap.ldap DB_CONFIG
启动ldap服务,自动创建数据库文件
chkconfig slapd on /etc/init.d/slapd start
服务启动后,可以看到生成了几个数据库文件
[[email protected] ldap]# ll 总用量 11472 -rw-r--r--. 1 ldap ldap 2048 5月 22 13:42 alock -rw-------. 1 ldap ldap 24576 5月 22 13:42 __db.001 -rw-------. 1 ldap ldap 9093120 5月 22 13:42 __db.002 -rw-------. 1 ldap ldap 335552512 5月 22 13:42 __db.003 -rw-------. 1 ldap ldap 2359296 5月 22 13:42 __db.004 -rw-------. 1 ldap ldap 753664 5月 22 13:42 __db.005 -rw-------. 1 ldap ldap 32768 5月 22 13:42 __db.006 -rw-r--r--. 1 root root 921 5月 22 13:42 DB_CONFIG -rw-------. 1 ldap ldap 8192 5月 22 13:42 dn2id.bdb -rw-------. 1 ldap ldap 32768 5月 22 13:42 id2entry.bdb -rw-------. 1 ldap ldap 10485760 5月 22 13:42 log.0000000001
- 检查搜索域
-x 信息排序
-b 指定搜索范围起点
[[email protected] openldap]# ldapsearch -x -b "dc=openldap,dc=54im,dc=com" # extended LDIF # # LDAPv3 # base <dc=openldap,dc=54im,dc=com> with scope subtree # filter: (objectclass=*) # requesting: ALL # # search result search: 2 result: 32 No such object # numResponses: 1
- 数据录入
服务器正常运作后,就可以录入信息了。信息的录入有三种方法,一种是手工录入,一种是.ldif文件格式录入,一种是web界面录入(下面会介绍phpldapadmin录入)。信息录入用到ldapadd这个程序。这里我们介绍用.ldif方式录入
- 创建待认证的用户
[root@openldap-master openldap]# mkdir /54im_home [root@openldap-master openldap]# useradd -u 8001 -d /54im_home/ivon01 ivon01 [root@openldap-master openldap]# useradd -u 8002 -d /54im_home/ivon02 ivon02 [root@openldap-master openldap]# useradd -u 8003 -d /54im_home/ivon03 ivon03 [root@openldap-master openldap]# echo "54im.com" |passwd --stdin ivon01 更改用户 ivon01 的密码 。 passwd: 所有的身份验证令牌已经成功更新。 [root@openldap-master openldap]# echo "54im.com" |passwd --stdin ivon02 更改用户 ivon02 的密码 。 passwd: 所有的身份验证令牌已经成功更新。 [root@openldap-master openldap]# echo "54im.com" |passwd --stdin ivon03 更改用户 ivon03 的密码 。 passwd: 所有的身份验证令牌已经成功更新。
- 安装及配置迁移工具
[root@openldap-master openldap]# yum install migrationtools -y [root@openldap-master openldap]# cd /usr/share/migrationtools/ [root@openldap-master migrationtools]# vi migrate_common.ph 70 # Default DNS domain 71 $DEFAULT_MAIL_DOMAIN = "openldap.54im.com"; 72 73 # Default base 74 $DEFAULT_BASE = "dc=openldap,dc=54im,dc=com";
- 创建认证账户文件
主要的概念:
dn:唯一区分名
dc:所属区域
ou:所属组织
cn/uid:全名/登录ID
运行脚本migrate_base.pl,它会创建根项,并为 Hosts、Networks、Group和 People 等创建低一级的组织单元,指定为base.ldif文件,这里我们只有下面这3个
[root@openldap-master migrationtools]# ./migrate_base.pl >base.ldif [root@openldap-master migrationtools]# vi base.ldif dn: dc=openldap,dc=54im,dc=com dc: openldap objectClass: top objectClass: domain dn: ou=People,dc=openldap,dc=54im,dc=com ou: People objectClass: top objectClass: organizationalUnit dn: ou=Group,dc=openldap,dc=54im,dc=com ou: Group objectClass: top objectClass: organizationalUnit
创建用户和组的数据库文件
[root@openldap-master migrationtools]# grep ivon /etc/passwd >user.txt [root@openldap-master migrationtools]# ./migrate_passwd.pl user.txt ./user.ldif [root@openldap-master migrationtools]# grep ivon /etc/group >group.txt [root@openldap-master migrationtools]# ./migrate_group.pl group.txt ./group.ldif [root@openldap-master migrationtools]# ll base.ldif user.ldif group.ldif -rw-r--r--. 1 root root 285 5月 22 13:57 base.ldif -rw-r--r--. 1 root root 426 5月 22 13:59 group.ldif -rw-r--r--. 1 root root 1335 5月 22 13:58 user.ldif [root@openldap-master migrationtools]# ldapsearch -x -b -L "dc=openldap,dc=54im,dc=com" # extended LDIF # # LDAPv3 # base <-L> with scope subtree # filter: dc=openldap,dc=54im,dc=com # requesting: ALL # # search result search: 2 result: 34 Invalid DN syntax text: invalid DN # numResponses: 1
- 迁移系统用户到ldap数据库
[[email protected] migrationtools]# /etc/init.d/slapd restart 停止 slapd:[确定] 正在启动 slapd:[确定] [[email protected] migrationtools]# ldapadd -D "cn=Manager,dc=openldap,dc=54im,dc=com" -W -x -f /usr/share/migrationtools/base.ldif Enter LDAP Password: adding new entry "dc=openldap,dc=54im,dc=com" adding new entry "ou=People,dc=openldap,dc=54im,dc=com" adding new entry "ou=Group,dc=openldap,dc=54im,dc=com" [[email protected] migrationtools]# ldapadd -D "cn=Manager,dc=openldap,dc=54im,dc=com" -W -x -f /usr/share/migrationtools/user.ldif Enter LDAP Password: adding new entry "uid=ivon01,ou=People,dc=openldap,dc=54im,dc=com" adding new entry "uid=ivon02,ou=People,dc=openldap,dc=54im,dc=com" adding new entry "uid=ivon03,ou=People,dc=openldap,dc=54im,dc=com" [[email protected] migrationtools]# ldapadd -D "cn=Manager,dc=openldap,dc=54im,dc=com" -W -x -f /usr/share/migrationtools/group.ldif Enter LDAP Password: adding new entry "cn=ivon01,ou=Group,dc=openldap,dc=54im,dc=com" adding new entry "cn=ivon02,ou=Group,dc=openldap,dc=54im,dc=com" adding new entry "cn=ivon03,ou=Group,dc=openldap,dc=54im,dc=com"
如果出现错误:
ldap_bind: Invalid credentials (49)
就表示你要么给出了错误的”cn=”条目,要么给出了错误的密码
我这里就出错了,原因是在这一步没有操作:
Enter LDAP Password:(输入你刚才设置的密码),正确之后会显示:
[root@openldap-master migrationtools]# ldapsearch -x -b "dc=openldap,dc=54im,dc=com" # extended LDIF # # LDAPv3 # base <dc=openldap,dc=54im,dc=com> with scope subtree # filter: (objectclass=*) # requesting: ALL # # openldap.54im.com dn: dc=openldap,dc=54im,dc=com dc: openldap objectClass: top objectClass: domain # People, openldap.54im.com 。。。。省略 search: 2 result: 0 Success # numResponses: 10 # numEntries: 9
4. phpldapadmin安装
yum安装apache+php环境
yum install httpd php php-bcmath php-gd php-mbstring php-xml php-ldap
yum install phpldapadmin #要有epel源
修改httpd.conf配置文件,最文件最后新增
vi /etc/httpd/conf/httpd.conf ServerName openldap.54im.com Alias /phpldapadmin /usr/share/phpldapadmin/htdocs Alias /ldapadmin /usr/share/phpldapadmin/htdocs <Directory /usr/share/phpldapadmin/htdocs> Order Deny,Allow Deny from all Allow from 127.0.0.1 192.168.1.0/24 Allow from ::1 </Directory> 但是我看见/etc/httpd/conf.d下面有一个文件叫ldapphpadmin.conf文件内容何其是一样的,还有就是这个phpadmin在web访问的时候默认是80端口,你要查一下当前是否有80端口被占用,修改一下自己的端口,或者是另外一个端口
修改phpldapadmin配置文件
[root@openldap-master ~]# vi /etc/phpldapadmin/config.php # line 397: uncomment, line 398: make it comment $servers->setValue(‘login‘,‘attr‘,‘dn‘); // $servers->setValue(‘login‘,‘attr‘,‘uid‘); 给他注释掉 然后就是重启http服务了,登陆访问注意这里的域名解析,假如说你是在虚拟机里面操作的话,要在本地的hosts文件添加一下
这里的登陆账号就是你前面设置的我这里是cn=Manager,dc=openldap,dc=bigbao,dc=com 登陆进去之后的样子是这样的,有我们刚刚创建的组合刚刚加入的用户
文章参考:http://www.tuicool.com/articles/BVjqE3http://www.tuicool.com/articles/f6zIjyhttp://www.tuicool.com/articles/JNBFBvhttp://www.tuicool.com/articles/32myUr