歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux基礎 >> 關於Linux

CentOS 6.2的LDAP目錄服務協議簡介

LDAP是light weight Directory Access Protocol (輕量級目錄訪問協議)的縮寫,其前身是更為古老的DAP協議。基於X.500標准的,但是很簡單,並且可以根據需要定制。與X.500不同,LDAP支持TCP/IP,這對訪問Internet是必須的。LDAP的核心規范在RFC中都有定義,大體上講,LDAP協議定義了和後台數據庫通信的方法、客戶端軟件和LDAP協議之間的通信標准,如後圖。

LDAP Client是指各種需要身份認證的軟件,例如Apache、ProFTPD和Samba等。LDAP Sever指的是實現LDAP協議的軟件,例如OpenLDAP等。DataStorage指的是OpenLDAP的數據存儲,如關系型數據庫(Mysql)或查詢效率更高的嵌入式數據庫(BerkeleyDB),甚至是平面文本數據庫(一個TXT的文本文件)。可見OpenLDAP軟件只是LDAP協議的一種實現形式,並不包括後台數據庫存儲,但在很多時候管理員經常將LDAPServer和DataStorage放在同一服務器中,這樣就產生了常說的LDAP數據庫,雖然後台數據庫可以多種多樣,但LDAP協議還規定了數據的存儲方式。LDAP數據庫是樹狀結構,與DNS類似。

webldap架構

在圖右中,以這種方式存儲數據最大的一個好處就是查詢速度塊,LDAP數據庫專門對讀操作進行了優化,OpenLDAP配合Berkeley DB 可使其讀操作的效率得到很大提高,LDAP數據庫的樹狀結構的另一個好處是便於分布式的管理。

實現思路

同一身份認證是改變原有的認證策略,使需要認證的軟件都通過LDAP進行認證,如下圖。在同一身份認證之後,用戶的所有信息都存儲在LDAP Server中。終端用戶在需要使用公司內部服務的時候都需要通過LDAP服務器的認證。每個員工只需記住一個密碼,在需要修改用戶信息的時候可以通過管理員提供的Web界面直接修改LDAP Server中的信息。

webldap

目前大部分主流軟件都對LDAP有很好地支持,但由於各類軟件對LDAP的支持程度不同,在做實施的時候也要區別對待。軟件對LDAP的支持可以分為兩大類:

1、一類是完全支持,也就是在軟件的配置文件中加入和LDAP有關的選項就可以完成。這種方式的好處是不需要借助其他的工具或軟件,由軟件的開發團隊直接完成對LDAP的支持。可能的缺陷也在此,由於各個軟件開發團隊的水平和開發者經驗有所差異,雖然同樣是支持了LDAP,但稍微復雜一些的高級功能就無法提供,有的時候甚至出現運行錯誤導致整個軟件出現問題。

2、另一類軟件由於很多原因並不直接支持LDAP,而是通過PAM做身份認證,由於PAM本身支持LDAP,這樣也同樣可以實現使用LDAP做身份驗證,這種方式對LDAP的支持同樣尤其優勢,軟件開發人員不需要修改代碼支持LDAP協議,減少了軟件本身產生安全漏洞的可能,缺點是一些不希望使用PAM的系統中這樣的軟件就無法通過LDAP進行用戶認證,俄日全額雖然PAM對LDAP的支持已經很完善,但一些高級、復雜的功能還是無法實現,正是由於這些原因,這類軟件為數不多,比較典型的就是VSFTPD和CVS。

使用LDAP做身份認證

為什麼需要使用LDAP數據庫?用傳統的關系型數據庫不可以嗎?從上述說明中可以看到LDAP服務器就是起到了一個認證Server的作用,從技術本身而言這個認證Server具體使用何種數據庫並不重要,如果使用一個關系型數據庫也可以達到統一身份認證的目的,但LDAP自身的優勢使得很多公司最終選擇它,以下是一些選擇LDAP的重要原因:

1、LDAP是一個開放的標准協議,不同於SQL數據庫,LDAP的客戶端是跨平台的,並且對幾乎所有的程序語言都有標准的API接口,即使是改變了LDAP數據產品的提供廠商,開發人員也不用擔心需要修改程序才能適應新的數據庫產品,這個優勢是使用SQL語言進行查詢的關系型數據庫難以達到的。

2、由於LDAP數據庫存儲是樹狀結構,整棵樹的任何一個分支都可以單獨放在一個服務器中進行分布式管理,不僅有利於做服務器的負載均衡,還方便了跨地域的服務器部署,這個優勢在查詢負載大或企業在不同地域都設有分公司的時候尤為明顯。

3、LDAP支持強認證方式,可以達到很高的安全級別,在國際化方面,LDAP使用了UTF-8編碼來存儲各種語言的字符。

4、更靈活的添加數據類型,LDAP是根據Schema的內容定義各種屬性之間的從屬關系及匹配模式,例如在關系型數據庫中如果要為用戶增加一個屬性,就要在用戶表中增加一個字段,這在擁有龐大數量用戶的情況下是十分困難的,需要改變表結構。但LDAP只需要在Schema中加入新的屬性,不會由於用戶的屬性增多而影響查詢性能。

5、LDAP數據庫是對讀操作進行優化的一種數據庫,在讀寫比例大於7比1的情況下,LDAP會體現出極高的性能。這個特征正適合了身份認證的需要。

目前,很多公司都把LDAP和自己的產品、技術結合在一起,增加LDAP在各個領域中的有效性,這一切都來源於LDAP是一個開放的協議,很容易與其他標准協議共存。

LDAP軟件的選擇

幾乎所有大的IT廠商都有自己的商用LDAP產品,每個廠商的LDAP產品都有其特點,現在已經有了許多基於LDAP協議開服出的資源管理系統和工具,如OpenLDAP、NDS(Novell Directory Service)和ADS(Active Directory Service)等。它們已經逐漸的被使用在各個需要目錄服務的領域,並且應用的趨勢在增強。OpenLDAP是Michjgan大學發布的免費軟件,實現了LDAP v2、LDAPv3的功能並且提供源代碼,可以在大多數的Unix和Linux系統中安裝。OpenLADP與其他的商用軟件相比有很多優勢,如商用的軟件版本更新很慢,對Bug的反映速度比開源軟件差許多,OpenLDAP還包含了很多有創造性的新功能,能滿足大多數使用者的要求。OpenLDAP是開源軟件,近年來國內很多公司開發的LDAP產品都是基於OpenLDAP開發,開發者能夠直接利用它所附帶的Shell工具開發應用。這些Shell包括了查詢(ldapsearch)、修改(ldapmodify)、刪除(ldapdelete)、增加(ldapadd)等,也可以調用它提供的API來開發應用。

OpenLDAP的安裝和配置

OpenLDAP可以采用多種數據庫作為後台,包括Berkeley DB、GDBM、Mysql、Oracle等,這裡采用Berkeley DB,由於OpenLDAP需要Berkeley DB來存放數據,所以需要安裝Berkeley DB 5.2.36。Berkeley DB是一個高性能,嵌入數據庫編程庫,它由美國Sleepycat Software 公司開發的一套開放源碼的嵌入式數據庫的程序庫(database library),它為應用程序提供可伸縮的、高性能的、有事務保護功能的數據管理服務,有時也簡稱DBD。

[root@chenyi ldap]# tar zxf db-5.2.36.tar.gz
[root@chenyi dist]# cd db-5.2.36/build_unix/
[root@chenyi build_unix]# ../dist/configure --prefix=/software/BerkeleyDB.5.2
[root@chenyi build_unix]# make && make install

安裝openldap

[root@chenyi ldap]# tar zxf openldap-stable-20100719.tgz 
[root@chenyi ldap]# cd openldap-2.4.23/
[root@chenyi openldap-2.4.23]# vi /etc/profile		#添加環境變量
PATH="$PATH:/software/BerkeleyDB.5.2/lib/"
echo $PATH
CPPFLAGS="-I/software/BerkeleyDB.5.2/include/"
export CPPFLAGS
LDFLAGS="-L/usr/local/lib -L/software/BerkeleyDB.5.2/lib/"
export LDFLAGS
LD_LIBRARY_PATH="/software/BerkeleyDB.5.2/lib/"
export LD_LIBRARY_PATH
CFLAGS="-I/software/BerkeleyDB.5.2/include/ -I/usr/local/include -I/usr/include"

export CFLAGS 
LIBS="-ldb -lgcc_s"
export LIBS
[root@chenyi openldap-2.4.23]# su - root
[root@chenyi openldap-2.4.23]# ./configure --prefix=/software/openldap --enable-ldbm
[root@chenyi openldap-2.4.23]# make depend
[root@chenyi openldap-2.4.23]# make
[root@chenyi openldap-2.4.23]# make test		#此處需要較長的時間測試
[root@chenyi openldap-2.4.23]# make install

通過上面的配置命令可以看出,已將OpenLDAP安裝到/software/openldap目錄下,建議以源碼安裝的軟件都放到獨立的目錄下。別整默認,好處是方便管理及控制,這樣在卸載的時候刪除真個目錄就好了。

需要注意的幾個地方:

1、在執行Configure之前要確定安裝了Berkeley DB,雖然OpenLDAP可以使用很多數據庫做back-end,但Berkeley DB 仍然是OpenLDAP開發團隊強烈推薦的。

2、如果需要更安全的方式訪問OpenLDAP,在配置執行Configure之前要確定已經安裝了cyrus-sasl。

3、有些用戶在安裝OpenLDAP的時候忽略了最後的make test(總的來說,這個測試時間,我不想去描述了。),經驗表明,很多的錯誤都會在執行make test的過程中暴露出來,OpenLDAP的開發團隊很注意維護軟件Test Case,整個測試非常全面,很多在日常使用中很少用到的功能都會被測試到。良好的保證了軟件投入生產後的穩定性。

默認情況下OpenLDAP的配置文件保存在/etc/openldap、slapd.conf中,配置文件中記錄著OpenLDAP的管理員密碼,默認情況下密碼是明文表示的,可以用slappasswd命令產生密文來替換配置文件中的明文,配置文件的相關項應該做如下更改:

[root@chenyi openldap]# grep -v "^#" /software/openldap/etc/openldap/slapd.conf | grep -v "^$"
include		/software/openldap/etc/openldap/schema/core.schema
pidfile		/software/openldap/var/run/slapd.pid
argsfile	/software/openldap/var/run/slapd.args
database	bdb
suffix		"dc=itchenyi,dc=com"			#設置目錄樹的後綴
rootdn		"cn=Manager,dc=itchenyi,dc=com"	#該語句設置LDAP管理員的DN
rootpw		secret				#設置LDAP管理員的口令,明文原因前面已說
directory	/software/openldap/var/openldap-data
index	objectClass	eq

其中Directory參數為數據文件在服務器上的位置,處於穩定性和性能方面的考慮,數據文件最好放在獨立的分區或磁盤陣列上。配置文件的訪問控制部分也十分重要,很多讀取或修改不能正常完成都是由於訪問控制的寫法錯誤造成的,下面是供參考的訪問控制部分配置:

                  Allow self write access
                  Allow authenticated users read access
                  Allow anonymous users to authenticate
          Directives needed to implement policy:
   access to dn.base="" by * read
   access to dn.base="cn=Subschema" by * read
 
   access to *
          by self write
          by users read
          by anonymous auth

設置LDAP使用的Schema

Schema(模式)定義了LDAP中的對象類型、屬性、語法和匹配規則等,如用戶的電子郵件、聯系地址和聯系電話等屬性,它類似於關系數據庫中的表結構。 找到語句:

include /software/openldap/etc/openldap/schema/core.schema

在該語句的後面添加以下語句。

   include         /software/openldap/etc/openldap/schema/corba.schema
   include         /software/openldap/etc/openldap/schema/cosine.schema
   include         /software/openldap/etc/openldap/schema/dyngroup.schema
   include         /software/openldap/etc/openldap/schema/inetorgperson.schema
   include         /software/openldap/etc/openldap/schema/java.schema
   include         /software/openldap/etc/openldap/schema/misc.schema
   include         /software/openldap/etc/openldap/schema/nis.schema
   include         /software/openldap/etc/openldap/schema/openldap.schema

啟動OpenLDAP服務器

[root@chenyi openldap]# /software/openldap/libexec/slapd 
[root@chenyi openldap]# netstat -pant | grep slapd
tcp        0      0 0.0.0.0:389                 0.0.0.0:*                   LISTEN      25561/slapd         
tcp        0      0 :::389                      :::*                        LISTEN      25561/slapd

LDAP Account Manager強大功能 1、使用LAM,可以通過Web接口較為直觀的、簡便的管理存儲在LDAP目錄裡的用戶、用戶組和計算機系統賬戶。 2、管理Unix的用戶、用戶組、主機、域名。 3、強大的過濾和排序功能。 4、帳號屬性管理。 5、多構造屬性。 6、直觀樹狀查看模式。 7、計劃查看模式。 8、通過文件上傳創建帳號。 9、所有帳號可導出為PDF文件格式。 10、管理用戶、用戶組、配額和自動創建刪除用戶的Home目錄。 11、支持LDAP+SSL加密模式。 12、多國語言支持,如Catalan、Chinese(Traditional)等。 安裝需求 1、PHP5語言環境和Perl語言環境。 2、OpenLDAP2.0或更高版本。 3、支持CSS的網頁浏覽器。 4、Apache WebServer,建議安裝SSL、PHP-Module(PHP-Module with ldap、Gettext、XML、Mcrypt+mhash)等模塊。

安裝Openssl

[root@chenyi ldmp]# tar zxf openssl-1.0.0e.tar.gz 
[root@chenyi ldmp]# cd openssl-1.0.0e
[root@chenyi openssl-1.0.0e]# ./config --prefix=/software/ssl --openssldir=/software/openssl shared
[root@chenyi openssl-1.0.0e]# make && make test &&make install

安裝apr

[root@chenyi ldmp]# tar zxf apr-1.4.5.tar.gz 
[root@chenyi ldmp]# cd apr-1.4.5
[root@chenyi apr-1.4.5]# ./configure --prefix=/software/apr
[root@chenyi apr-1.4.5]# make && make install

安裝apr-util

[root@chenyi apr-util-1.3.12]# tar zxf apr-util-1.3.12.tar.gz
[root@chenyi apr-util-1.3.12]# cd apr-util-1.3.12
[root@chenyi apr-util-1.3.12]#  ./configure --prefix=/software/apr-util --with-apr=/software/apr/ --with-ldap-include=/software/openldap/include/ --with-ldap-lib=/software/openldap/lib/ --with-berkeley-db=/software/BerkeleyDB.5.2/ [root@chenyi apr-util-1.3.12]# make && make install

安裝Apache [這裡我多次嘗試使用2.2.29版進行編譯,但終遇到各種挫折,由於沒有得到完善的解決,所以選用了2.2.21,根據你的需要,可酌情刪減編譯參數]

[root@chenyi httpd-2.2.21]# tar zxf httpd-2.2.21.tar.gz
[root@chenyi httpd-2.2.21]# cd httpd-2.2.21
[root@chenyi httpd-2.2.21]# ./configure --prefix=/software/apache2 --sysconfdir=/etc/httpd --enable-ssl --with-ssl=/software/openssl/ --with-z=/software/zlib/ --enable-rewrite=shared --enable-static-support --enable-deflate=shared --enable-so --enable-dav --enable-dav-fs --enable-ldap --enable-authnz-ldap --with-included-apr --with-ldap --with-ldap-include=/software/openldap/include/ --with-ldap-lib=/software/openldap/lib --with-apr=/software/apr/bin/apr-1-config --with-apr-util=/software/apr-util/bin/apu-1-config
[root@chenyi httpd-2.2.21]# make && make install

安裝gettext

[root@chenyi ldmp]# tar zxf gettext-0.17.tar.gz 
[root@chenyi ldmp]# cd gettext-0.17
[root@chenyi gettext-0.17]# ./configure --prefix=/software/gettext
[root@chenyi gettext-0.17]# make && make install

加入配置庫搜索路徑

[root@chenyi gettext-0.17]# echo "/software/gettext/lib/" >> /etc/ld.so.conf && ldconfig -v
[root@chenyi gettext-0.17]# rpm -qa | grep zlib-devel 	檢測zlib-devel 如果沒安裝則yum
zlib-devel-1.2.3-27.el6.i686

添加PHP支持

[root@chenyi ldmp]# tar zxf php-5.2.6.tar.gz 
[root@chenyi ldmp]# cd php-5.2.6
[root@chenyi php-5.2.6]#  ./configure --prefix=/software/php --enable-zip --with-config-file-path=/software/php/etc --with-apxs2=/software/apache2/bin/apxs --with-libxml-dir=/software/libxml2 --with-png-dir=/software/libpng --with-jpeg-dir=/software/jpeg6 --with-freetype-dir=/software/freetype/ --with-gd=/software/gd2/ --with-ldap=/software/openldap/ --with-gettext=/software/gettext/ --with-zlib-dir=/software/zlib/ --with-mcrypt=/software/libmcrypt --enable-soap --enable-mbstring=all--enable-sockets
[root@chenyi php-5.2.6]# make && make install

創建php配置文件

[root@chenyi php-5.2.6]# cp php.ini-dist /software/php/etc/php.ini		#創建配置文件
[root@chenyi php-5.2.6]# vi /etc/httpd/httpd.conf			#修改ServerName 添加相關配置
LoadModule php5_module modules/libphp5.so			#查看是否有這一行
AddType application/x-httpd-php .php .php4 .php5 .php .phtml		#查看是否有這一行,(表示以這些擴展名結尾的文件,在apache中使用php解析器解析)。

接著重啟apache服務器,創建一個php文件訪問則可以看到結果了!這裡也沒什麼必要演示了 下載LAM壓縮包,然後解壓後修改php.ini,內容如下

[root@chenyi ldmp]# tar zxf ldap-account-manager-3.7.RC1.tar.gz
[root@chenyi ldmp]# mv ldap-account-manager-3.7.RC1 /software/apache2/htdocs/lam
[root@chenyi config]# pwd		#進入config目錄,創建配置文件
/software/apache2/htdocs/lam/config
[root@chenyi config]# cp config.cfg_sample config.cfg
[root@chenyi ~]# /software/openldap/sbin/slappasswd -s itchenyi	#使用slappasswd生成密碼
{SSHA}WakGiZTwkh5e2MD8vgy9AUf9h18l6YlG

新建ldif文件           注:ldif文件中,每一行中冒號後有一個空格,行尾一定不能有空格(同時也可以通過migrationtools這個組件來建立ldif文件)

dn: dc=itchenyi, dc=com
objectClass: dcObject
objectClass: organization
o: itchenyi Inc
dc: itchenyi
dn: cn=Manager, dc=itchenyi, dc=com
objectCalss: organizationalRole
cn: Manager
dn: ou=group, dc=itchenyi, dc=com
objectClass: top
objectClass: organizationalUnit
ou: group
dn: ou=it, dc=itchenyi, dc=com
objectClass: top
objectClass: organizationalUnit
ou: it

復制模版文件(如果沒有,你在通過-d 256 調試時可以看到顯著的錯誤)

[root@chenyi config]# cp /software/openldap/etc/openldap/DB_CONFIG.example /software/openldap/var/openldap-data/DB_CONFIG

關閉slapd進程,導入ldif文件

[root@chenyi config]# kill -INT `cat /software/openldap/var/run/slapd.pid`
[root@chenyi config]# /software/openldap/sbin/slapadd -v -l ./itchenyi.ldif

幾個常用選項: 1: -v選項表示啟用verbose模式,即輸出執行中的具體信息。 2: -l表示後面附加ldif文件。 3:-d  指定debug向日志文件輸出信息,後面跟日志級別。 4: -f  指定要讀取的配置文件。 啟動服務進程 [root@chenyi config]# /software/openldap/libexec/slapd -d 256 通過http://ip/lam 進行訪問 創建配置文件可以通過默認密碼lam 進行編輯創建

LDAP access Manager

Copyright © Linux教程網 All Rights Reserved