分类: 系统运维
2011-04-27 21:31:17
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
修正:我的服務器支持LAMP及JSP應用,編譯使用的參數為
/configure' '--prefix=/usr/local/php' '--with-gd=/usr/local/gd2'
'--with-apxs2=/usr/local/apache/bin/apxs' '--enable-mbregex'
'--enable-bcmath' '--with-mysql=/usr/local/mysql' '--with-zlib-dir'
'--enable-mbstring=all'
'--with-pdo-mysql=/usr/local/mysql/bin/mysql_config'
'--with-freetype-dir=/usr/local/freetype' '--with-ldap'
'--with-ldap-sasl' '--with-gettext'
make ;make install
cp php.ini-dist /usr/local/php/lib/php.ini
vim /usr/local/php/lib/php.ini
刪除“;extension=php_gettext.dll”前的豐號。重啟apache服務即可。
如果編譯是不加--with-gettext會報Fatal error: Call to undefined function bindtextdomain() in。。。。錯誤;不修改配置文件也會報找不到gettext錯誤。
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
(安装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的数据库里面。