Linux下LDAP統一認證解決方案

企業內部須要認證的服務不少,員工須要記住不少的密碼, 即便對這些服務進行相同的密碼設置,也存在很大的安全隱患。筆者目前工做的企業就是如此,每個新員工的到來管理員都要初始化不少密碼,而這些密碼都被設置成了「888888」等弱密碼,因爲各類軟件的認證機制之間沒有使用一個統一的標準,員工沒法一次性修改全部服務的密碼,這致使不少即便是入職好久的員工都還在使用這個「衆所周知」的密碼。php

另外—個比較嚴重的問題出如今公司增長內部服務的時候,例如領導要在公司內部提供郵件服務或把現有的Proftpd 換成更高效的Vsftpd,管理員須要從新爲全部的員工初始化新的帳戶信息,對於一個有上千員工的企業來講這將是一個「災難」。html

若是能夠爲各類軟件提供一個標準的認證機制,全部軟件就能夠再也不用獨有的用戶管理方法, 而是經過這種統一的認證機制進行用戶認證,這樣就解決了目前不少企業遇到的問題。LDAP正是這樣一種標準的協議,LDAP的歷史能夠追溯到1988年,以後誕生的不少軟件基本上都支持這個協議。近年隨着企業對LDAP需求的不斷增長,絕大多數有認證機制的軟件都會首先提供對LDAP的支持。本文將介紹經過LDAP統一身份認證的方法,以簡化這種複雜的管理過程。web

LDAP概述算法

LDAP是Light weight Directory Access Protocol(輕量級目錄訪問協議)的縮寫,其前身是更爲古老的DAP協議。它是基於X.500標準的,可是很簡單,而且能夠根據須要定製。與X.500不一樣,LDAP支持TCP/IP,這對訪問Internet是必需的。LDAP的核心規範在RFC中都有定義, 大致上講LDAP協議定義了和後臺數據庫通訊的方法及客戶端軟件和LDAP協議之間的通訊標準,如圖1所示(更詳細的說明能夠參見相關的RFC文檔)。數據庫

客戶端、LDAP Server的關係
 
圖1  客戶端、LDAP Server的關係apache

在圖1中,LDAP Client指各類須要身份認證的軟件,例如Apache、Proftpd和Samba等。LDAP Sever指的是實現LDAP協議的軟件,例如OpenLDAP等。Datastorage指的是OpenLDAP的數據存儲,如關係型數據庫(MySQL)或查詢效率更高的嵌入式數據庫(BerkeleyDB),甚至是平面文本數據庫(—個txt的文本文件)。可見,OpenLDAP軟件只是LDAP協議的一種實現形式,並不包括後臺數據庫存儲。但在不少時候管理員常常將LDAP Server和DataStorage放在同一臺服務器,這樣就產生了人們一般所說的「LDAP數據庫」。雖而後臺數據庫(backend)能夠是多種多樣,但LDAP協議還規定了數據的存儲方式。LDAP數據庫是樹狀結構的,與DNS相似,如圖2所示。瀏覽器

跨國公司員工信息的樹狀邏輯結構


 
圖2 跨國公司員工信息的樹狀邏輯結構安全

在圖中,以這種方式存儲數據最大的一個好處就是查詢速度快,LDAP數據庫專門對讀操做進行了優化, OpenLDAP配合Berkeley DB可以使其讀操做的效率獲得很大提升。LDAP數據庫的樹狀結構的另外一個好處是便於分佈式的管理,有關這方面的內容將在後面有所介紹。服務器

實現思路網絡

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

修改後的認證策略


 
圖3修改後的認證策略

目前大部分主流軟件都對LDAP提供很好地支持,但因爲各類軟件對LDAP的支持程度不一樣,在作實施的時候也要區別對待。軟件對LDPA的支持能夠大概分爲兩大類:

一類是徹底支持,也就是在軟件的配置文件中加入和LDAP有關的選項就能夠完成。這種方式的好處是不須要藉助其餘的工具或軟件,由軟件的開發團隊直接完成對LDAP的支持。可能的缺陷也在此,因爲各個軟件開發團隊的水平和開發者經驗有所差別,雖然一樣是支持了LDAP,但稍微複雜一些的高級功能就沒法提供,有的時候甚至出現運行錯誤致使整個軟件出現問題。筆者曾遇到過一個基於Web的CVS瀏覽軟件,安裝文檔中說明了支持LDAP,但實際使用當中遇到了不少問題致使整個軟件crash。一些比較主流的軟件,例如Apache 2.X對LDAP的支持已經近乎完美。

另外一類軟件因爲不少緣由並不直接支持LDAP,而是經過PAM 作身份認證,因爲PAM自己支持LDAP,這樣也一樣能夠實現使用LDAP作身份認證。這種方式對LDAP的支持一樣有其優點,軟件開發人員不須要修改代碼支持LDAP協議,減小了軟件自己產生安全漏洞的可能。缺點是在一些不但願使用PAM 的系統中,這樣的軟件就沒法經過LDAP進行用戶認證,並且雖然PAM對LDAP的支持已經很完善,但一些高級、複雜的功能仍是沒法實現。正因爲這些緣由,這類軟件爲數很少,比較典型的就是Vsftpd和CVS。

使用LDAP作身份認證

介紹到這裏可能不少讀者會問爲何須要使用LDAP數據庫?用傳統的關係型數據庫不能夠嗎?從上文能夠看到,LDAP服務器就是起到了一個認證Server的做用,從技術自己而言,這個認證Server具體使用的是何種數據庫並不重要,若是使用一個關係型數據庫也能夠達到統一身份認證的目的,但LDAP 自身的優點使得不少公司最終選擇它。如下筆者列舉了一些選擇LDAP的重要緣由:

◆LDAP是一個開放的標準協議,不一樣於SQL數據庫,LDAP的客戶端是跨平臺的,而且對幾乎全部的程序語言都有標準的API接口。即便是改變了LDAP數據庫產品的提供廠商,開發人員也不用擔憂須要修改程序才能適應新的數據庫產品。這個優點是使用SQL語言進行查詢的關係型數據庫難以達到的。

◆因爲LDAP數據庫的數據存儲是樹結構,整棵樹的任何一個分支均可以單獨放在一個服務器中進行分佈式管理,不只有利於作服務器的負載均衡,還方便了跨地域的服務器部署。這個優點在查詢負載大或企業在不一樣地域都設有分公司的時候體現尤其明顯。

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

◆更靈活添加數據類型,LDAP是根據schema的內容定義各類屬性之間的從屬關係及匹配模式的。例如在關係型數據庫中若是要爲用戶增長一個屬性,就要在用戶表中增長一個字段,在擁有龐大數量用戶的狀況下是十分困難的,須要改變表結構。但LDAP只須要在schema中加入新的屬性,不會因爲用戶的屬性增多而影響查詢性能。

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

目前,不少公司都把LDAP和本身的產品、技術結合在一塊兒,增長LDAP在各個領域中的有效性,這一切都來源於LDAP是一個開放的協議,很容易和其餘標準協議共存。

LDAP軟件的選擇

目前,幾乎全部大IT廠商都有本身商用的LDAP產品,每一個廠商的LDAP產品都有其特色,不少時候用戶更多地選擇開源的OPenLdap。
OpenLDAP與其餘的商用軟件相比有不少優點, 商用的軟件版本更新很慢,對Bug的反應速度比開源軟件差許多,OpenLDAP還包含了不少有創造性的新功能,能知足大多數使用者的要求。筆者曾使用過許多商用LDAP產品,OpenLDAP是其中最輕便且消耗系統資源最少的一個。OpenLDAP是開源軟件,近年國內不少公司開發的LDAP產品都是基於OpenLDAP開發的。

OpenLDAP的源代碼能夠到官方網站(http://www.openldap.org)下載,安裝過程也很簡單。因爲openldap須要Berkeley DB來存放數據,因此需先安裝Berkeley DB 4.4.20,可到它的網站下載,網址見上。

# tar -zxvf db-4.4.20.tar.gz

解完壓後,會生成一個db-4.4.20目錄,進入該目錄下的build_unix目錄。執行如下命令進行配置安裝。
 
# ../dist/configure
# make
# make install
# tar -zxvf openldap-stable-20090411.tgz

解壓完成後,會生成一個openldap目錄。進入該目錄,執行如下命令進行配置安裝。

#env CPPFLAGS="-I/usr/local/BerkeleyDB.4.2/include" LDFLAGS="-L/usr/local/BerkeleyDB.4.4/lib" ./configure -prefix=/usr/local/openldap --enable-ldbm

注意以上配置語句,要設置資料庫的include和lib路徑,不然在配置到資料庫相關內容時會提示Berkeley DB版本不兼容,並中斷配置。若是沒有--enable-ldbm選項,在make test時會提示ldbm找不到。爲了減小出錯,仍是加上爲好。

#make depens
#make
#make test

在make test階段要花費較長時間進行測試,好像有16項吧。你能夠放鬆一下,這個時間應該是最緊張的了。

#make install

經過配置命令能夠看出,咱們把openldap安裝到/usr/local/openldap目錄下。建議以源碼安裝的軟件都放到獨立的目錄下,不要放到軟件默認的目錄。好處是方便管理和控制,全部文件在統一的目錄下,卸載軟件只要刪除整個目錄就能夠了。在此過程當中須要注意以下幾個地方:

◆在執行configure以前要肯定安裝了Berkeley DB,雖然OpenLDAP可使用不少數據庫作back-end,但BerkeleyDB仍然是OpenLDAP開發團隊強烈推薦的。

◆若是須要更安全的方式訪問OpenLDAP,在配置執行configure以前要肯定已經安裝了cyrus-sasl。

◆有些用戶在安裝OpenLDAP的時候忽略了最後的make test。經驗告訴咱們,不少的錯誤都會在執行make test的過程當中暴露出來,OpenLDAP的開發團隊很注意維護軟件的Test Case, 整個測試很是全面,不少在平常使用中不多用到的功能都會被測試到,很好的保證了軟件在投入使用之後的穩定性。

默認狀況下,OpenLDAP的配置文件保存在/usdlocal/etc/openIdap下的sIapd.conf中,配置文件中記錄着OpenLDAP的管理員密碼。默認狀況下密碼是用明文表示,能夠用slappasswd命令產生密文替換配置文件中的明文。以圖3爲例,配置文件的相關項應作以下更改:
Suffix  「dc=ldap_abc,dc=org」
Rootdn  「cn=manager,dc=ldap abc,dc=org"
directory  /usr/Iocal/var/openldap-data

其中directory參數爲數據文件在服務器上的位置,出於穩定性和性能方面的考慮,數據文件最好放在獨立的分區或磁盤陣列上。配置文件的ACL部分也十分重要,不少讀取或修改操做不能正常完成都是因爲ACL的寫法錯誤形成的。下面是默認狀況下ACL部分的配置:
Access to attrs=userPassword
By self write
By * auth
Access to *
By * read

輕鬆搞定LDAP帳號管理

在這裏筆記告訴你們使用PHP語言開發基於Web的LDAP管理器,並着重分析該管理器中類屬性與對象類的繼承關係、修改過程的遞歸關係時所用到的相關技術及相關算法,使得咱們在使用和管理LDAP帳號等方面變得更爲簡便。

LDAP Account Manager(LAM)採用PHP 4/5編寫,是基於Web的LDAP用戶、用戶組、主機和LDAP目錄的管理系統,管理員能夠經過SSUTLS加密方式進行操做,加強了安全性。LAM支持管理的帳號類型有Samba 2/三、Unix、Kolab 二、地址簿接口和計算機管理須要的信息,包括NIS映射、Email假名、MAC地址等。

1)LDAP Account Manager的強大功能

◆使用LAM,能夠經過Web接口較爲直觀的、簡便的管理存儲在LDAP 目錄裏的用戶、用戶組和計算機系統帳戶。

◆能夠管理Unix的用戶、用戶組、主機、域名。

◆具有強大的過濾和排序功能。

◆具備帳號屬性管理。

◆多構造屬性。

◆直觀的樹狀察看模式。

◆計劃查看模式。

◆開放式的編輯器。

◆經過文件上傳建立帳戶。

◆全部帳號可導出爲PDF文件格式。

◆能夠管理用戶、用戶組、配額和自動建立,刪除用戶的Home 目錄。

◆支持LDAP+SSL加密模式。

◆多國語言支持,如Catalan、Chinese(Traditional)、Dutch、English、French、German、Hungarian、Italian、Japanese和Spanish等。

2)安裝需求

◆PHP4/5語言環境和Perl語言環境

◆Openldap2.0或更高版本

◆支持CSS的網頁瀏覽器

◆Apache webserver,建議安裝SSL、PHP-Module(PHP-Module with ldap,gettext,XML,mcrypt+mhash)等模塊。

3)安裝和使用

首先從http://lam.sourceforge.net/下載LAM壓縮包,解壓縮並修改PHP的配置文件php.ini的以下內容:

* memory_limit=64M

接下來複制文件到Web服務器的html-file目錄中,如apache/htdocs,並給下面的文件設置合適的讀寫權限:

◆-lam/sess:設置給apache用戶寫權限;

◆-lam/tmp:設置給apache用戶寫權限;

◆-lam/config:(包括子目錄)設置給Apache用戶寫權限;

◆-lam/lib lamdaemon.pl:必須設置爲可執行權限。

而後配置conflg.cfg文件,建立一個配置屬性,設置密碼,並複製config.cfg_到配置目錄。最後,在瀏覽器中打開index.html,在Configuration Login處可使用默認密碼「lan」登陸進行相關操做,如圖4所示。

ldap安裝和使用


 
圖4

4)配置管理LAM

成功登陸進入LAM 系統後,經過網頁的形式對咱們的LDAP進行管理就變得十分的直觀和簡單了,經過鼠標點擊就能夠輕鬆查看和管理咱們的LDAP,還能夠在線編輯和數據導出。在LAM 系統中,咱們主要能夠進行以下的操做:

◆LAM系統配置LAM的具體配置,如圖5所示。

LAM系統配置LAM的具體配置


 
圖5

◆LAM模塊選擇和管理:讓LAM 列出用戶信息。

◆修改用戶信息,在LAM 中查看和修改用戶屬性,如圖6所示。

LAM 中查看和修改用戶屬性


 
圖6

不只如此,LAM的管理功能十分全面, 還能夠對用戶進行不少操做,如列出用戶組信息、列出所管理的服務器主機信息、經過文件上傳方式建立用戶、樹狀查看方式、SAMBASAM信息查看修改、開放式在線編輯模式和LDAP信息PDF文件格式輸出等,對於系統管理員來講實在是太方便了。

配置Apache支持LDAP

雖然各類軟件支持LDAP的方法有兩種,但本質上是同樣的,只是一些軟件但願自主開發LDAP的支持,另外一些軟件使用PAM已經開發好的LDAP支持。任何一個軟件要經過LDAP作用戶認證,至少要在軟件的配置文件中提供兩個認證所須要的信息,一個是LDAP服務器的IP地址,另外一個是須要認證的用戶在LDAP數據庫中的位置。前面提到過,LDAP數據庫是和DNS相似的樹狀結構,每一個用戶做爲葉子節點被放置在這棵樹上,而這些用戶的父節點就是認證所要提供的用戶在LDAP數據庫中的位置。如圖3所示,若是要給亞洲地區市場部的全部員工提供FTP登陸帳號,須要提供的用戶在LDAP數據庫中的位置就是「ou=Sales,I=Asia,o=ldap_ abc.org」。下面以Apache爲例介紹一下軟件的配置。

Apache和LDAP整合能夠用來限制用戶以HTTP方式訪問文件的權限,Apache使用LDAP作用戶認證有不少現實意義,首先能夠限制用戶對公司內部HTTP敏感內容的訪問。此外,不少版本管理軟件(如Subversion)都提供了LDAP支持,這樣在用戶須要經過Web方式訪問文件的時候,能夠經過Apache的設置來限制用戶對文件的訪問權限。Apache是從2.0.41之後纔開始支持 LDAP的,若是但願使用LDAP作身份認證就要安裝Apache 2.0.41以上的版本,企業版本的Red Hat AS 3/4/5默認安裝的Apache2.0就已經把L DAP相關的模塊進行了編譯,用戶只需正確修改Apache的配置文件就能夠支持L DAP認證。

下面代碼是對保護目錄/var/www/htm/internal設置了必定權限。
<Directory /var/www/html/internal>
AuthName 「WeIcome to Linux"
AuthLDAPEnabled on
AuthLDAPURL ldap://192.168.1.2/ou=Sales,I=Asia,o=ldap_abc.org?uid
 Require valid-user
</Directory>

◆AuthName是可選項,用戶在訪問受保護目錄的時候,瀏覽器會彈出—個提示窗口,要求輸入用戶名和密碼,AuthName設置的內容會出如今彈出窗口的標題欄(此項內容支持中文)。

◆AuthLDAPEnabled是可選項,默認值爲on。當已經把目錄/var/www/htm/intemal設置爲須要認證,但又須要將var/www/htm/internal/pub目錄設置爲公開時,就能夠將此項設置成off。

◆AuthLDAPURL爲必填項,192.168.1.2即爲LDAP服務器的IP地址,ou=SaIes,I=Asia,o=ldap abc.org爲用戶在LDAP數據庫中的位置,uid表示使用每一個用戶uid屬性的值做爲認證過程當中使用的用戶名。

◆require valid-user表示只有認證成功的用戶才能訪問指定的資源。LDAP樹結構的設計下面用一個實際的案例簡單介紹一下樹結構的設計。某上百人的IT企業,總公司設在北京,且在上海、廣州設有分部,公司的市場部、開發部、管理部及人力資源部在三個城市都有分部,公司要求全部員工天天更新本身在這一天內的工做成果,併爲每一個員工設有企業內部的FTP共享空間,程序開發人員使用CVS提交代碼,公司內部有多臺Linux服務器,只容許有權限的帳號登陸。

員工使用到上述服務的時候須要進行身份認證。在這樣的狀況下,既能夠選擇購買幾臺昂貴的數據庫服務器,裝上大型的商業數據庫來解決這個問題;也能夠選擇更廉價且高效 的辦法,使用開源軟件的解決方案。首先要考慮的是數據的拓撲,根據企業的須要作數據庫設計是關鍵。公司在北京、上海和廣州設有分公司,若是數據庫服務器只存放在一個城市,在網絡流量高峯期會影響認證速度,下降員工的工做效率,所以數據庫設計能夠有如下兩種方案:一種是把主LDAP服務器放在北京,同時在上海和廣州同時放有LDAP服務器,相似於DNS的區域受權,總公司把上海和廣州員工的管理下放,各地的員工經過本地的LDAP服務器進行認證,既提升了效率,又保證了服務器出現問題都不會影響到其餘兩個城市的認證服務。這種數據庫設計並非把公司的全部員工割裂成了沒有聯繫的三個部分。
如圖7所示,三臺服務器上的LDAP分支是在同一棵樹上經過相似於「引用」的特殊屬性鏈接在一塊兒的,三個城市都有本身的管理員來維護各自的分支。三臺服務器鏈接在一塊兒有不少好處,在須要搜索或查詢公司全部員工信息的時候就會十分方便。若是某個城市的員工較多或負載太重還能夠在這個城市增長LDAP服務器,增長的服務器就如同本地服務器的鏡像,能夠起到負載均衡的做用。須要注意的是,在這個設計方案裏每一個LDAP服務器都是能夠讀寫的。

樹結構的設計


 
圖7 樹結構的設計

另外一種方案是在北京存放一臺主LDAP服務器,同時在北京、廣州和上海三個城市分別放置一臺輔LDAP服務器。主LDAP服務器只負責寫入數據,輔LDAP服務器只讀,任何數據庫的修改都要先寫入主LDAP服務器以後再同步到三個輔LDAP 服務器,這樣的拓撲結構也比較適合認證服務器的須要,由於寫操做相對於讀操做更少,這種設計的優點在於能根據員工的多少或各分公司的負載狀況靈活增長或減小服務器,任何一臺輔LDAP服務器的癱瘓都不會影響到整個認證系統。在國外的一些案例中,輔LDAP服務器會多達幾十甚至上百臺。但這種設計也有缺陷, 若是主LDAP出現問題,那麼全部的寫操做就會受到影響, 目前OpenLDAP還不支持多個主LDAP 服務器的狀況,由於設置多個主LDAP服務器有可能會形成整個數據的不一致, 只有少數商用的LDAP 支持多主LDAP的功能。

統一身份認證的將來

在國外,LDAP應用於身份認證已經十分紅熟,最近幾年國內纔開始逐漸流行起來。前面提到的認證方式還存在一些不足,例如用戶在使用FTP服務後,若是再使用Samba服務就須要再次輸入用戶名和密碼,目前微軟的Active Directory經過管理域用戶已經完美的實現了單點登陸,Linux能夠經過OpenLDAP和Samba實現大部分Active Directory可以實現的功能。相信在不久的未來,用LDAP作身份認證的技術還會滲透到更多領域,包括網絡計算機、門禁系統,甚至智能IC卡的應用。

原文地址:http://www.cangfengzhe.com/wangluoanquan/3.html
相關文章
相關標籤/搜索