LINUX+APACHE+PHP+BDB+OPENLDAP+PHPLDAPADMIN安装配置
 

LINUX下安装openldap,并用phpldapadmin进行管理

BDB:Berkeley DB,openldap需要使用的数据库(貌似还有别的数据库可用,但这次我要用到它)

phpldapadmin:openldap的网页管理软件,需要php支持,所以会有apache+php一说。

linux:    CentOS5.4   ip:192.168.1.6
apache:    httpd-2.2.14.tar.bz2
php:    php-5.2.12.tar.gz
bdb:    db-4.5.20.tar.gz
openldap:    openldap-stable-2.3.32.tgz
phpldapadmin:    phpldapadmin-1.2.0.5.tgz

bdb与openldap会有兼容性问题,2.3和2.4的openldap与4.8的bdb不兼容,后来发现2.3的openldap需要的bdb版本应该为4.4-4.6之间,所以这里就选择了4.5的bdb。(装64位系统的时候,4.5的却不兼容,让换成4.3.29的,我晕死。。。)

1.安装apache

./configure --prefix=/usr/local/apache2 --enable-so --enalbe-rewrite                //安装到指定目录,so开启动态模块支持,rewrite开启地址重写。

make;make install

2.安装php

./configure --prefix=/usr/local/php5 --with-apxs2=/usr/local/apache2/bin/apxs --with-config-file-path=/usr/local/php5 --with-ldap --with-gettext                                   //指定安装目录,跟apache融合,指定配置文件位置,启用ldap支持(必须的),启用gettext支持(必须要启用的支持)

make;make install

cp php.ini-dist /usr/local/php5/php.ini                         //把配置文件拷贝过去,编辑它在适当位置添加include_path = /usr/local/php5/lib/php

3.修改apache让其支持php

vi /usr/local/apache2/conf/httpd.conf

AddType application/x-httpd-php .php
AddType application/x-httpd-php-source .phps
              //在合适的位置添加这两行,.php和.phps前面都带“点”的,再前面还都有一“空格”的,不要写错了哦。

DirectoryIndex index.html index.php                            //在DirectoryIndex后面加个index.php,类似前面这样子

保存退出。

4.安装bdb

tar zcvf db-4.5.20.tar.gz

cd db-4.5.20/build_unix                                            //bdb需要在这个目录里编译(不同于其它大多数linux程序,算一特异者吧)

../dist/configure --prefix=/usr/local/db                         //bdb的配置文件在dist目录里(这种编译安装在linux里没有普遍性,所以不必因此困扰,大多数linux程序还都是直接在解包出来的根目录里直接编译安装就行了的)

make

make install                                                            //make;make install中间有分号是因为两条命令写在同一行里必须要用;分隔,而此处则是把两条命令分开执行,所以;也就不用了,其实结果是一样的。

vi /etc/ld.so.conf      手工加入以下内容:
/usr/local/db/lib
/sbin/ldconfig

5.安装openldap

vi /etc/profile     在末尾手工加入以下内容:

LD_RUN_PATH=/usr/local/db/lib                                //这个可能不是必须的。

LD_LIBRARY_PATH=/usr/local/db/lib                         //必须的,少了安装会报错

export LD_RUN_PATH LD_LIBRARY_PATH                //导出变量,也是必须的,要不变量没法生效

保存退出

source /etc/profile                                                     //让刚设置的变量立刻生效

env CPPFLAGS="-I /usr/local/db/include" LDFLAGS="-L /usr/local/db/lib" ./configure --prefix=/usr/local/openldap --enable-bdb                                                            //CPP和LD这两个环境变量应该可以跟刚才的LD_LIBRARY那个变量一样设置在profile文件里的,但是大家都是在这里设置,可能是因为这两个变量都是只在安装时用一次吧,所以我这里也就随大家写在命令里而不是写在profile里了,记得要启用bdb,要不我们的bdb就白装了。(装64位系统的时候又报错缺少ltdl.h,后来locate ltdl找到了它的位置,然后命令改成了env CPPFLAGS="-I /usr/local/db/include" LDFLAGS="-L /usr/local/db/lib" LDFLAGS="-L /usr/share/libtool/libltdl" ./configure --prefix=/usr/local/openldap --enable-bdb,就是多加了红色字体部分。真晕,同样的操作配置,32位能过,64位系统就过不了。。。)(试过多种方法64位系统总是提示缺少ltdl.h,最后实在耗不起那个时间了然后就直接yum install openldap-servers了事,此时却发现yum安装时安装了一个名为libtool-ltdl-1.5.22-7.el5_4的依赖包,难道就是因为缺少这个包导致的编译通不过?)(yum安装openldap主要是安装openldap、openldap-devel、openldap-servers、openldap-clients这四种包)

make depend                                                        //解决依赖问题
make
make test
                                                             //有自信的可以不检测,这个不是必须的。
make install

6.修改openldap配置文件

vi /usr/local/openldap/etc/openldap/slapd.conf       

include         /usr/local/openldap/etc/openldap/schema/core.schema                    //本行后面这些include行手工添加一下,这些schema都在openldap安装目录下的etc/openldap/schema下,可以进去该目录看下都有什么schema,把有的全都添加到这里,以后用起来也方便。
include         /usr/local/openldap/etc/openldap/schema/corba.schema
include         /usr/local/openldap/etc/openldap/schema/cosine.schema
include         /usr/local/openldap/etc/openldap/schema/dyngroup.schema
include         /usr/local/openldap/etc/openldap/schema/inetorgperson.schema
include         /usr/local/openldap/etc/openldap/schema/java.schema
include         /usr/local/openldap/etc/openldap/schema/misc.schema
include         /usr/local/openldap/etc/openldap/schema/nis.schema
include         /usr/local/openldap/etc/openldap/schema/openldap.schema

database        bdb                                                                            //本行后面这些行是可能需要修改的,bdb就是我们的Berkeley DB数据库了
suffix          "dc=gaso,dc=com"                                                        //suffix(后缀),以后所有的ldap数据记录都将放在它的下面,你可以把它看成是数据库的总库,之后的phpldapadmin中也需要指定它并且要跟这里的设置一致(6个多小时的时间花费得来的经验!),它的格式有:dc=gaso,dc=com或者o=gaso,dc=com或者cn=gaso,dc=com,这些样子的应该都可以(没试过哦,推测的,有兴趣的可以试下),应该比较灵活,甚至直接dc=com我估计也行(没试过哦)。我推测就是给个树根好让以后苹果有地方长,至于树根长什么模样,苹果是不会介意的:),怎么的苹果也是长树枝上的,中间还隔着树干呢,哈哈!
rootdn          "cn=root,dc=gaso,dc=com"                                          //openldap的管理者(就跟系统的管理员类似,openldap的“大权在握者”)
rootpw          {SSHA}rWWrzQ60N42lNONcZFaKovPrgWSjn5/Z          //管理者密码,该密码串需要通过ldappasswd命令(openldap安装目录下的bin目录里)来生成
directory       /usr/local/openldap/var/openldap-data                        //指定openldap数据库的存放目录

保存退出

/usr/local/openldap/bin/ldappasswd                                                 //生成管理者密码,回车后输入两遍密码就可以了

/usr/local/openldap/libexec/slapd                                                    //启动openldap

7.安装phpldapadmin

tar zxvf phpldapadmin-1.2.0.5.tgz

mv phpldapadmin-1.2.0.5/* /usr/local/apache2/htdocs/                   //解包,把得到的文件弄到apache的网页根目录htdocs里就算安装完事

8.修改phpldapadmin配置文件

cp /usr/local/apache2/htdocs/config/config.{php.example,php}       //用配置文件模板拷贝一份配置文件出来

vi /usr/local/apache2/htdocs/config/config.php

$servers->setValue('server','name','GASO LDAP Server');                //本行及后面这些行(读hang)为关键参数,可按实际情况修改,此处指定服务器的显示名称为GASO LDAP Server,该名称可随意设置
$servers->setValue('server','host','127.0.0.1');                                     //指定openldap服务器就是本机
$servers->setValue('server','port',389);                                              //指定openldap服务使用的端口为389
$servers->setValue('server','base',array('dc=gaso,dc=com'));            //指定openldap的Base DN(树根,总数据库啊什么的),array里的值必须与上面6中设置的suffix的值一致,否则phpldapadmin就无法连接上openldap,也就意味着phpldapadmin无法操作openldap(6个多小时才搞明白这一点,我晕死!)。
$servers->setValue('login','auth_type','session');                               //session是默认值,还可以设置成cookie,但那是另一套设置方案了
$servers->setValue('login','bind_id','cn=root,dc=gaso,dc=com');       //登陆的绑定id,我在这里用了“大权在握者”来绑定,这样的话网页登陆对话框上就会直接显示该管理者的账号,直接输入密码就可以登录了,也可以留空,留空的话下面的密码也就必须留空了,那样的话可以设置多个账号,大家各登个的录。
$servers->setValue('login','bind_pass','gaso123');                              //上面已经绑定了管理者账号了,这里就需要给出密码,这个密码可是之前ldappasswd命令设置生成的密码,可不是在这里指定什么就是什么密码。

 

9.访问phpldapadmin管理openldap

http://192.168.1.6/(安装openldap服务的系统的ip,不要连别人的名字都抄到答卷上了哦)

没意外的话就可以看到phpldapadmin的登录页面了(八成会有意外,第一次在所难免啊!)

10.关于ldap的一些理解

我们可以想象有一颗苹果树,树枝就是树干的延伸。


 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

貌似可以这样理解:ou、cn(树干)长在dc(树根)ou、cn(苹果)长在ou、cn(树干树枝)(非主流啊!哈哈!)

11.其它相关

ldapsearch -x -b '' -s base '(objectclass=*)'                      //检查openldap安装是否成功,结果类似如下

# extended LDIF
#
# LDAPv3
# base <> with scope baseObject
# filter: (objectclass=*)
# requesting: ALL
#
#
dn:
objectClass: top
objectClass: OpenLDAProotDSE
# search result
search: 2
result: 0 Success
# numResponses: 2
# numEntries: 1

ldapsearch -x -b 'dc=gaso,dc=com' '(objectclass=*)'            //查看openldap数据库里所有数据

ldapadd -x -D "cn=root,dc=gaso,dc=com" -w gaso123 -f "gaso.ldif"               //把文件gaso.ldif里面的记录通过管理者账号录入openldap的数据库里面。