cmd

          OpenLDAP快速指南

          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參數來進行詳細輸出以判斷是否及如何修正出現的錯誤。

          測試 
          當數據導入結束,下一步就需要配置客戶端來進行測試。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

          posted on 2006-02-21 10:55 靜夜思 閱讀(282) 評論(0)  編輯  收藏 所屬分類: 開源軟件

          主站蜘蛛池模板: 阳谷县| 敖汉旗| 宁城县| 新营市| 章丘市| 礼泉县| 烟台市| 巴彦淖尔市| 鹿泉市| 简阳市| 白水县| 涞源县| 黑龙江省| 葫芦岛市| 平顶山市| 诏安县| 庆城县| 舞阳县| 隆安县| 修武县| 逊克县| 通化市| 托里县| 贵阳市| 亳州市| 读书| 达孜县| 贵溪市| 贺兰县| 岳阳市| 柏乡县| 板桥市| 乐平市| 阿鲁科尔沁旗| 酉阳| 忻州市| 梓潼县| 会宁县| 栾川县| 九龙坡区| 金昌市|