OpenLDAP快速指南 (LDAP簡介)

來源:互聯網
上載者:User


LDAP簡介

  LDAP(輕量級目錄訪問協議,Lightweight Directory Access Protocol)是實現提供被稱為目錄服務的資訊服務。目錄服務是一種特殊的資料庫系統,其專門針對讀取,瀏覽和搜尋操作進行了特定的最佳化。目錄一般用來包含描述性的,基於屬性的資訊並支援精細複雜的過濾能力。目錄一般不支援通用資料庫針對大量更新操作操作需要的複雜的交易管理或回卷策略。而目錄服務的更新則一般都非常簡單。這種目錄可以儲存包括個人資訊、web鏈結、jpeg映像等各種資訊。為了訪問儲存在目錄中的資訊,就需要使用運行在TCP/IP之上的訪問協議―LDAP。

  LDAP目錄中的資訊是是按照樹型結構組織,具體資訊儲存在條目(entry)的資料結構中。條目相當於關聯式資料庫中表的記錄;條目是具有區別名DN(Distinguished Name)的屬性(Attribute),DN是用來引用條目的,DN相當於關聯式資料庫表中的關鍵字(Primary Key)。屬性由類型(Type)和一個或多個值(Values)組成,相當於關聯式資料庫中的欄位(Field)由欄位名和資料類型組成,只是為了方便檢索的需要,LDAP中的Type可以有多個Value,而不是關聯式資料庫中為降低資料的冗餘性要求實現的各個域必須是不相關的。LDAP中條目的組織一般按照地理位置和組織關係進行組織,非常的直觀。LDAP把資料存放在檔案中,為提高效率可以使用基於索引的檔案資料庫,而不是關聯式資料庫。類型的一個例子就是mail,其值將是一個電子郵件地址。

LDAP的資訊是以樹型結構儲存的,在樹根一般定義國家(c=CN)或網域名稱(dc=com),在其下則往往定義一個或多個組織(organization)(o=Acme)或組織單元(organizational units) (ou=People)。一個組織單元可能包含諸如所有僱員、大樓內的所有印表機等資訊。此外,LDAP支援對條目能夠和必須支援哪些屬性進行控制,這是有一個特殊的稱為物件類別(objectClass)的屬性來實現的。該屬性的值決定了該條目必須遵循的一些規則,其規定了該條目能夠及至少應該包含哪些屬性。例如:inetorgPerson對象類需要支援sn(surname)和cn(common
name)屬性,但也可以包含可選的如郵件,電話號碼等屬性。

目錄設計

  設計目錄結構是LDAP最重要的方面之一。下面我們將通過一個簡單的例子來說明如何設計合理的目錄結構。該例子將通過Netscape地址薄來訪文。假設有一個位於美國US(c=US)而且跨越多個州的名為Acme(o=Acme)的公司。Acme希望為所有的僱員實現一個小型的地址薄伺服器。

  我們從一個簡單的組織DN開始: 

��������dn: o=Acme, c=US

  Acme所有的組織分類和屬性將儲存在該DN之下,這個DN在該儲存在該伺服器的目錄是唯一的。Acme希望將其僱員的資訊分為兩類:管理者(ou=Managers)和普通僱員(ou=Employees),這種分類產生的相對區別名(RDN,relative distinguished names。表示相對於頂點DN)就shi :

��������dn: ou=Managers, o=Acme, c=US

��������dn: ou=Employees, o=Acme, c=US

  在下面我們將會看到分層結構的組成:頂點是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。然後將前面的父條目結合在一起就形成如下的樹型結構:

��������cn=Jason H. Smith

����������������+ ou=Managers

������������������������+ o=Acme

��������������������������������+ c=US

����������������������������������������-> cn=Jason H. Smith, ou=Managers, o=Acme, c=US

  現在已經定義好了目錄結構,下一步就需要匯入目錄資訊資料。目錄資訊資料將被存放在LDIF檔案中,其是匯入目錄資訊資料的預設存放檔案。使用者可以方便的編寫Perl指令碼來從例如/etc/passwd、NIS等系統檔案中自動建立LDIF檔案。

  下面的執行個體儲存目錄資訊資料為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

  第一個管理者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

  可以定義另外一個組織單元:

��������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

安裝配置

  下一步需要設定OpenLDAP來接受剛才定義的目錄結構的匯入及提供訪問Netscape中的地址薄。在OpenLDAP郵件清單中一個常見的問題是“我如何使Netscape地址薄來使用我的LDAP伺服器?”儲存地址薄資訊是LDAP常見的一個應用方面,這是因為它具有快速的查詢和讀取功能。而且OpenLDAP支援例如SSL/TLS等會話加密和目錄伺服器複製等功能,這樣就可以實現一個非常好的開發源碼解決方案。

  下面的討論都是基於openldap-2.0.7,其支援LDAP v2和LDAP v3。LDAP v3相對於LDAP v2最重要的是添加了對傳輸層安全(TLS,Transport Layer Security)的支援及增加了認證方法。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目錄下,當這並不是必須的。

��������[root@radiusd openldap-2.0.7]# make depend;make

  在安裝結束以前進行測試:

��������[root@radiusd openldap-2.0.7]# make test

��������[root@radiusd openldap-2.0.7]# make install

  若出現任何編譯錯誤,應該到OpenLDAP郵件清單去尋求協助。你也許需要在PATH環境變數中添加如下路徑:/usr/local/libexec, /usr/local/bin及/usr/local/sbin。

  PRM包方式的安裝執行個體如下:

��������rpm -ivh openldap-2.0.7-14-i386.rpm

��������rpm -ivh openldap-devel-2.0.7-14-i386.rpm

  下來需要編輯slapd.conf檔案,其是slapd守護進程的設定檔。slapd進程負責響應客戶應用訪問目錄服務請求。設定檔存放/usr/local/etc/openldap。

  為了能使用Netscape地址薄屬性,需要添加一些額外的"模式"配置資訊。在slapd.conf檔案的開頭處添加如下include內容,但是根據安裝路徑的不同,模式目錄路徑可能也不大一樣。

��������include��������/usr/local/etc/openldap/schema/cosine.schema

��������include��������/usr/local/etc/openldap/schema/inetorgperson.schema

  在slapd.conf的定義的suffix和rootdn行修改為能反應你需要的DN:

��������suffix��������"o=Acme, c=US"

��������rootdn��������"cn=root, o=Acme, c=US"

  這裡cn=root條目是我們的管理DN,其不受任何存取控制或限制。其預設是cn=Manager,但是我希望root訪問。在slapd.conf檔案的末端添加如下內容,實現給Netsacpe進行目錄過濾和搜尋操作的讀許可權。所有沒有授權的訪問目錄服務的請求都被作為匿名使用者對待。下面的DN條目被格式化處理,也就是所有的空格被去掉,並且其值被逗號隔開。在存取控制,必須格式化條目否則將不能工作。

��������access to dn=".*,o=Acme,c=US"

����������������by anonymous����������������read

  對目錄的訪問許可以進行精細的調節以適應各種需求。OpenLDAP 2.0管理指南有非常好的配置訪問許可的文檔說明。這裡為了測試目的,這樣的存取控制層級是足夠了。

  下面我們就將啟動slapd伺服器。若系統的ldap是通過RPM/DEB格式進行安裝的,根據使用的Linux發布版本不同,啟動指令碼可能是/etc/rc.d/init.d/ldap或/etc/init.d/ldap。當然也可以手工啟動來進行測試。

��������slapd &

  下面測試看slapd是否在運行 >

��������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

  下面測試ldap的預設連接埠389是否被監聽:

��������netstat -an | grep 389

��������tcp��������0��������0 0.0.0.0:389��������0.0.0.0:*��������LISTEN

  到這裡為止,一切看上去都很正常,下面將匯入ldap資訊資料到資料庫中:

��������ldapadd -D "cn=root, o=Acme, c=US" -W -v -f testdata.ldif

  我們使用-D參數和無限制的cn來捆綁目錄,這樣允許寫資訊到目錄中。-W參數導致伺服器要求輸入密碼才能訪問。預設的密碼是在slapd.conf檔案中的rootpw來設定的,預設是secre。使用該預設密碼是非常危險的,因此在測試完畢以後,應該改變該密碼。記得使用-v參數來進行詳細輸出以判斷是否及如何修正出現的錯誤。

7

測試

  當資料匯入結束,下一步就需要配置用戶端來進行測試。Netscape地址薄支援很多目錄屬性,在下面的資源部分將包含Netscape地址薄API標準鏈結地址。下面的簡單的測試執行個體,將使用如下屬性:cn,sn,mail.telephoneNumber和localityName。地址薄中的Nickname條目是通過屬性xmozillanickname來支援的,其在任何“模式”中都不是預設地被支援而需要對“模式”進行修改。本文將不設計如何修改“模式”方面。

  開啟Netscape的地址薄,選擇File->New Directory,輸入LDAP伺服器的資訊:

��������Description: Acme Address Book

��������LDAP Server: the IP/hostname address of your LDAP server

��������Server Root: o=Acme, c=US

  連接埠號碼和其他資訊不需要修改。而且由於鏈結將以匿名使用者身份進行,因此不需要設定使用者名稱和密碼。

  選擇OK按鈕,然後在左邊的目錄欄選中"Acme Address Book",最後在"Show names containing"框中輸入一個查詢,例如Smith然後斷行符號。你將可以看到返回了一行資料。

  若希望對每個組織單元得到獨立的列表輸出,你可以在Netsacpe中建立另外一個新的目錄條目:

��������Description: Acme Managers

��������LDAP Server: the IP/hostname address of your LDAP server

��������Server Root: ou=Managers, o=Acme, c=US

  這將導致僅僅在Acem目錄中搜尋Nanagers組織單元,也就是實現了一定的過濾。當然可以對Employees進行同樣的限制。

錯誤處理

  可能會在測試中遇到如下問題:

  若目錄服務不能返回資料,則編輯slapd.conf file並添加"Loglevel 1"。將導致slapd服務進程記錄所有的資訊到syslog LOCAL4。同樣需要編輯 /etc/syslog.conf檔案來將這些資訊定向到一個單獨的檔案來便於調試。檢查該log檔案以確保slapd伺服器啟動正常沒有任何錯誤資訊。這同樣會詳細記錄每個請求服務的資訊。

  確保PATH環境包括所有的ldap命令的路徑。

  若匯入資料失敗,仔細察看檔案LDIF檔案格式。更高一級的條目必須首先出現,從你的目錄數頂端開始,直到葉子節點。

  需要有root身份來啟動slapd,除非改變slapd到超過1024以上的連接埠。

  檢查slapd.conf檔案格式,若你的存取控制清單沒有被格式化,則可能導致鏈結伺服器失敗。

  使用Netscape地址薄來訪問LDAP是掌握使用LDAP概念一個非常好的方法。下面是一些和LDAP相關的一些鏈結資源,包括一些使用LDAP認證一些常見服務的方法如:系統登入及Samba等。

原文連結:http://www.freebsdchina.org/forum/viewtopic.php?t=1814&sid=82d6f2f00abe183ffb5576ac39656df8

資源

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

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.