Linux下的LDAP
2024-07-21 02:36:12
供稿:網友
作者簡介:
Atif Ghaffar 就像只變色龍。他經常變換角色,從系統治理員到程序員,再到教師、項目治理員,直至任何可以完成工作的角色。有時候,當他在電影院看電影的同時,他也喜歡拿出筆記本電腦編寫程序。Atif始終堅信,他是屬于linux和開放源碼社團的。 關于Atif的更多信息,可以訪問他的主頁http://www.developer.ch/~aghaffar。
摘要:
本文將討論LDAP以及在我們所喜愛的操作系統——linux上實現LDAP。
已經有很多關于LDAP的文獻,所以我不想在這里再重復什么,我不預備討論高級的LDAP概念、計劃以及第二版和第三版LDAP的區別等等。事實上,我對這類問題也所知不多。相反地,我將嘗試用簡單明了的語言解釋什么是LDAP, 它能給我們帶來的好處以及我們如何使用它。
我不是一個LDAP專家。我只是一個LDAP的初學者。本文介紹的是我用LDAP做了些什么以及如何做。我不會使你再像以前的我一樣感到迷惑。
問題:既然你是個LDAP初學者,為什么還要寫一篇關于LDAP的文章?
最近我在一個項目上需要一位同事的幫助。 這個項目的基礎就是LDAP。 我的同事可以在perl、郵件服務器等等方面幫助我,但是他對LDAP一無所知,事實是每一次他想要深入學習LDAP, 反而會對LDAP越來越迷惑。 因為該項目的基礎是LDAP, 所以我給了這位同事半小時來學習LDAP,結果是一切反而變得清楚明了了。 原因很簡單, LDAP是在前端的, 只需要集中一點點注重力或者一些生動的例子就可以了。
在本文中我也正想這樣做。
你可以在文中發現好多對學習LDAP有用的url。
LDAP是什么?
LDAP是輕量目錄訪問協議(Lightweight Directory access PRotocol)的縮寫,其實是一種目錄服務,類似于我們在文件系統中所使用的目錄,類似于我們查詢電話號碼使用的電話號碼簿,類似于我們所使用諸如NIS(Network Information Service)、DNS (Domain Name Service)等網絡目錄,也類似于你在花園中所看到的樹木。
LDAP是一種非凡的數據庫。但是LDAP和一般的數據庫不同,明白這一點是很重要的。 LDAP對查詢進行了優化,與寫性能相比LDAP的讀性能要優秀很多。
一般地,目錄服務提供什么樣的服務呢?
通常是根據查詢的標準返回一定的信息。
實例
文件系統目錄
ls /etc
返回/etc目錄下所有的文件和子目錄。
ls /etc/p*
返回/etc下所有以p開頭的文件和子目錄。
find /usr/local/apache -name index.Html
這將在"/usr/local/apache"目錄下搜索名為index.html的文件/子目錄。
NIS目錄
ypcat passwd
這將從NIS數據庫返回用戶名、密碼、用戶id等信息。
ypmatch atif passwd
返回用戶atif的密碼。
DNS目錄
nslookup www.linuxfocus.org
返回www.linuxfocus.org的ip地址。
nslookup -type MX linuxfocus.org
返回主機名符合linuxfocus.org的MX記錄信息。
LDAP目錄
(我們將在下面具體闡述)
ldapsearch uid=aghaffar
返回關于用戶aghaffar的所有公開信息。
這和find / -uid aghaffar unix命令很類似。
ldapsearch uid=aghaffar mail
返回用戶ughaffar的郵件信息
目錄基礎或根
在上面我們所提到的任何一種目錄服務中都有一個我們開始瀏覽或搜索的開始點。
這個開始點就是通常所謂的根。 這和一棵數的根也很類似。每棵都有一個根,以及很多的樹枝樹葉。
* 文件系統的根是 /
* NIS 的根是域名,比如 "linuxfocus.org"
* DNS 根是Internic(譯者注:Internet網絡信息中心, Internet的治理組織)
* LDAP同樣有一個可定義的根,比如 "o=linuxfocus.org" ,這里o表示組織
每個根都可以衍生出好多枝葉(正如同你鄰居的花園中的樹木一樣), 對于文件系統來說,它的枝葉就是一個個文件及子目錄。每一個枝葉都有一些屬性。比如文件系統的枝葉(文件及子目錄)有以下的屬性:
* 名稱
* 修改時間
* 所有者
* 組(譯者注:所有者所在的組)
* 等等
下圖顯示了一個文件系統目錄。
屬性由unix命令ls -ld /usr得到。
下面是一個LDAP目錄的圖示:
我們將在下面討論這張圖。
區分名(DN,Distinguished Name)
和自然界中的樹不同,文件系統/LDAP/電話號碼簿目錄的每一片枝葉都至少有一個獨一無二的屬性,這一屬性可以幫助我們來區別這些枝葉。
在文件系統中, 這些獨一無二的屬性就是帶有完整路徑的文件名。比如/etc/passwd,該文件名在該路徑下是獨一無二的。當然我們可以有/usr/passwd, /opt/passwd,但是根據它們的完整路徑,它們仍然是唯一的。
類似于DNS系統的FQDN正式域名,FQDN也是唯一的。
在LDAP中,一個條目的區分名稱叫做“dn”或者叫做區分名。在一個目錄中這個名稱總是唯一的。比如,我的dn是"uid=aghaffar, ou=People, o=developer.ch"。不可能有相同的dn,但是我們可以有諸如"uid=aghaffar, ou=Administrators, o=developer.ch"的dn。這同上面文件系統中/etc/passwd 和 /usr/passwd的例子很類似。
我們有獨一無二的屬性,在"ou=Administrators, o=developer.ch" 中uid和在"ou=People, o=developer.ch"中的uid。這并不矛盾。
LDAP服務器
現在市場上有很多LDAP服務器,大多數都可以在linux上運行。本文將介紹openLDAP的使用。
我為什么選擇openLDAP? 為什么你應該選擇openLDAP?
* openLDAP是開放源碼的
openLDAP的官方網站是http://www.openldap.org。你可以下載其源代碼包自己編譯,或者看看你的linux發行版是否已經包含了該軟件包。假如已經包含了就可以安裝預先編譯好的版本從而少花費些力氣。
我已經成功地在SuSE6.x 和 RedHat6.x上測試過openLDAP。
構建LDAP目錄
下面我們將介紹設置一個LDAP服務器的步驟。
步驟:
* 下載并安裝openLDAP
* 配置 LDAP server
* 配置本地環境指向LDAP 安裝
* 初始化LDAP 數據庫
* 查詢 LDAP
* 添加/修改 LDAP 條目
下載并安裝openLDAP
正如前面所提到的,可以從www.openldap.com下載源代碼包并根據它的相關文檔進行安裝,或者安裝預先編譯好的包(包的安裝或如何編譯應用程序已經超出了本文討論的范疇)。
配置LDAP服務器
在我們的例子中,我將為linuxfocus.org構建LDAP服務器。你可以用你喜歡的編輯器編輯slapd.conf和ldap.comf配置文件來更改名稱等參數以適應你的具體需求。
在我的服務器上配置文件在/etc/openldap目錄下,你的配置文件可能在/usr/local/etc/openldap或者別的地方,這要根據你的linux發行版本或者編譯openldap的具體情況而定。
######### /etc/openldap/slapd.conf ###################################
# 下面的部分是我的suse 6.4 linux 發行版本預先定義的
# 我們設置的部分在本文的第二和第三部分
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
#######################################################################
# 定義使用的數據庫類型。 缺省是ldbm
database ldbm
# 后綴或者根. 這是你LDAP目錄的頂節點
suffix "o=linuxfocus.org"
# LDAP的dbs 保存的位置
directory /var/lib/ldap
# 目錄治理員的區分名
rootdn "cn=Manager, o=linuxfocus.org"
# 保存ldap目錄治理員的明文密碼是很糟糕的,但是我們將在剛剛開始使用ldap時這樣做
rootpw secret
# 這就是所有的一切
編輯你的 /etc/openldap/ldap.conf配置文件
該文件位于ldap客戶端(我們將使用同一計算機作為服務器和客戶端,當然這可以在同一計算機或不同的計算機上)
通常諸如ldapdelete 、ldapadd等等的ldap客戶端會讀該文件的內容。
##########/etc/openldap/ldap.conf#########
# LDAP 的缺省設置
#
# 查看 ldap.conf(5) 可以獲取更多的信息
# 本文件應該設置為對所有人可讀
# 定義ldap服務器,可以用主機名或ip地址
host 127.0.0.1
# 定義我們要查詢的目錄的根
# 我們將要使用的頂節點,這不一定是目錄的根,比如我們可以使用
# base = ou=users, o=linuxfocus.ch
# 這時我們的一切查詢都將從樹根o=linuxfocus.org的分支開始
現在啟動ldap服務器。
假如你使用SuSE預先編譯好的openldap服務器,你可以通過下面的命令啟動ldap服務
/etc/rc.d/ldap start
在RedHat,該命令為
/etc/rc.d/init.d/ldap start
假如你是使用缺省設置自己編譯并安裝的,你可以用/usr/local/libexec/slapd &啟動ldap服務器。假如沒有使用缺省設置,請找到slapd文件并運行它。
在新安裝的LDAP服務器上添加數據
到現在