OpenLDAP快速指南
LDAP簡(jiǎn)介LDAP(輕量級(jí)目錄訪問協(xié)議,Lightweight Directory Access Protocol)是實(shí)現(xiàn)提供被稱為目錄服務(wù)的信息服務(wù)。
目錄服務(wù)是一種特殊的數(shù)據(jù)庫系統(tǒng),其專門針對(duì)讀取,瀏覽和搜索操作進(jìn)行了特定的優(yōu)化。目錄一般用來包含描
述性的,基于屬性的信息并支持精細(xì)復(fù)雜的過濾能力。目錄一般不支持通用數(shù)據(jù)庫針對(duì)大量更新操作操作需要的
復(fù)雜的事務(wù)管理或回卷策略。而目錄服務(wù)的更新則一般都非常簡(jiǎn)單。這種目錄可以存儲(chǔ)包括個(gè)人信息、web鏈結(jié)、
jpeg圖像等各種信息。為了訪問存儲(chǔ)在目錄中的信息,就需要使用運(yùn)行在TCP/IP之上的訪問協(xié)議—LDAP。
LDAP目錄中的信息是是按照樹型結(jié)構(gòu)組織,具體信息存儲(chǔ)在條目(entry)的數(shù)據(jù)結(jié)構(gòu)中。條目相當(dāng)于關(guān)系數(shù)據(jù)庫中
表的記錄;條目是具有區(qū)別名DN(Distinguished Name)的屬性(Attribute),DN是用來引用條目的,DN相當(dāng)于
關(guān)系數(shù)據(jù)庫表中的關(guān)鍵字(Primary Key)。屬性由類型(Type)和一個(gè)或多個(gè)值(Values)組成,相當(dāng)于關(guān)系數(shù)
據(jù)庫中的字段(Field)由字段名和數(shù)據(jù)類型組成,只是為了方便檢索的需要,LDAP中的Type可以有多個(gè)Value,
而不是關(guān)系數(shù)據(jù)庫中為降低數(shù)據(jù)的冗余性要求實(shí)現(xiàn)的各個(gè)域必須是不相關(guān)的。LDAP中條目的組織一般按照地理位置
和組織關(guān)系進(jìn)行組織,非常的直觀。LDAP把數(shù)據(jù)存放在文件中,為提高效率可以使用基于索引的文件數(shù)據(jù)庫,而不
是關(guān)系數(shù)據(jù)庫。類型的一個(gè)例子就是mail,其值將是一個(gè)電子郵件地址。
LDAP的信息是以樹型結(jié)構(gòu)存儲(chǔ)的,在樹根一般定義國(guó)家(c=CN)或域名(dc=com),在其下則往往定義一個(gè)或多個(gè)組織
(organization)(o=Acme)或組織單元(organizational units) (ou=People)。一個(gè)組織單元可能包含諸如所有雇員、
大樓內(nèi)的所有打印機(jī)等信息。此外,LDAP支持對(duì)條目能夠和必須支持哪些屬性進(jìn)行控制,這是有一個(gè)特殊的稱為對(duì)
象類別(objectClass)的屬性來實(shí)現(xiàn)的。該屬性的值決定了該條目必須遵循的一些規(guī)則,其規(guī)定了該條目能夠及至少
應(yīng)該包含哪些屬性。例如:inetorgPerson對(duì)象類需要支持sn(surname)和cn(common name)屬性,但也可以包含可選
的如郵件,電話號(hào)碼等屬性。
目錄設(shè)計(jì)
設(shè)計(jì)目錄結(jié)構(gòu)是LDAP最重要的方面之一。下面我們將通過一個(gè)簡(jiǎn)單的例子來說明如何設(shè)計(jì)合理的目錄結(jié)構(gòu)。該例子將
通過Netscape地址薄來訪文。假設(shè)有一個(gè)位于美國(guó)US(c=US)而且跨越多個(gè)州的名為Acme(o=Acme)的公司。Acme希望為
所有的雇員實(shí)現(xiàn)一個(gè)小型的地址薄服務(wù)器。
我們從一個(gè)簡(jiǎn)單的組織DN開始:
dn: o=Acme, c=US
Acme所有的組織分類和屬性將存儲(chǔ)在該DN之下,這個(gè)DN在該存儲(chǔ)在該服務(wù)器的目錄是唯一的。Acme希望將其雇員的信
息分為兩類:管理者(ou=Managers)和普通雇員(ou=Employees),這種分類產(chǎn)生的相對(duì)區(qū)別名(RDN,relative distinguished
names。表示相對(duì)于頂點(diǎn)DN)就shi :
dn: ou=Managers, o=Acme, c=US
dn: ou=Employees, o=Acme, c=US
在下面我們將會(huì)看到分層結(jié)構(gòu)的組成:頂點(diǎn)是US的Acme,下面是管理者組織單元和雇員組織單元。因此包括Managers
和Employees的DN組成為:
dn: cn=Jason H. Smith, ou=Managers, o=Acme, c=US
dn: cn=Ray D. Jones, ou=Employees, o=Acme, c=US
dn: cn=Eric S. Woods, ou=Employees, o=Acme, c=US
為了引用Jason H. Smith的通用名(common name )條目,LDAP將采用cn=Jason H. Smith的RDN。然后將前面的父條目
結(jié)合在一起就形成如下的樹型結(jié)構(gòu):
cn=Jason H. Smith
+ ou=Managers
+ o=Acme
+ c=US
-> cn=Jason H. Smith, ou=Managers, o=Acme, c=US
現(xiàn)在已經(jīng)定義好了目錄結(jié)構(gòu),下一步就需要導(dǎo)入目錄信息數(shù)據(jù)。目錄信息數(shù)據(jù)將被存放在LDIF文件中,其是導(dǎo)入目錄
信息數(shù)據(jù)的默認(rèn)存放文件。用戶可以方便的編寫Perl腳本來從例如/etc/passwd、NIS等系統(tǒng)文件中自動(dòng)創(chuàng)建LDIF文件。
下面的實(shí)例保存目錄信息數(shù)據(jù)為testdate.ldif文件,該文件的格式說明將可以在man ldif中得到。
在添加任何組織單元以前,必須首先定義Acme DN:
dn: o=Acme, c=US
objectClass: organization
這里o屬性是必須的
o: Acme
下面是管理組單元的DN,在添加任何管理者信息以前,必須先定義該條目。
dn: ou=Managers, o=Acme, c=US
objectClass: organizationalUnit
這里ou屬性是必須的。
ou: Managers
第一個(gè)管理者DN:
dn: cn=Jason H. Smith, ou=Managers, o=Acme, c=US
objectClass: inetOrgPerson
cn和sn都是必須的屬性:
cn: Jason H. Smith
sn: Smith
但是還可以定義一些可選的屬性:
telephoneNumber: 111-222-9999
mail: headhauncho@acme.com
localityName: Houston
可以定義另外一個(gè)組織單元:
dn: ou=Employees, o=Acme, c=US
objectClass: organizationalUnit
ou: Employees
并添加雇員信息如下:
dn: cn=Ray D. Jones, ou=Employees, o=Acme, c=US
objectClass: inetOrgPerson
cn: Ray D. Jones
sn: Jones
telephoneNumber: 444-555-6767
mail: jonesrd@acme.com
localityName: Houston
dn: cn=Eric S. Woods, ou=Employees, o=Acme, c=US
objectClass: inetOrgPerson
cn: Eric S. Woods
sn: Woods
telephoneNumber: 444-555-6768
mail: woodses@acme.com
localityName: Houston
安裝配置
下一步需要設(shè)置OpenLDAP來接受剛才定義的目錄結(jié)構(gòu)的導(dǎo)入及提供訪問Netscape中的地址薄。在OpenLDAP郵件列
表中一個(gè)常見的問題是“我如何使Netscape地址薄來使用我的LDAP服務(wù)器?”保存地址薄信息是LDAP常見的一個(gè)
應(yīng)用方面,這是因?yàn)樗哂锌焖俚牟樵兒妥x取功能。而且OpenLDAP支持例如SSL/TLS等會(huì)話加密和目錄服務(wù)器復(fù)制
等功能,這樣就可以實(shí)現(xiàn)一個(gè)非常好的開發(fā)源碼解決方案。
下面的討論都是基于openldap-2.0.7,其支持LDAP v2和LDAP v3。LDAP v3相對(duì)于LDAP v2最重要的是添加了對(duì)傳輸
層安全(TLS,Transport Layer Security)的支持及增加了認(rèn)證方法。OpenLDAP有兩種安裝方式:源代碼方式和打包
的deb/rpm模式。可以從http://www.openldap.org/下載源代碼方式或者從http://rpmfind.net/及光盤上得到RPM包
方式。源代碼方式安裝過程如下:
[root@radiusd src]# ar -xzvf openldap-2.0.7.tgz
[root@radiusd src]# cd openldap-2.0.7
[root@radiusd openldap-2.0.7]# ./configure --prefix=/usr/local
這里指示openldap被安裝在/usr/local目錄下,當(dāng)這并不是必須的。
[root@radiusd openldap-2.0.7]# make depend;make
在安裝結(jié)束以前進(jìn)行測(cè)試:
[root@radiusd openldap-2.0.7]# make test
[root@radiusd openldap-2.0.7]# make install
若出現(xiàn)任何編譯錯(cuò)誤,應(yīng)該到OpenLDAP郵件列表去尋求幫助。你也許需要在PATH環(huán)境變量中添加如下路徑:
/usr/local/libexec, /usr/local/bin及/usr/local/sbin。
PRM包方式的安裝實(shí)例如下:
rpm -ivh openldap-2.0.7-14-i386.rpm
rpm -ivh openldap-devel-2.0.7-14-i386.rpm
下來需要編輯slapd.conf文件,其是slapd守護(hù)進(jìn)程的配置文件。slapd進(jìn)程負(fù)責(zé)響應(yīng)客戶應(yīng)用訪問目錄服務(wù)請(qǐng)求。配置
文件存放/usr/local/etc/openldap。
為了能使用Netscape地址薄屬性,需要添加一些額外的"模式"配置信息。在slapd.conf文件的開頭處添加如下include
內(nèi)容,但是根據(jù)安裝路徑的不同,模式目錄路徑可能也不大一樣。
include /usr/local/etc/openldap/schema/cosine.schema
include /usr/local/etc/openldap/schema/inetorgperson.schema
在slapd.conf的定義的suffix和rootdn行修改為能反應(yīng)你需要的DN:
suffix "o=Acme, c=US"
rootdn "cn=root, o=Acme, c=US"
這里cn=root條目是我們的管理DN,其不受任何訪問控制或限制。其默認(rèn)是cn=Manager,但是我希望root訪問。在
slapd.conf文件的末端添加如下內(nèi)容,實(shí)現(xiàn)給Netsacpe進(jìn)行目錄過濾和搜索操作的讀權(quán)限。所有沒有授權(quán)的訪問目
錄服務(wù)的請(qǐng)求都被作為匿名用戶對(duì)待。下面的DN條目被格式化處理,也就是所有的空格被去掉,并且其值被逗號(hào)隔開。
在訪問控制,必須格式化條目否則將不能工作。
access to dn=".*,o=Acme,c=US"
by anonymous read
對(duì)目錄的訪問許可以進(jìn)行精細(xì)的調(diào)節(jié)以適應(yīng)各種需求。OpenLDAP 2.0管理指南有非常好的配置訪問許可的文檔說明。
這里為了測(cè)試目的,這樣的訪問控制級(jí)別是足夠了。
下面我們就將啟動(dòng)slapd服務(wù)器。若系統(tǒng)的ldap是通過RPM/DEB格式進(jìn)行安裝的,根據(jù)使用的Linux發(fā)布版本不同,啟動(dòng)
腳本可能是/etc/rc.d/init.d/ldap或/etc/init.d/ldap。當(dāng)然也可以手工啟動(dòng)來進(jìn)行測(cè)試。
slapd &
下面測(cè)試看slapd是否在運(yùn)行
ps -ef | grep -i slapd | grep -v grep
root 15479 1 0 10:42 ? 00:00:00 slapd
root 15483 15479 0 10:42 ? 00:00:00 slapd
root 15484 15483 0 10:42 ? 00:00:00 slapd
root 15491 15483 0 10:43 ? 00:00:00 slapd
root 15492 15483 0 10:43 ? 00:00:00 slapd
下面測(cè)試ldap的默認(rèn)端口389是否被監(jiān)聽:
netstat -an | grep 389
tcp 0 0 0.0.0.0:389 0.0.0.0:* LISTEN
到這里為止,一切看上去都很正常,下面將導(dǎo)入ldap信息數(shù)據(jù)到數(shù)據(jù)庫中:
ldapadd -D "cn=root, o=Acme, c=US" -W -v -f testdata.ldif
我們使用-D參數(shù)和無限制的cn來捆綁目錄,這樣允許寫信息到目錄中。-W參數(shù)導(dǎo)致服務(wù)器需要密碼才能訪問。缺省的
密碼是在slapd.conf文件中的rootpw來設(shè)定的,默認(rèn)是secre。使用該默認(rèn)密碼是非常危險(xiǎn)的,因此在測(cè)試完畢以后,
應(yīng)該改變?cè)撁艽a。記得使用-v參數(shù)來進(jìn)行詳細(xì)輸出以判斷是否及如何修正出現(xiàn)的錯(cuò)誤。
測(cè)試
當(dāng)數(shù)據(jù)導(dǎo)入結(jié)束,下一步就需要配置客戶端來進(jìn)行測(cè)試。Netscape地址薄支持很多目錄屬性,在下面的資源部分將包
含Netscape地址薄API標(biāo)準(zhǔn)鏈結(jié)地址。下面的簡(jiǎn)單的測(cè)試實(shí)例,將使用如下屬性:cn,sn,mail.telephoneNumber和
localityName。地址薄中的Nickname條目是通過屬性xmozillanickname來支持的,其在任何“模式”中都不是默認(rèn)地
被支持而需要對(duì)“模式”進(jìn)行修改。本文將不設(shè)計(jì)如何修改“模式”方面。
打開Netscape的地址薄,選擇File->New Directory,輸入LDAP服務(wù)器的信息:
Description: Acme Address Book
LDAP Server: the IP/hostname address of your LDAP server
Server Root: o=Acme, c=US
端口號(hào)和其他信息不需要修改。而且由于鏈結(jié)將以匿名用戶身份進(jìn)行,因此不需要設(shè)置用戶名和密碼。
選擇OK按鈕,然后在左邊的目錄欄選中"Acme Address Book",最后在"Show names containing"框中輸入一個(gè)查詢,
例如Smith然后回車。你將可以看到返回了一行數(shù)據(jù)。
若希望對(duì)每個(gè)組織單元得到獨(dú)立的列表輸出,你可以在Netsacpe中創(chuàng)建另外一個(gè)新的目錄條目:
Description: Acme Managers
LDAP Server: the IP/hostname address of your LDAP server
Server Root: ou=Managers, o=Acme, c=US
這將導(dǎo)致僅僅在Acem目錄中搜索Nanagers組織單元,也就是實(shí)現(xiàn)了一定的過濾。當(dāng)然可以對(duì)Employees進(jìn)行同樣的限制。
錯(cuò)誤處理
可能會(huì)在測(cè)試中遇到如下問題:
若目錄服務(wù)不能返回?cái)?shù)據(jù),則編輯slapd.conf file并添加"Loglevel 1"。將導(dǎo)致slapd服務(wù)進(jìn)程記錄所有的信息到
syslog LOCAL4。同樣需要編輯 /etc/syslog.conf文件來將這些信息定向到一個(gè)單獨(dú)的文件來便于調(diào)試。檢查該
log文件以確保slapd服務(wù)器啟動(dòng)正常沒有任何錯(cuò)誤信息。這同樣會(huì)詳細(xì)記錄每個(gè)請(qǐng)求服務(wù)的信息。
確保PATH環(huán)境包括所有的ldap命令的路徑。
若導(dǎo)入數(shù)據(jù)失敗,仔細(xì)察看文件LDIF文件格式。更高一級(jí)的條目必須首先出現(xiàn),從你的目錄數(shù)頂端開始,直到葉子節(jié)點(diǎn)。
需要有root身份來啟動(dòng)slapd,除非改變slapd到超過1024以上的端口。
檢查slapd.conf文件格式,若你的訪問控制列表沒有被格式化,則可能導(dǎo)致鏈結(jié)服務(wù)器失敗。
使用Netscape地址薄來訪問LDAP是掌握使用LDAP概念一個(gè)非常好的方法。下面是一些和LDAP相關(guān)的一些鏈結(jié)資源,
包括一些使用LDAP認(rèn)證一些常見服務(wù)的方法如:系統(tǒng)登錄及Samba等。
資源
http://www.openldap.org/ - OpenLDAP Web Site
http://www.openldap.org/doc/admin/ - OpenLDAP 2.0 Administrators Guide
http://www.hklc.com/ldapschema/ - LDAP Schema Browser
http://www.padl.com/pam_ldap.html - Pam-LDAP Authentication Module (they also have some Perl migration scripts)
http://perl-ldap.sourceforge.net/ - Perl LDAP modules
http://www.unav.es/cti/ldap-smb-howto.html - Samba-PDC LDAP Howto
http://developer.netscape.com/docs/manuals/communicator/addrapi.htm - Netscape Address Book API Specification
posted on 2006-02-21 10:55 靜夜思 閱讀(282) 評(píng)論(0) 編輯 收藏 所屬分類: 開源軟件