最近在弄郵件系統(tǒng)二次開發(fā),mirapoint實(shí)現(xiàn)群組功能有兩種方法,最后決定使用LDAP來實(shí)現(xiàn)。找了很多LDAP相關(guān)的文章,覺得下面這篇文章講得淺顯易懂,轉(zhuǎn)過來備用。
-------------------------------------------------------------------------
理解與應(yīng)用LDAP服務(wù)器
(前段時(shí)間一直在做LDAP+POSTFIX相關(guān)項(xiàng)目,先把關(guān)于LDAP的一些經(jīng)驗(yàn)寫出來,一來可能會(huì)幫助一些人,二來對我自己所學(xué)知識(shí)也是一個(gè)鞏固。)
先聲明:我寫的只是我對LDAP的一些理解,如果我的理解錯(cuò)誤,那就是對兄弟們的誤導(dǎo)。所以你可以直接看文章的結(jié)尾提供的幾個(gè)網(wǎng)址。
關(guān)于LDAP的概念隨便網(wǎng)上有很多,我不想重復(fù),這里只是說一下我自己的理解。
都說它是“輕量級(jí)目錄協(xié)議”,太專業(yè),我不懂,我只把它想象成“簡單”的目錄協(xié)議。
幾個(gè)很重要的概念,以后會(huì)用到:
---------------------------------------------
dn :一條記錄的位置
dc :一條記錄所屬區(qū)域
ou :一條記錄所屬組織
cn/uid:一條記錄的名字/ID
---------------------------------------------
實(shí)際上更多時(shí)候我只把它看成數(shù)據(jù)庫。我把它和我非常熟悉的MYSQL數(shù)據(jù)庫做比較,通常會(huì)得到更好的理解:
MYSQL用“表”儲(chǔ)存數(shù)據(jù),LDAP用“樹”
MYSQL指定一條記錄要3個(gè)條件:DB、TABLE、ROW。
LDAP卻更自由,為什么呢?因?yàn)長DAP數(shù)據(jù)是“樹”狀的,而且這棵樹是可以無限延伸的,假設(shè)你要樹上的一個(gè)蘋果(一條記錄),你怎么告訴園丁它的位置呢?當(dāng)然首先要說明是哪一棵樹(dc,相當(dāng)于MYSQL的DB),然后是從樹根到那個(gè)蘋果所經(jīng)過的所有“分叉”(ou,呵呵MYSQL里面好象沒有這 DD),最后就是這個(gè)蘋果的名字(uid,記得我們設(shè)計(jì)MYSQL或其它數(shù)據(jù)庫表時(shí),通常為了方便管理而加上一個(gè)‘id’字段嗎?)。好了!這時(shí)我們可以清晰的指明這個(gè)蘋果的位置了,就是那棵“歪脖樹”的東邊那個(gè)分叉上的靠西邊那個(gè)分叉的再靠北邊的分叉上的半紅半綠的……,暈了!你直接爬上去吧!我還是說說LDAP里要怎么定義一個(gè)字段的位置吧,樹(dc=waibo,dc=com),分叉(ou=bei,ou=xi,ou= dong),蘋果(cn=honglv),好了!位置出來了:
dn:cn=honglv,ou=bei,ou=xi,ou=dong,dc=waibo,dc=com
一個(gè)有名的畫家說過:“世上沒有相同的2個(gè)雞蛋”。當(dāng)然也沒有相同的2個(gè)蘋果……,同樣,在LDAP里也不可能存在2個(gè)相同的dn。
LDAP數(shù)據(jù)填充原理:
一棵樹的生長,要循序漸進(jìn),如果還沒有長出某個(gè)分叉,就不可能在那個(gè)分叉里長出蘋果(問:FT!蘋果是長在分叉上的嗎?答:為了便于理解,你就當(dāng)它是吧),同樣,LDAP數(shù)據(jù)庫也要一步步的充實(shí),舉一個(gè)學(xué)校數(shù)據(jù)庫的例子,我們將要把一個(gè)龐大的學(xué)生檔案放到LDAP里,大致需要這么做:
---------------------------------------------
1、建立“樹根”,這是通過修改“slapd.conf”來實(shí)現(xiàn)的,由于現(xiàn)在的目的是理解,所以具體步驟就不說了,反正就是在這一步建立了一個(gè)“dc= ourschool,dc=org”這樣一個(gè)“樹根”。注意:我把它理解成“目錄”,或者“容器”,甚至它本身也是文件(蘋果)的特殊形式,熟悉LINUX文件系統(tǒng)的朋友會(huì)更容易理解。
2、建立18個(gè)系,分別是“dn:ou=computer,dc=ourschool,dc=org”、“dn:ou=film,dc=ourschool,dc=org”……
3、當(dāng)然是在每個(gè)系里面建立專業(yè),比如“dn:ou=linux,ou=computer,dc=ourschool,dc=org”……
4、(開始長蘋果吧!)加學(xué)生嘍——“dn:cn=stan,ou=linux,ou=computer,dc=ourschool,dc=org”……
5、已經(jīng)完成了嗎?對了!學(xué)生的詳細(xì)信息還沒有吶!不過先這樣吧,反正記錄是可以編輯的。
---------------------------------------------
LDAP記錄的詳細(xì)信息
dn:cn=stan,ou=linux,ou=computer,dc=ourschool,dc=org
objectClass:organizationalPerson
cn:stan
cn:小刀
sn:小刀
description:a good boy
(以上是一條記錄的信息,如果把他保存成LDIF文件,可以導(dǎo)入到LDAP數(shù)據(jù)庫中)
上面不是說沒有學(xué)生詳細(xì)信息嗎?怕你著急,就馬上寫出來了,只是還沒有導(dǎo)入到LDAP里,那是以后的事。這里我先就你可能會(huì)產(chǎn)生的疑問做回答。
---------------------------------------------
Q1:“cn”不是在“dn”里定義了嗎,怎么又在后面重新定義了? 答:你要把“cn=stan,ou=linux,ou=computer,dc=ourschool,dc=org”看成是一個(gè)整體,它只是屬性dn的值。
Q2:怎么后面有2個(gè)“cn”,我以哪個(gè)為準(zhǔn)? 答:區(qū)別于普通數(shù)據(jù)庫,LDAP每個(gè)屬性一般可以具有多個(gè)值,這樣不好嗎?你在學(xué)校數(shù)據(jù)庫里找我的時(shí)候,只要記得我的一個(gè)cn就可以了,用“cn=stan”或“cn=小刀”都可以找到我!
Q3:就這些屬性了嗎?我都不知道你是男是女。 答:先聲明,偶是男地。 LDAP對記錄的屬性做了嚴(yán)格的限制(這一點(diǎn)我不太喜歡),也就是說,你可以用哪些屬性,哪些屬性不能為空,哪些屬性最多只能有一個(gè)值等,他們都給你規(guī)定好了。幸好你有選擇的權(quán)利,比如這次我們是儲(chǔ)存學(xué)生信息,那么我們就定義一個(gè)“objectClass:organizationalPerson”,這樣 “organizationalPerson”這個(gè)類所規(guī)定的所有屬性我們都可以用了,而且確實(shí)很適合我們。雖然這個(gè)類中沒有“sex”這個(gè)屬性,不過你完全可以用一個(gè)“空閑”的屬性來頂替。如果我們能自己建立“類”就更好了,但目前我還沒有時(shí)間去研究這個(gè)東西,我也期望高手指點(diǎn)啊
---------------------------------------------
好了!看到我貼的圖了嗎?那是我偷別人的,差不多能用我就不自己畫了
##############################################################
關(guān)于安裝配置LDAP,使之儲(chǔ)存系統(tǒng)用戶,這里有一個(gè)非常好的網(wǎng)址,如果你的英文不是很差,都應(yīng)該做的來,我偷個(gè)懶,就先不寫這方面的東西嘍:
http://www.mandrakesecure.net/en/docs/ldap-auth.php
上面的方法我已經(jīng)試過,是可行的,如果兄弟們配置的時(shí)候出現(xiàn)問題我們可以討論討論。
關(guān)于LDAP+POSTFIX,POSTFIX里的“LDAP_README”中介紹的很詳細(xì),我再說就是重復(fù)了。
##############################################################
其它相關(guān)資源:
yala (很實(shí)用的數(shù)據(jù)庫操作工具,簡單的說,他就是MYSQL的phpmyadmin,自己找下載地址吧~)
http://www.openldap.org/ (說實(shí)話,我一直沒用上它,不過它是官方網(wǎng)站,不提也不好)
http://ldap.akbkhome.com/ (什么‘類’下面有什么‘屬性’,在這里找)
關(guān)于LDAP的補(bǔ)充
--------------------------------------------------------------------------------
LDAP就是 light DAP, 輕量級(jí)目錄訪問協(xié)議, 可以想象 還有一個(gè)DAP,
70年代誕生的DAP協(xié)議基于 X.400目錄訪問協(xié)議。主要用于 大型主機(jī),因?yàn)橛写罅坎怀S玫墓δ芏疫@些不用的功能消耗了過多的系統(tǒng)資源,雖然極強(qiáng)大,但是應(yīng)用不廣, 所以出現(xiàn)了LDAP.
這是一個(gè)開放的協(xié)議, 具體的實(shí)現(xiàn)有 Netscape LDAP, Novell NDS, MS AD等等,這3個(gè)是使用最廣,影響最大的。
Netscape LDAP server主要使用在unix或類unix系統(tǒng)上, MS AD自然只能在windows上, NDS是唯一一個(gè)跨平臺(tái)的產(chǎn)品。注意: LDAP本身是平臺(tái)無關(guān)的。
工作原因,比較熟悉NDS, AD最熟。我個(gè)人最喜歡NDS,AD當(dāng)然最簡單,但是最不穩(wěn)定,最亂,而且比較耗資源。
樓主說的類似數(shù)據(jù)庫,完全正確,因?yàn)樗揪褪菙?shù)據(jù)庫,只是不是關(guān)系型的數(shù)據(jù)庫,它是鏈?zhǔn)綌?shù)據(jù)庫,詳細(xì)細(xì)節(jié)可以找本數(shù)據(jù)庫原理,很詳細(xì)的。
和關(guān)系數(shù)據(jù)庫一樣, LDAP內(nèi)能夠定義哪些對象,每個(gè)對象可以有什么屬性,每個(gè)屬性可以取什么樣的值,這樣一個(gè)框架結(jié)構(gòu)被稱為Schema,它是類,對象,屬性的集合。類又分為抽象類(只能做父類,不能實(shí)例化)和結(jié)構(gòu)類(可以實(shí)例化),編程的朋友會(huì)發(fā)現(xiàn)和面向?qū)ο蟮木幊痰母拍钔耆粯印?
舉例: LDAP內(nèi)必須先有user類, 然后用user類創(chuàng)建user對象(一般缺省有的),我們才能創(chuàng)建具體的用戶賬號(hào)(實(shí)例化), schema中user對象被指定了有哪些屬性,我們創(chuàng)建賬號(hào)的時(shí)候才能給賬號(hào)哪些屬性,例如 schema中user對象沒有別名屬性,我們就不能給賬號(hào)起別名。
Schema的擴(kuò)展:
缺省的schema一般預(yù)先創(chuàng)建有足夠的類,對象和屬性,例如 MS 的AD 缺省有 170個(gè)類和833個(gè)對象和屬性。但是如果不能滿足需要的話,我們就可以擴(kuò)展Schema, 一般是使用 LDAP API, 例如 MS的 ADSI, NDS有專門的工具,當(dāng)然也可以直接使用LDAP查詢語言,來直接操作整個(gè)LDAP目錄樹。
更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號(hào)聯(lián)系: 360901061
您的支持是博主寫作最大的動(dòng)力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長非常感激您!手機(jī)微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
