環境:CentOS 5.4
LDAP的工作原理:
LDAP是以伺服器/用戶端方式工作,目錄服務将資料庫軟體的邏輯結構分為前端(用戶端)和後端(服務端和倉庫)
用戶端------ 服務端 ------ 倉庫
LDAP 邏輯結構圖
系統自帶以下兩個db檔案必須有,不然編譯openldap-2.3.34還是會報錯
db4-devel-4.3.29-10.el5
db4-4.3.29-10.el5
1、安裝db:
tar xvf db-5.1.25.tar.gz
cd db-5.1.25
cd build_unix/
../dist/configure --prefix=/usr/local/BerkeleyDB
make
make install
vi /etc/ld.so.conf
/usr/local/Berkeley/lib
ldconfig
2、安裝openldap
先設定環境不然安裝openldap會報錯
env CPPFLAGS="-I/usr/local/BerkeleyDB/include" LDFLAGS="-L/usr/lib -L/usr/local/BerkeleyDB/lib"
tar xvf openldap-2.3.34.tgz
cd openldap-2.3.34
./configure --prefix=/usr/local/openldap --enable-bdb
make depend
make test 可跳過
make install
3.安裝apache
tar zxvf httpd-2.2.15.tar.gz
cd httpd-2.2.15
./configure --prefix=/usr/local/apache \
--with-included-apr \
--with-mpm=worker \
--with-ldap \
--enable-mods-static="deflate expires" \
--enable-mods-shared="ssl ldap authnz-ldap dav dav-fs dav-lock headers rewrite"
make && make install
開web賬戶
groupadd www
useradd -g www www -d /home/www -s /sbin/nologin
修改httpd.conf配置檔案
cd /usr/local/apache/conf
vi httpd.conf
把使用者改稱www
啟動apache
/usr/local/apache/bin/apachectl -k start
若是驗證是否是否apache起來,則防火牆要放行
vi /etc/sysconfig/iptables
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 80 -j ACCEPT
重新開機防火牆
service iptables restart
浏覽 出現 it works 就正确了
生成證書
tar -zxvf ssl.ca-0.1.tar.gz
mv ./ssl.ca-0.1 /usr/local/apache/conf/
cd /usr/local/apache/conf/ssl.ca-0.1
./new-root-ca.sh
下邊輸入密碼其他的随便寫生成了ca.key和ca.crt兩個檔案
下面還要為我們的伺服器生成一個證書
./new-server-cert.sh server
這樣就生成了server.csr和server.key這兩個檔案.
簽署一下
./sign-server-cert.sh server
輸入你之前設定的密碼
然後y 就生成了server.crt
mv ./server.* ../ 把證書拷貝到conf的目錄下
cd .. vi httpd.conf
去掉#Include conf/extra/httpd-ssl.conf的注釋
如果證書放到其它地方去要修改httpd-ssl.com的配置
重起apache服務
/usr/local/apache/bin/apachectl -k restart
防火牆放行443端口,原先的80端口可以去掉
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 443 -j ACCEPT
4、生成slapd密碼
/usr/local/openldap/sbin/slappasswd
New password: 輸入密碼
Re-enter new password: 重複密碼
生成後的加密密碼: {SSHA}W/48LCkOe9rZUHMGyjD8VeHbMF4C3Szm
備注:相同的數字随機加密後會不同
5、修改openldap的配置檔案
vi /usr/local/openldap/etc/openldap/slapd.conf
改動三行
suffix "dc=holy,dc=com"
rootdn "cn=root,dc=holy,dc=com"
rootpw {SSHA}W/48LCkOe9rZUHMGyjD8VeHbMF4C3Szm
啟動ldap服務
cd /usr/local/openldap/libexec
./slapd
如果啟動不成功可以用 ./slapd -d 1 啟動debug模式。。将在螢幕列印啟動資訊
但是你重./slapd -d 1 啟動debug模式時候會報錯找不到DB_CONFIG的檔案
cp /usr/local/openldap/var/openldap-data/DB_CONFIG.example /usr/local/openldap/var/openldap-data/DB_CONFIG
[root@localhost libexec]# ps -ef|grep slapd
root 27286 1 0 09:40 ? 00:00:00 ./slapd
root 27289 25603 0 09:40 pts/0 00:00:00 grep slapd
設定初始化
vi /tmp/init.ldif
dn: dc=holy,dc=com
dc: holy
objectClass: top
objectClass: domain
dn: ou=Hosts,dc=holy,dc=com
ou: Hosts
objectClass: organizationalUnit
dn: ou=People,dc=holy,dc=com
ou: People
賬戶密碼資訊
vi /tmp/user1.ldif
dn:cn=user1,ou=People,dc=holy,dc=com
cn: user1
sn: USER1
uid: user1
userPassword: user1
objectClass: inetOrgPerson
cd /usr/local/openldap/bin
ldapadd -x -D "cn=root,dc=holy,dc=com" -W -f /tmp/init.ldif
6、安裝php和ldapphpadmin 管理工具
tar -zxvf php-5.2.13.tar.gz
cd php-5.2.13
./configure --prefix=/usr/local/php \
--with-config-file-path=/usr/local/php/etc \
--with-gd \
--enable-gd-native-ttf \
--with-png-dir \
--with-jpeg-dir \
--with-freetype-dir \
--with-iconv-dir \
--with-zlib-dir \
--with-bz2 \
--enable-mbstring \
--with-libxml-dir \
--enable-sockets \
--without-sqlite \
--without-pdo-sqlite \
--disable-ipv6 \
--with-apxs2=/usr/local/apache/bin/apxs \
--with-ldap --with-gettext
修改apache 配置檔案
vi /usr/local/apache/conf/httpd.conf
DirectoryIndex index.html index.php
AddType application/x-httpd-php .php
cp php.ini-dist /usr/local/php/etc/php.ini
安裝phpldapadmin
cd /qeedoodb/setup/
tar zxvf phpldapadmin-1.2.0.5.tgz
cd phpldapadmin-1.2.1/config
cp config.php.example config.php
mv phpldapadmin-1.2.0.5 /usr/local/apache/htdocs/phpldapadmin
重起apache
<a href="https://ip/phpldapadmin">https://ip/phpldapadmin</a>
就可以登陸管理界面了
7、apache用ldap做驗證
<Directory /usr/local/apache/htdocs/test>
AuthType basic
AuthName "private area"
AuthBasicProvider ldap
AuthzLDAPAuthoritative off
require ldap-user "user1" #隻指定一個使用者登入
#require valid-user #全部的使用者登入都有效
</Directory>
mkdir /usr/local/apache/htdocs/test
vi index.php
ok
後續問題
用ACL來控制使用者通路LDAP資料庫的權限
access to attrs=userPassword
by anonymous auth
by dn="cn=admin,dc=holy,dc=com" write
by dn="uid=user1,ou=people,dc=holy,dc=com" write
by self write
access to *
by * read
碰到的問題:DB版本和ldap有相容性,另外環境也很重要
安裝php遇到的問題如下:
1、configure: error: libjpeg.(a|so) not found.
解決方法:
yum -y install gd
yum -y install gd-devel
2、
httpd: Syntax error on line 62 of /usr/local/apache/conf/httpd.conf: Cannot load /usr/local/apache/modules/libphp5.so into server: /usr/local/apache/modules/libphp5.so: cannot restore segment prot after reloc: Permission denied
a、關閉SELINUX的方法:
vi /etc/selinux/config 将SELINUX=enforcing 改成SELINUX=disabled 需要重新開機
這個方法可能會對伺服器帶來風險。
b、不關閉SELINUX的方法:
setenforce 0
chcon -c -v -R -u system_u -r object_r -t textrel_shlib_t /usr/local/apache/modules/libphp5.so
setenforce 1
3、
bdb_db_open: Warning - No DB_CONFIG file found in directory /usr/local/openldap/var/openldap-data: (2)
4、不能完成ldap_modify 操作。
LDAP said: Cannot modify object class
Error number: 0x45 (LDAP_NO_OBJECT_CLASS_MODS)
描述: ObjectClass modifications are not allowed.
5、
始終無法啟動apache,系統管理報錯:
Invalid command ‘AuthLDAPEnabled’, perhaps misspelled or defined by a module not included in the server configuration .
原來:“Apache2.0版中有關ldap驗證的AuthLDAPEnabled指令取消了“,apache2.2以後的版本也取消了,但是在官方的手冊中居然還能查得到
參考一下下配置:
<Directory /var/www/html>
Options Indexes FollowSymLinks
AllowOverride None
Order allow,deny
Deny from all
AuthName "LDAP auth"
AuthType Basic
#啟用ldap驗證功能
AuthLDAPBindDN "uid=root,dc=holy,dc=com"
Require valid-user
Satisfy any
本文轉自 holy2009 51CTO部落格,原文連結:http://blog.51cto.com/holy2010/576835