本文將討論LDAP以及在我們所喜愛的操作系統(tǒng)——linux上實(shí)現(xiàn)LDAP。
已經(jīng)有很多關(guān)于LDAP的文獻(xiàn),所以我不想在這里再重復(fù)什么,我不準(zhǔn)備討論高級的LDAP概念、計(jì)劃以及第二版和第三版LDAP的區(qū)別等等。事實(shí)上,我對這類問題也所知不多。相反地,我將嘗試用簡單明了的語言解釋什么是LDAP, 它能給我們帶來的好處以及我們?nèi)绾问褂盟?br>
我不是一個LDAP專家。我只是一個LDAP的初學(xué)者。本文介紹的是我用LDAP做了些什么以及如何做。我不會使你再像以前的我一樣感到迷惑。
問題:既然你是個LDAP初學(xué)者,為什么還要寫一篇關(guān)于LDAP的文章?
最近我在一個項(xiàng)目上需要一位同事的幫助。這個項(xiàng)目的基礎(chǔ)就是LDAP。 我的同事可以在perl、郵件服務(wù)器等等方面幫助我,但是他對LDAP一無所知,事實(shí)是每一次他想要深入學(xué)習(xí)LDAP, 反而會對LDAP越來越迷惑。 因?yàn)樵擁?xiàng)目的基礎(chǔ)是LDAP, 所以我給了這位同事半小時來學(xué)習(xí)LDAP,結(jié)果是一切反而變得清晰明了了。原因很簡單, LDAP是在前端的, 只需要集中一點(diǎn)點(diǎn)注意力或者一些生動的例子就可以了。
在本文中我也正想這樣做。
你可以在文中發(fā)現(xiàn)好多對學(xué)習(xí)LDAP有用的url。
LDAP是什么?
LDAP是輕量目錄訪問協(xié)議(Lightweight Directory Access Protocol)的縮寫,其實(shí)是一種目錄服務(wù),類似于我們在文件系統(tǒng)中所使用的目錄,類似于我們查詢電話號碼使用的電話號碼簿,類似于我們所使用諸如NIS(Network Information Service)、DNS (Domain Name Service)等網(wǎng)絡(luò)目錄,也類似于你在花園中所看到的樹木。
LDAP是一種特殊的數(shù)據(jù)庫。但是LDAP和一般的數(shù)據(jù)庫不同,明白這一點(diǎn)是很重要的。 LDAP對查詢進(jìn)行了優(yōu)化,與寫性能相比LDAP的讀性能要優(yōu)秀很多。
一般地,目錄服務(wù)提供什么樣的服務(wù)呢?
通常是根據(jù)查詢的標(biāo)準(zhǔn)返回一定的信息。
實(shí)例
文件系統(tǒng)目錄
ls /etc
返回/etc目錄下所有的文件和子目錄。
ls /etc/p*
返回/etc下所有以p開頭的文件和子目錄。
find /usr/local/apache -name index.html
這將在"/usr/local/apache"目錄下搜索名為index.html的文件/子目錄。
NIS目錄
ypcat passwd
這將從NIS數(shù)據(jù)庫返回用戶名、密碼、用戶id等信息。
ypmatch atif passwd
返回用戶atif的密碼。
DNS目錄
nslookup www.linuxfocus.org
返回www.linuxfocus.org的ip地址。
nslookup -type MX linuxfocus.org
返回主機(jī)名符合linuxfocus.org的MX記錄信息。
LDAP目錄
?。ㄎ覀儗⒃谙旅嬖敿?xì)闡述)
ldapsearch uid=aghaffar
返回關(guān)于用戶aghaffar的所有公開信息。
這和find / -uid aghaffar unix命令很類似。
ldapsearch uid=aghaffar mail
返回用戶ughaffar的郵件信息
目錄基礎(chǔ)或根
在上面我們所提到的任何一種目錄服務(wù)中都有一個我們開始瀏覽或搜索的開始點(diǎn)。 這個開始點(diǎn)就是通常所謂的根。 這和一棵數(shù)的根也很類似。每棵都有一個根,以及很多的樹枝樹葉。
* 文件系統(tǒng)的根是 /
* NIS 的根是域名,比如 "linuxfocus.org"
* DNS 根是Internic(譯者注:Internet網(wǎng)絡(luò)信息中心, Internet的管理組織)
* LDAP同樣有一個可定義的根,比如 "o=linuxfocus.org" ,這里o表示組織
每個根都可以衍生出好多枝葉(正如同你鄰居的花園中的樹木一樣), 對于文件系統(tǒng)來說,它的枝葉就是一個個文件及子目錄。每一個枝葉都有一些屬性。比如文件系統(tǒng)的枝葉(文件及子目錄)有以下的屬性:
* 名稱
* 修改時間
* 所有者
* 組(譯者注:所有者所在的組)
* 等等
下圖顯示了一個文件系統(tǒng)目錄。
屬性由unix命令ls -ld /usr得到。
下面是一個LDAP目錄的圖示:
我們將在下面討論這張圖。
區(qū)分名(DN,Distinguished Name)
和自然界中的樹不同,文件系統(tǒng)/LDAP/電話號碼簿目錄的每一片枝葉都至少有一個獨(dú)一無二的屬性,這一屬性可以幫助我們來區(qū)別這些枝葉。
在文件系統(tǒng)中, 這些獨(dú)一無二的屬性就是帶有完整路徑的文件名。比如/etc/passwd,該文件名在該路徑下是獨(dú)一無二的。當(dāng)然我們可以有/usr/passwd, /opt/passwd,但是根據(jù)它們的完整路徑,它們?nèi)匀皇俏ㄒ坏摹?br>
類似于DNS系統(tǒng)的FQDN正式域名,F(xiàn)QDN也是唯一的。
在LDAP中,一個條目的區(qū)分名稱叫做“dn”或者叫做區(qū)分名。在一個目錄中這個名稱總是唯一的。比如,我的dn是"uid=aghaffar, ou=People, o=developer.ch"。不可能有相同的dn,但是我們可以有諸如"uid=aghaffar, ou=Administrators, o=developer.ch"的dn。這同上面文件系統(tǒng)中/etc/passwd 和 /usr/passwd的例子很類似。
我們有獨(dú)一無二的屬性,在"ou=Administrators, o=developer.ch" 中uid和在"ou=People, o=developer.ch"中的uid。這并不矛盾。
LDAP服務(wù)器
現(xiàn)在市場上有很多LDAP服務(wù)器,大多數(shù)都可以在linux上運(yùn)行。本文將介紹openLDAP的使用。
我為什么選擇openLDAP? 為什么你應(yīng)該選擇openLDAP?
* openLDAP是開放源碼的
openLDAP的官方網(wǎng)站是http://www.openldap.org。你可以下載其源代碼包自己編譯,或者看看你的linux發(fā)行版是否已經(jīng)包含了該軟件包。如果已經(jīng)包含了就可以安裝預(yù)先編譯好的版本從而少花費(fèi)些力氣。
我已經(jīng)成功地在SuSE6.x 和 RedHat6.x上測試過openLDAP。
構(gòu)建LDAP目錄
下面我們將介紹設(shè)置一個LDAP服務(wù)器的步驟。
步驟:
* 下載并安裝openLDAP
* 配置 LDAP server
* 配置本地環(huán)境指向LDAP 安裝
* 初始化LDAP 數(shù)據(jù)庫
* 查詢 LDAP
* 添加/修改 LDAP 條目
下載并安裝openLDAP
正如前面所提到的,可以從www.openldap.com下載源代碼包并根據(jù)它的相關(guān)文檔進(jìn)行安裝,或者安裝預(yù)先編譯好的包(包的安裝或如何編譯應(yīng)用程序已經(jīng)超出了本文討論的范疇)。
配置LDAP服務(wù)器
在我們的例子中,我將為linuxfocus.org構(gòu)建LDAP服務(wù)器。你可以用你喜歡的編輯器編輯slapd.conf和ldap.comf配置文件來更改名稱等參數(shù)以適應(yīng)你的具體需求。
在我的服務(wù)器上配置文件在/etc/openldap目錄下,你的配置文件可能在/usr/local/etc/openldap或者別的地方,這要根據(jù)你的linux發(fā)行版本或者編譯openldap的具體情況而定。
######### /etc/openldap/slapd.conf ###################################
# 下面的部分是我的suse 6.4 linux 發(fā)行版本預(yù)先定義的
# 我們設(shè)置的部分在本文的第二和第三部分
include /etc/openldap/slapd.at.conf
include /etc/openldap/slapd.oc.conf
schemacheck off
pidfile /var/run/slapd.pid
argsfile /var/run/slapd.args
#####################################
# ldbm database definitions
#####################################
# 定義使用的數(shù)據(jù)庫類型。 缺省是ldbm
database ldbm
# 后綴或者根. 這是你LDAP目錄的頂節(jié)點(diǎn)
suffix "o=linuxfocus.org"
# LDAP的dbs 保存的位置
directory /var/lib/ldap
# 目錄管理員的區(qū)分名
rootdn "cn=Manager, o=linuxfocus.org"
# 保存ldap目錄管理員的明文密碼是很糟糕的,但是我們將在剛剛開始使用ldap時這樣做
rootpw secret
# 這就是所有的一切
編輯你的 /etc/openldap/ldap.conf配置文件
該文件位于ldap客戶端(我們將使用同一計(jì)算機(jī)作為服務(wù)器和客戶端,當(dāng)然這可以在同一計(jì)算機(jī)或不同的計(jì)算機(jī)上)
通常諸如ldapdelete 、ldapadd等等的ldap客戶端會讀該文件的內(nèi)容。
##########/etc/openldap/ldap.conf#########
# LDAP 的缺省設(shè)置
#
# 查看 ldap.conf(5) 可以獲取更多的信息
# 本文件應(yīng)該設(shè)置為對所有人可讀
# 定義ldap服務(wù)器,可以用主機(jī)名或ip地址
host 127.0.0.1
# 定義我們要查詢的目錄的根
# 我們將要使用的頂節(jié)點(diǎn),這不一定是目錄的根,比如我們可以使用
# base = ou=users, o=linuxfocus.ch
# 這時我們的一切查詢都將從樹根o=linuxfocus.org的分支開始
現(xiàn)在啟動ldap服務(wù)器。
如果你使用SuSE預(yù)先編譯好的openldap服務(wù)器,你可以通過下面的命令啟動ldap服務(wù)
/etc/rc.d/ldap start
在RedHat,該命令為
/etc/rc.d/init.d/ldap start
如果你是使用缺省設(shè)置自己編譯并安裝的,你可以用/usr/local/libexec/slapd &啟動ldap服務(wù)器。如果沒有使用缺省設(shè)置,請找到slapd文件并運(yùn)行它。
在新安裝的LDAP服務(wù)器上添加數(shù)據(jù)
到現(xiàn)在為止,你的ldap服務(wù)器已經(jīng)運(yùn)行起來了,可以準(zhǔn)備添加數(shù)據(jù)了。最標(biāo)準(zhǔn)的往ldap服務(wù)器中添加數(shù)據(jù)的方法是建立一個LDIF(LDAP目錄交換格式)文件。你可以通過閱讀man ldif來獲得更多關(guān)于ldif的信息。
簡單說來,ldif是ldap條目的文本表示。這些條目是很好讀懂的,并且可以在來自兩個不同的廠家的LDAP服務(wù)器間交換數(shù)據(jù),哪怕使用的是不同的數(shù)據(jù)庫后臺或者是運(yùn)行在不同的操作系統(tǒng)上。
是的,還有其他方法。我對為什么不使用XML替代LDIF感到很驚訝。
就讓我們一起來建立ldif文件,而不要感到任何的忙亂。一些應(yīng)該記住的要點(diǎn):
ldif 文件中的每一記錄/條目都應(yīng)用一個空行分開
空格是很重要的,"Atif Ghaffar" 和"Atif Ghaffar " 是完全不同的
下面是一個ldif文件linuxfocus.org.ldif
dn: o=linuxfocus.org
o: linuxfocus.org
objectclass: top
objectclass: organization
dn: ou=editors, o=linuxfocus.org
ou: editors
objectclass: organizationalUnit
dn: uid=aghaffar, ou=editors, o=linuxfocus.org
uid: aghafar
cn: Atif Ghaffar
sn: Ghaffar
givenname: Atif
objectclass: person
userpassword: yIvSBWSuLs2N2
mailacceptinggeneralid: aghaffar@linuxfocus.org
ou: editors
dn: uid=mkempe, ou=editors, o=linuxfocus.org
uid: mkempe
cn: Magnus Kempe
sn: Kempe
givenname: Magnus
objectclass: person
userpassword: clearpass
mailacceptinggeneralid: mkempe@linuxfocus.org
maildrop: mkempe@developer.ch
preferredlanguage: fr
ou: editors
下面我們將這些數(shù)據(jù)加入ldap目錄。我們使用命令行程序ldapadd
ldapadd -D "cn=Manager, o=linuxfocus.org" -w secret < linuxfocus.org.ldif
該命令使用“cn=Manager, o=linuxfocus.org”作為管理員的區(qū)分名(dn),使用secret
作為密碼,然后從linuxfocus.org.ldif文件中讀取數(shù)據(jù)并寫入ldap目錄。
如果一切正常的話你可以準(zhǔn)備開始查詢你的ldap目錄了,否則如果其間出了差錯的話,
你或許可以準(zhǔn)備往我的郵箱灌水了;)
為我的郵件服務(wù)器考慮,我希望一切正常。
在繼續(xù)之前,讓我們一行一行的來檢查一下這個ldif文件。
1. 這一行定義頂級記錄的區(qū)分名(dn),這將是目錄樹的根,這是必須定義的。
2. 這一行我們定義組織(o),并賦值為“l(fā)inuxfocus.org”。
3. 這一行定義這個對象的對象類,我們定義為top。
4. 定義對象的類型(這里是組織對象)。
5. 空行為分割符。
6. 定義組editors(這是linuxfocus editors分支),舉一反三,我們也可以根據(jù)不同的目的來定義其他的分支,比如hosts和data分支。
7. 明確定義組織單元(ou)editors的屬性。屬性是可以被用來查詢的條目,比如,如果你想要查詢所有屬于editors的用戶,你可以這樣查詢“show all dn where ou=editors”。如果我們沒有定義屬性,則這條記錄將不符合查詢條件。
8. 定義對象類(組織單元)。
9. 空行為分割符。
10. 定義屬于組editors的用戶aghaffar的區(qū)分名。
11. 定義該用戶的uid(要保證其是唯一的)。
12. 定義該用戶的cn(普通名字),比如,我喜歡將我的名字寫成“Firstname Lastname”,而有的人可能喜歡“Lastname Firstname”.
13. 姓
14. 名
15. 對象類(人)
16. 用戶密碼(這里是加密的密碼)。這串字符表示密碼是用加密算法加密過的。剩下的部分是用“yI”加密的密碼"yIvSBWSuLs2N"。
17. 定義我的郵件地址。
18. 定義我所屬于的組織單元(組editors)
19. 空行為分割符。
20. 定義另一個用戶mkempe
21. 普通名字
22. 姓
23. 名
24. 對象類
25. 用戶密碼:注意這里我們使用明文密碼。你可以為不同的用戶使用不同的方案。這是根據(jù)每一條目定義的,而不是基于數(shù)據(jù)庫定義的。因此一個用戶可能使用明文密碼,第二個可能使用加密密碼,另一個則可能使用SHA認(rèn)證方式。
26. 郵件地址。
27. maildrop:定義用戶郵箱的真實(shí)位置。在這個例子中,這個服務(wù)器接受收件人為mkempe@linuxfocus.org的郵件,然后郵件服務(wù)器會查詢ldap服務(wù)器“有接受收件人為mkempe@linuxfocus.org的郵箱嗎?”ldap服務(wù)器就會返回maildrop屬性值。接著郵件服務(wù)器就會將該郵件發(fā)給那個郵箱。
28.母語:這是我們一個額外的屬性,這個屬性定義了用戶的母語。我們可以利用存儲在中央ldap服務(wù)器的信息來為改用戶提供更好的服務(wù)。比如,直接向該用戶顯示本頁的法語版本。請注意前面一條記錄沒有母語、maildrop等屬性,這也是ldap強(qiáng)大的一個方面——不必象一個數(shù)據(jù)庫中的表格那樣擁有固定的結(jié)構(gòu)。你可以在一條記錄中定義3條屬性,而在另一個中定義30條屬性。
29. 組織單元。
查詢ldap數(shù)據(jù)庫
讓我們找出關(guān)于用戶mkempe的所有數(shù)據(jù)
ldapsearch uid=mkempe
找出editors的所有區(qū)分名
ldapsearch '(&(objectclass=person)(ou=editors))' dn
更多的例子可以參考ldapsearch的man手冊。
LDAP的好處
讓我們來看一看遷移到LDAP所帶來的好處。
LDAP是一個開放的標(biāo)準(zhǔn)。你將使用的大多數(shù)的新的應(yīng)用程序都能夠查詢ldap數(shù)據(jù)庫,甚至windows2000使用LDAP作為他的目錄服務(wù)。信息的集中化將會帶來巨大的利益,單點(diǎn)管理,減少錯誤,減少數(shù)據(jù)復(fù)制等等。
LDAP應(yīng)用實(shí)例
如果我是康柏公司的推銷員,我可以測試向你銷售LDAP并告訴你可以用它來作為“聯(lián)系人管理”,但是我不受雇于康柏公司,所以我會嘗試向你介紹LDAP有趣的一些方面。
同一登錄系統(tǒng)的單一數(shù)據(jù)源
用戶賬號放置在一個集中的地方。
你可能會使用一個LDAP目錄來管理你的用戶,放置用戶的密碼及其他信息,而不僅僅是存放在/et/passwd文件中。Windows/Unix/Mac用戶都可以使用這些信息。
建議:你可以使用LDAP信息來進(jìn)行用戶認(rèn)證,而不是用shadow或nis等等方式。
建議:你可以寫一個小web程序來讓用戶不用登錄到系統(tǒng)就可以更改他的存放在LDAP中的unix密碼。這時你將需要使用pam_ldap, 可以參考資源列表中關(guān)于pam_ldap的url.
注意:
統(tǒng)一登錄系統(tǒng)的單一數(shù)據(jù)源!=同一登錄系統(tǒng)
大多數(shù)LDAP銷售商在向你銷售LDAP時,會告訴你如果你使用LDAP,你就可以擁有一個同一登錄系統(tǒng)解決方案。其實(shí)這只說對了一半。同一登錄系統(tǒng)并不是什么新玩藝,只不過時IT經(jīng)理的噱頭而已。
同一登錄系統(tǒng)的實(shí)例:
* 你用"aghaffar"登錄工作站
* 你訪問公司的內(nèi)部網(wǎng),內(nèi)部網(wǎng)中的web頁面是密碼保護(hù)的,你不用登錄就可以訪問,因?yàn)閣ww服務(wù)器可以識別你的身份。
* 你開始運(yùn)行一個程序,比如SAP, 再一次地,你不需要密碼,因?yàn)橄到y(tǒng)已經(jīng)擁有了你的身份和信息。
* 等等等等
當(dāng)然你可以使用LDAP作為用戶數(shù)據(jù)源,而在幾個不同的應(yīng)用程序間進(jìn)行會話管理的小戲法就是所謂的“統(tǒng)一登錄系統(tǒng)”了,要知道,這和LDAP是風(fēng)馬牛不相及的。
其實(shí)這可以用LDAP, NIS, NT域控制器賬號,數(shù)據(jù)庫,平面文件實(shí)現(xiàn)的。
建議:你可能想要建立用戶郵件賬號但是不想建立unxi賬號。沒問題,我正在使用一個LDAP+Postfix 郵件服務(wù)器+ Cyrus IMAP/POP服務(wù)器的復(fù)合服務(wù)器來管理成千上萬的用戶,當(dāng)然不用建立相應(yīng)的系統(tǒng)賬號。
建議:你可能想要將不同應(yīng)用程序的信息集中化。比如,將Netscape的首選項(xiàng)、書簽等信息存入LDAP,并且用戶可以將這些信息從一部計(jì)算機(jī)移動到另一部,從LDAP服務(wù)器下載他/她的信息。這個用戶可以從Windows NT Netscape 遷移到Linux/Solaris/Macintosh Netscape的同時還使用同樣的用戶信息(對不起,又提到了Microsoft,我知道這倒了你的胃口)。
情景:我憎惡老是在web和書面上填充我的個人信息。我不知道為什么人們老是想知道我的年齡、生日、辦公室地址,即使已經(jīng)告訴過他們。在我以前謀職的公司里,我們不得不建立龐大的表格,表格的信息75%都是一樣的(姓名、主題、通信地址、樓層、管理員名字、部門)。
建議:比如,如果我的電話出故障了,我給你的唯一信息是“我的電話出故障了”。
采取以下的措施可以盡量減少用戶的厭煩:
為用戶提供問題提交表單
頁面提供用戶名/密碼驗(yàn)證 (每個對話驗(yàn)證一次,下一次用戶登錄是能記住用戶信息)
頁面提供兩個表單元素 1) 反映問題的文字框2)提交按鈕
寫文章:教/學(xué)
我希望這篇文章能對你有所幫助,或者讓你的大腦充滿了10001100110010。你看看,你并不是必須成為專家才能和大家共享你的知識。你不必成為一個教授,也不必成為一個教師才能寫教程。每一點(diǎn)小小的知識都能幫助別人。
幸運(yùn)的是,現(xiàn)在我看到越來越多的人在討論linux, 我看到他們中的大多數(shù)人都在測試linux,在一些人進(jìn)行了一段時間的同時一些人很快放棄了。這些人可能完全沒有unix命令的使用經(jīng)驗(yàn)和概念,然而他們卻可能和遇到的問題斗爭了一段時間。如果你精神飽滿的面對遇到的問題,那么你可以成為最好的教師,如果你認(rèn)為你沒有任何的資料寫文章來幫助linux社團(tuán),你可以自愿的將本文翻譯成你的母語。
資源列表:
PAM LDAP Module
pam_ldap 模塊為Solarish和linux工作站提供LDAP目錄認(rèn)證,以及更改其在目錄中的密碼。
openLDAP
OpenLDAP 項(xiàng)目是一個協(xié)作開發(fā)強(qiáng)健的、商業(yè)等級的、具有豐富特性的、并且是開放源碼的LDAP應(yīng)用程序和工具的項(xiàng)目。該項(xiàng)目由一個全世界志愿者組成的社團(tuán)管理,該社團(tuán)利用Internet來交流、計(jì)劃和開發(fā)OpenLDAP 軟件和文檔。
Java based excellent LDAP Browser/Editor
LDAP 瀏覽器/編輯器提供用戶友好界面LDAP目錄編輯工具。由JFC (SwingSet) 和JNDI 類庫寫成??梢赃B接第二和第三版LDAP 服務(wù)器。
kldap
kldap 是一個KDE的LDAP客戶端(瀏覽器) 。你可以象你熟悉的Novell Administrator那樣瀏覽LDAP目錄。
http://freshmeat.net/search.php3?query=ldap
Freshmeat 站點(diǎn)上大量的LDAP相關(guān)工具。
http://www.redbooks.ibm.com/abstracts/sg245110.html
IBM的LDAP實(shí)現(xiàn)手冊。你可以在線瀏覽或購買。
ypldapd - nis 2 ldap gateway
Ypldapd 是一個網(wǎng)絡(luò)信息服務(wù)(NIS) 服務(wù)器,它使用LDAP作為數(shù)據(jù)源。通過ypldapd,現(xiàn)存的NIS 客戶可以透明地使用LDAP來查詢用戶、組和主機(jī)信息。企業(yè)可以充分地獲得LDAP所帶來的好處,比如擴(kuò)展性等而不用升級客戶端。
Introduction to the SLAPD and SLURPD Administrator's Guide
必讀的關(guān)于LDAP的教程。
An LDAP RaodMap & FAQ
一個關(guān)于LDAP和X.500目錄服務(wù)的資源教程。
本站僅提供存儲服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請
點(diǎn)擊舉報(bào)。