標題: 理解與應用LDAP服務(wù)器
(前段時(shí)間一直在做LDAP+POSTFIX相關(guān)項目,先把關(guān)于LDAP的一些經(jīng)驗寫(xiě)出來(lái),一來(lái)可能會(huì )幫助一些人,二來(lái)對我自己所學(xué)知識也是一個(gè)鞏固。)
先聲明:我寫(xiě)的只是我對LDAP的一些理解,如果我的理解錯誤,那就是對兄弟們的誤導。所以你可以直接看文章的結尾提供的幾個(gè)網(wǎng)址。
關(guān)于LDAP的概念隨便網(wǎng)上有很多,我不想重復,這里只是說(shuō)一下我自己的理解。
都說(shuō)它是“輕量級目錄協(xié)議”,太專(zhuān)業(yè),我不懂,我只把它想象成“簡(jiǎn)單”的目錄協(xié)議。
幾個(gè)很重要的概念,以后會(huì )用到:
---------------------------------------------
dn :一條記錄的位置
dc :一條記錄所屬區域
ou :一條記錄所屬組織
cn/uid:一條記錄的名字/ID
---------------------------------------------
實(shí)際上更多時(shí)候我只把它看成數據庫。我把它和我非常熟悉的MYSQL數據庫做比較,通常會(huì )得到更好的理解:
MYSQL用“表”儲存數據,LDAP用“樹(shù)”
MYSQL指定一條記錄要3個(gè)條件:DB、TABLE、ROW。
LDAP卻更自由,為什么呢?因為L(cháng)DAP數據是“樹(shù)”狀的,而且這棵樹(shù)是可以無(wú)限延伸的,假設你要樹(shù)上的一個(gè)蘋(píng)果(一條記錄),你怎么告訴園丁它的位置呢?當然首先要說(shuō)明是哪一棵樹(shù)(dc,相當于MYSQL的DB),然后是從樹(shù)根到那個(gè)蘋(píng)果所經(jīng)過(guò)的所有“分叉”(ou,呵呵MYSQL里面好象沒(méi)有這DD),最后就是這個(gè)蘋(píng)果的名字(uid,記得我們設計MYSQL或其它數據庫表時(shí),通常為了方便管理而加上一個(gè)‘id’字段嗎?)。 好了!這時(shí)我們可以清晰的指明這個(gè)蘋(píng)果的位置了,就是那棵“歪脖樹(shù)”的東邊那個(gè)分叉上的靠西邊那個(gè)分叉的再靠北邊的分叉上的半紅半綠的……,暈了!你直接爬上去吧!我還是說(shuō)說(shuō)LDAP里要怎么定義一個(gè)字段的位置吧,樹(shù)(dc=waibo,dc=com),分叉(ou=bei,ou=xi,ou=dong),蘋(píng)果(cn=honglv),好了!位置出來(lái)了:
dn:cn=honglv,ou=bei,ou=xi,ou=dong,dc=waibo,dc=com
一個(gè)有名的畫(huà)家說(shuō)過(guò):“世上沒(méi)有相同的2個(gè)雞蛋”。當然也沒(méi)有相同的2個(gè)蘋(píng)果……,同樣,在LDAP里也不可能存在2個(gè)相同的dn。
LDAP數據填充原理:
一棵樹(shù)的生長(cháng),要循序漸進(jìn),如果還沒(méi)有長(cháng)出某個(gè)分叉,就不可能在那個(gè)分叉里長(cháng)出蘋(píng)果(問(wèn):FT!蘋(píng)果是長(cháng)在分叉上的嗎?答:為了便于理解,你就當它是吧),同樣,LDAP數據庫也要一步步的充實(shí),舉一個(gè)學(xué)校數據庫的例子,我們將要把一個(gè)龐大的學(xué)生檔案放到LDAP里,大致需要這么做:
---------------------------------------------
1、建立“樹(shù)根”,這是通過(guò)修改“slapd.conf”來(lái)實(shí)現的,由于現在的目的是理解,所以具體步驟就不說(shuō)了,反正就是在這一步建立了一個(gè)“dc=ourschool,dc=org”這樣一個(gè)“樹(shù)根”。 注意:我把它理解成“目錄”,或者“容器”,甚至它本身也是文件(蘋(píng)果)的特殊形式,熟悉LINUX文件系統的朋友會(huì )更容易理解。
2、建立18個(gè)系,分別是“dn:ou=computer,dc=ourschool,dc=org”、“dn:ou=film,dc=ourschool,dc=org”……
3、當然是在每個(gè)系里面建立專(zhuān)業(yè),比如“dn:ou=linux,ou=computer,dc=ourschool,dc=org”……
4、(開(kāi)始長(cháng)蘋(píng)果吧?。┘訉W(xué)生嘍——“dn:cn=stan,ou=linux,ou=computer,dc=ourschool,dc=org”……
5、已經(jīng)完成了嗎?對了!學(xué)生的詳細信息還沒(méi)有吶!不過(guò)先這樣吧,反正記錄是可以編輯的。
---------------------------------------------
LDAP記錄的詳細信息
dn:cn=stan,ou=linux,ou=computer,dc=ourschool,dc=org
objectClass:organizationalPerson
cn:stan
cn:小刀
sn:小刀
description:a good boy
(以上是一條記錄的信息,如果把他保存成LDIF文件,可以導入到LDAP數據庫中)
上面不是說(shuō)沒(méi)有學(xué)生詳細信息嗎?怕你著(zhù)急,就馬上寫(xiě)出來(lái)了,只是還沒(méi)有導入到LDAP里,那是以后的事。這里我先就你可能會(huì )產(chǎn)生的疑問(wèn)做回答。
---------------------------------------------
Q1:“cn”不是在“dn”里定義了嗎,怎么又在后面重新定義了? 答:你要把“cn=stan,ou=linux,ou=computer,dc=ourschool,dc=org”看成是一個(gè)整體,它只是屬性dn的值。
Q2:怎么后面有2個(gè)“cn”,我以哪個(gè)為準? 答:區別于普通數據庫,LDAP每個(gè)屬性一般可以具有多個(gè)值,這樣不好嗎?你在學(xué)校數據庫里找我的時(shí)候,只要記得我的一個(gè)cn就可以了,用“cn=stan”或“cn=小刀”都可以找到我!
Q3:就這些屬性了嗎?我都不知道你是男是女。 答:先聲明,偶是男地。 LDAP對記錄的屬性做了嚴格的限制(這一點(diǎn)我不太喜歡),也就是說(shuō),你可以用哪些屬性,哪些屬性不能為空,哪些屬性最多只能有一個(gè)值等,他們都給你規定好了。 幸好你有選擇的權利,比如這次我們是儲存學(xué)生信息,那么我們就定義一個(gè)“objectClass:organizationalPerson”,這樣“organizationalPerson”這個(gè)類(lèi)所規定的所有屬性我們都可以用了,而且確實(shí)很適合我們。 雖然這個(gè)類(lèi)中沒(méi)有“sex”這個(gè)屬性,不過(guò)你完全可以用一個(gè)“空閑”的屬性來(lái)頂替。 如果我們能自己建立“類(lèi)”就更好了,但目前我還沒(méi)有時(shí)間去研究這個(gè)東西,我也期望高手指點(diǎn)啊 :)
---------------------------------------------
好了!看到我貼的圖了嗎?那是我偷別人的,差不多能用我就不自己畫(huà)了 :)
##############################################################
關(guān)于安裝配置LDAP,使之儲存系統用戶(hù),這里有一個(gè)非常好的網(wǎng)址,如果你的英文不是很差,都應該做的來(lái),我偷個(gè)懶,就先不寫(xiě)這方面的東西嘍:
http://www.mandrakesecure.net/en/docs/ldap-auth.php上面的方法我已經(jīng)試過(guò),是可行的,如果兄弟們配置的時(shí)候出現問(wèn)題我們可以討論討論。
關(guān)于LDAP+POSTFIX,POSTFIX里的“LDAP_README”中介紹的很詳細,我再說(shuō)就是重復了。
##############################################################
其它相關(guān)資源:
yala (很實(shí)用的數據庫操作工具,簡(jiǎn)單的說(shuō),他就是MYSQL的phpmyadmin,自己找下載地址吧~)
http://www.openldap.org/ (說(shuō)實(shí)話(huà),我一直沒(méi)用上它,不過(guò)它是官方網(wǎng)站,不提也不好)
http://ldap.akbkhome.com/ (什么‘類(lèi)’下面有什么‘屬性’,在這里找)