歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux綜合 >> Linux資訊 >> 更多Linux

OpenLDAP快速指南

摘要
LDAP(輕量級目錄訪問協議,Lightweight Directory Access Protocol)是實現提供被稱為目錄服務的信息服務。目錄服務是一種特殊的數據庫系統,其專門針對讀取,浏覽和搜索操作進行了特定的優化。目錄一般用來包含描述性的,基於屬性的信息並支持精細復雜的過濾能力。目錄一般不支持通用數據庫針對大量更新操作操作需要的復雜的事務管理或回卷策略。而目錄服務的更新則一般都非常簡單。這種目錄可以存儲包括個人信息、web鏈結、jpeg圖像等各種信息。為了訪問存儲在目錄中的信息,就需要使用運行在TCP/IP 之上的訪問協議—LDAP。(2002-07-02 13:28:58)

By lanf

原文作者:Jason P. Holland   27-February-2001
翻譯:    ideal   Linuxaid專業技術支持網站

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: [email protected]
    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: [email protected]
    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: [email protected]
    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.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




  選擇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.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



http://developer.netscape.com/docs/manuals/communicator/addrapi.htm - Netscape Address Book API Specification



Copyright © Linux教程網 All Rights Reserved