LDAP是輕量目錄訪問協議,英文全稱是Lightweight Directory Access Protocol,通常都簡稱爲LDAP。它是基於X.500標準的,可是簡單多了而且能夠根據須要定製。與X.500不一樣,LDAP支持TCP/IP, 這對訪問Internet是必須的。LDAP的核心規範在RFC中都有定義,全部與LDAP相關的RFC均可以在LDAPman RFC網頁中找到。 簡單說來,LDAP是一個獲得關於人或者資源的集中、靜態數據的快速方式。 LDAP是一個用來發布目錄信息到許多不一樣資源的協議。一般它都做爲一個集中的地址本使用,不過根據組織者的須要,它能夠作得更增強大php
如今市場上有關LDAP的產品已有不少,各大軟件公司都在他們的產品中集成了LDAP服務,如Microsoft的 ActiveDirectory、Lotus的Domino Directory、IBM的WebSphere中也集成了LDAP服務。LDAP的開源實現是OpenLDAP,它比商業產品一點也不差,並且源碼開 放。css
OpenLDAP 是最經常使用的目錄服務之一,它是一個由開源社區及志願者開發和管理的一個開源項目,提供了目錄服務的全部功能,包括目錄搜索、身份認證、安全通道、過濾器等 等。大多數的 Linux 發行版裏面都帶有 OpenLDAP 的安裝包。OpenLDAP 服務默認使用非加密的 TCP/IP 協議來接收服務的請求,並將查詢結果傳回到客戶端。因爲大多數目錄服務都是用於系統的安全認證部分好比:用戶登陸和身份驗證,因此它也支持使用基於 SSL/TLS 的加密協議來保證數據傳送的保密性和完整性。OpenLDAP 是使用 OpenSSL 來實現 SSL/TLS 加密通訊的linux
這裏準備3臺虛擬機,在cloudstack上生成很方便,固然能夠根據本身需求來部署,能夠只部署簡單的ldap,也能夠部署ldap+ca,也能夠部署ldap複製,前2個均可以在一臺服務器上進行。web
openldap master: 192.168.1.137 域名:openldap.54im.com算法
openldap slave: 192.168.1.143 域名:openldap2.54im.comsql
ca+openldap client: 192.168.1.111 域名:openldap-ca.54im.comshell
在3臺服務器上均進行以下操做。數據庫
nameserver 8.8.8.8
nameserver 8.8.4.4 apache
固然生產環境建議仍是開啓,我這裏偷懶下先關掉。後端
setenforce
rpm -Uvh http://mirror-fpt-telecom.fpt.net/fedora/epel/6/x86_64/epel-release-6-8.noarch.rpm
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一會配置文件要用
[root@openldap-master ~]# 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.conf
rm -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中:
或者啓動OpenLDAP時,使用命令參數-d 257來指定
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
服務啓動後,能夠看到生成了幾個數據庫文件
[root@openldap-master 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
-b 指定搜索範圍起點
[root@openldap-master 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
[root@openldap-master migrationtools]# /etc/init.d/slapd restart
中止 slapd:[肯定]
正在啓動 slapd:[肯定]
[root@openldap-master 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" [root@openldap-master 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" [root@openldap-master 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
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://wenku.baidu.com/link?url=SoE-mxKMiz7KwOCtlXHPhkiHtgs-guWd_tVM5VJ6rOA9hbydh7SIIoW3BKpObU25xD92JzYzJpbfF-AtlG-CGBswixwq5FGSQakvhdUM2vqhttp://www.tuicool.com/articles/BVjqE3http://www.tuicool.com/articles/f6zIjyhttp://www.tuicool.com/articles/JNBFBvhttp://www.tuicool.com/articles/32myUr