LDAP基礎知識
1. LDAP介紹 2. LDAP數據結構 3. LDAP數據推送 4. Windows域環境中的LDAP 5. 使用域環境中的LDAP認證WEB應用 6. 參考資料 |
1. LDAP介紹
LDAP - LIGHT DIRECTORY ACCESS PROTOCOL,是輕型目錄訪問協議,它具備以下特徵
- 像電話簿,並專門針對查詢進行了優化
- 採用樹型結構進行存放,一個葉子結點爲一條記錄
- 針對以下數據的存儲是相當有效的,公司員工資料與組織結構、客戶資料、計算機管理相關信息、軟件包配置信息、公鑰證書與密鑰等,也正是因爲它的這些特點,LDAP也被微軟活動目錄用作組織企業計算機、員工、策略、資源等的手段之一,稍後對LDAP的講解也將基於Windows AD進行
2. LDAP數據結構
1)DN組成以及其標識
- DN, 分發名稱組件,一個索引,也相當於目錄,如果要訪問目錄中的數據,必需先查找索引
- o, 企業名稱
- c, 國別碼
- DC, 域名組件,表示DC後的內容爲域名的一部份,如"DC=COMPUS,DC=COM"
- OU, 組織單位組件,表示後面的內容一個組織單位名稱,如"人事部","計算機"等
- CN, 通用名稱組件,一般名稱,可以表示一個對象,也可以表示存儲一個存儲數據的組,需要看它在DN中的位置
- BASE-DN, 基準DN,前面已經說過,LDAP的數據作爲樹形結構進行存儲,這個BASE-DN就是樹根了,企業中所有的數據都必須存儲到樹根下面,BASE-DN的標準結構有兩種,一種採用企業名稱作爲BASE-DN, 比如,<o="LT,CO,LTD",c=CN>可以表示藍天有限公司,國家在中國,另外也可以使用標準的域名作爲企業的BASE-DN, 比如,<dc=sina,dc=com,dc=cn>可以表示新浪內部資料庫
2)DN舉例
··前面已經說過,DN就相當於一個目錄(或者說路徑),就像在操作系統中,我如果想查看/DATA/COMPANY/Customer.csv文件的內容,我就必須定位/DATA/COMPANY/Customer.csv這個文件,而它的內容就相當於一個記錄,同樣道理,在LDAP中採用一種叫作分發名稱的結構對數據進行索引,爲了方便理解,現列舉幾個WINDOWS域環境中的幾個常用的DN
··"CN=USERS,DC=CAMPUS,DC=COM" 記錄了域環境中所有的用戶以及其相關信息,該索引在LINUX系統中就相當於/etc/passwd,/etc/shadow文件
··CN=COMPUTERS,DC=CAMPUS,DC=COM 記錄了域環境中所有的計算機相關信息,在LINUX系統中相當於/etc/hosts文件
··CN=GROUPS,DC=CAMPUS,DC=COM => /etc/groups 記錄了域環境中所有的用戶組
3) 記錄
; 記錄就相當一個文件具體的內容,但對於LDAP來,具有一定的格式,以下是個合格的記錄格式
- -----------------------------
- objectClass: top
- objectClass: person
- objectClass: organizationalPerson
- objectClass: user
- objectClass: computer
- cn: sys
- distinguishedName: CN=sys,CN=Computers,DC=campus,DC=com
- instanceType: 4
- whenCreated: 20110801145206.0Z
- whenChanged: 20110807060858.0Z
- uSNCreated: 28792
- uSNChanged: 29059
- name: sys
- objectGUID: c30356dc-c16a-4839-a6a5-f7ba41bee3fc
- userAccountControl: 69632
- badPwdCount: 0
- codePage: 0
- countryCode: 0
- badPasswordTime: 0
- lastLogoff: 0
- lastLogon: 129572557781972500
- localPolicyFlags: 0
- pwdLastSet: 129571709386957500
- primaryGroupID: 515
- objectSid: S-1-5-21-3860249643-2907460077-2127510712-1123
- accountExpires: 9223372036854775807
- logonCount: 40
- sAMAccountName: sys$
- sAMAccountType: 805306369
- dNSHostName: sys.campus.com
- servicePrincipalName: HOST/sys.campus.com
- servicePrincipalName: HOST/SYS
- objectCategory: CN=Computer,CN=Schema,CN=Configuration,DC=campus,DC=com
- isCriticalSystemObject: FALSE
- -----------------------------
; 哇,好複雜……,不過不用怕,其實其關鍵也就是由一組組"Key:Value"組成的而已,我們知道,要表達出一個對象的特徵,我們就要用很多組這樣的"K:V"對,比如,要描述一頭豬的樣子,我們可以說他有四條腿,兩隻長耳朵,兩隻眼睛,這樣我們的記錄就可以寫成
- -----------------------------
- DN: OU=3號豬圈, O=華陽養豬場, C=中國
- 類別: 大沙文豬
- 編號: 9527
- 眼睛: 2
- 腿: 4
- 耳朵: 2
- 耳朵形狀: 長
- -----------------------------
這樣我如果要找一頭編號爲9527的豬,就要先到華陽養豬場……,貌似走遠了
寫了這麼多,我其實就想說一條記錄的組成,其實很簡單,僅此而已,我們的數據檢索,也就是查找這些"PV"對而已,當然爲了這個記錄能夠跟國際接軌,有一些字段是不能被省略的,就像全世界的人都有2條腿(呃)一樣
3. LDAP服務器數據推送
; 事實上,一個企業可能有多個分支機構,而每個分支機構也可能有自己的LDAP服務器,那麼在企業中,這些LDAP服務器數據是怎樣進行同步的呢,總結起來,同步的方式就兩種,推(PUSH),拉(PULL)
- PUSH, LDAP服務器每隔一段時間就會將自己的服務器傳送到企業中其它的LDAP服務器中
- PULL, LDAP服務器每隔一段時間把其它LDAP服務器內容下載到本機
4. 域環境中的LDAP
我們知道,國際標準中的LDAP查詢是不需要用戶名與密碼的,但是你知道,我們要介紹的是微軟,所以,就有點特殊了-對微軟的LDAP,也即域控進行查詢操作時,需要進行一次綁定操作綁定一個合法用戶才能進行查詢操作,稍後我們講學習如何進行綁定操作以及進行查詢
注意,進行以下的操作先假設你已安裝好兩臺虛擬機,一臺Windows Server 2003,其IP地址爲10.0.0.4,一臺CentOS 5.5 Final,其IP地址爲10.0.0.1,再假設Server2003域控(其域爲CAMPUS.COM)部署完成且CENTOS已經加 入到域中,什麼,你不會?請參考文章末尾的參考資料…… |
1)探索Windows Active Directory中數據與LDAP結構的關係
我們先按"Windows+R"鍵,然後輸入"MSTSC",然後連接我們的域控制器,輸入憑據,登錄,如下圖,我們已經連接到控制器並打開"Active Directory 用戶和計算機",圖1
現在我們新建一個組織單位,Linux,好現在我們查看LINUX這個組織單位在LDAP中是怎麼表示的,請看(正點)
- $ ldapsearch -x -b "dc=CAMPUS,dc=COM" \
- -D "CAMPUS\cc" -w "MYPASS" \
- -h 10.0.0.4 | less
然後我們輸入"/Linux"(不含引號,如圖2),我們就看到了他的DN,也就是路徑爲:OU=Linux,DC=CAMPUS,DC=COM
也就是說,我們查找所有組織單位爲LINUX的元素的話,就可以通過以下命令進行查找了,如下
- $ ldapsearch -x -b "OU=Linux,dc=CAMPUS,dc=COM" \
- -D "CAMPUS\cc" -w "MYPASS" \
- -h 10.0.0.4 | less
因爲我們沒有在Linux這個組織單位中添加任何東西,所以我們就只能查到它的TOP目錄了(就相當於文件路徑中的當前目錄了),見圖3
等等,貌似我應該對"LDAPSEARCH"這個命令進行一下解釋。
- ldapsearch這個命令位於軟件包OPENLDAP,可以使用"yum install openldap"進行安裝
- "-x"指明進行簡單認證,後面的"-D"以及"-w"指明其用戶名與密碼,說明,"-D"選項指定的用戶名可以採用下列2種格式之一,"短域名\用戶名","用戶名@域名",在WINDOWS系統中,它分別表示NT4格式的登錄名以及新版的登錄名,最好採用EMAIL格式的登錄名進行綁定
- "-h"指明LDAP服務器地址
好了通過同樣的方法,我可以找到我們的用戶名所在的目錄了。
5. 使用WINDOWS LDAP服務器認證LINUX WEB服務
上面我們已經講了怎樣對ACTIVE DIRECTORY中的數據進行查找,那我們怎樣將它的數據用於我們偉大的LINUX的認證事業呢,馬上揭曉
1)項目目標,根據業務需要我們在CENTOS環境下搶建了一個內部CMS系統,爲了避免重複地構建密碼數據庫以及企業員工反覆註冊帶來的多餘工作,現在決定對此CMS實施基本身份認證,其數據源爲企業中已部署好的ACTIVE DIRECTORY數據庫
2)目標實現
既然要採用LDAP進行認證,我們必須在APACHE中加載mod_authz_ldap.so認證模塊然後修改CMS主機的配置文件
$ vi /etc/httpd/conf/httpd.conf
- --------------------------
- <VirtualHost *:80>
- DocumentRoot /DATA/www/default
- ServerName: www.CAMPUS.COM
- <Directory "/DATA/www/default/CMS">
- AuthName Enterprise Member Authentication
- AuthType Basic
- AuthzLDAPMethod ldap
- AuthzLDAPAuthoritative on
- AuthzLDAPServer x.x.x.x:xxx
- AuthzLDAPUserBase OU=SS,DC=CAMPUS,DC=COM
- AuthzLDAPUserScope subtree
- AuthzLDAPUserKey sAMAccountName
- AuthzLDAPBindDN [email protected]
- AuthzLDAPBindPassword xxx
- Require valid-user
- </Directory>
- </VirtualHost>
- --------------------------
; 說明: 對OU爲SS,所在域爲CAMPUS.COM的用戶提供認證
; 如果要爲Users中的對象進行認證,要使用下列命令
; AuthzLDAPUserBase CN=Users,DC=CAMPUS,DC=COM
; AuthzLDAPUserScope subtree
; 如果用戶DN爲 "CN=xxxx,OU=xxx,DC=CAMPUS,DC=COM" 而你的BASE爲 "OU=xxx,DC=CAMPUS,DC=COM"你的"AuthzLDAPUserScope"就該是"subtree"
; BASE的情況是針對一個用戶進行認證的情況
;“AuthzLDAPUserBase"選項只能是一個
; 可以使用"net ads search 'SAMACCOUNTNAME=xxx'來確認其DN
; 關於APACHE基本身份認證的的內容請參閱APACHE基本認證的相關內容
現在我們重新APACHE服務
$ service httpd restart
測試
圖4、彈出基本認證對話框
圖5、認證成功,用戶名爲CC
6. 參考資料
* LINUX加入域的那些兒
* 將LINUX加入到WINDOWS域
* APACHE基本認證
後記:本文由"馮曉天"於2011年8月21日發表於"51CTO",稍後會提供本文件PDF文檔上傳,此信息與文章內容爲一整體,請不要修改或者刪除,打字不容易,寫文章更難,謝謝合作。 |