歡迎您光臨本站 註冊首頁

基於Linux的目錄服務實現

←手機掃碼閱讀     火星人 @ 2014-03-12 , reply:0
  本文的目的是通過使用Linux系統支持的應用軟體包(openldap),快速實現基於LDAP協議的目錄服務系統來支持Windows消息簿中的用戶查詢功能。作者從用戶的觀點介紹了目錄服務的特點,並比較了其與通常使用的關係資料庫在處理數據上的差別,作者只是普通的Linux的愛好者,嘗試將所學到的一點Linux知識進行綜合應用,希望對大家有所啟發。

關鍵字:目錄、LDAP

如果需要開發一種提供公共信息查詢的系統,如通過用戶姓名能夠獲得該用戶的郵件地址、家庭住址等信息,如Yahoo提供的People search服務和Windows Outlook中提供的消息簿功能。一般的設計方法可能是採用基於WEB的資料庫設計方式,即前端使用瀏覽器而後端使用WEB伺服器加上關係資料庫。後端在Windows的典型實現可能是Windows NT + IIS + Acess資料庫或者是SQL伺服器,IIS和資料庫之間通過ASP技術使用ODBC進行連接,達到通過填寫表單查詢數據的功能;後端在Linux系統的典型實現可能是Linux + Apache + Postgresql,Apache和資料庫之間通過PHP3提供的函數進行連接。使用上述方法的缺點是後端關係資料庫的引入導致系統整體的性能降低和系統的管理比較繁瑣,因為需要不斷的進行數據類型的驗證和事務的完整性的確認;並且前端用戶對數據的控制不夠靈活,用戶許可權的設置一般只能是設置在表一級而不是設置在記錄一級。

目錄服務的推出主要是解決上述資料庫中存在的問題。目錄與關係資料庫相似,是指具有描述性的基於屬性的記錄集合,但它的數據類型主要是字元型,為了檢索的需要添加了BIN(二進位數據)、CIS(忽略大小寫)、CES(大小寫敏感)、TEL(電話型)等語法(Syntax),而不是關係資料庫提供的整數、浮點數、日期、貨幣等類型,同樣也不提供象關係資料庫中普遍包含的大量的函數,它主要面向數據的查詢服務(查詢和修改操作比一般是大於10:1),不提供事務的回滾(rollback)機制,它的數據修改使用簡單的鎖定機制實現All-or-Nothing,它的目標是快速響應和大容量查詢並且提供多目錄伺服器的信息複製功能。

LDAP(Lightweight Directory Acess Protocol)是目錄服務在TCP/IP上的實現(RFC 1777 V2版和RFC 2251 V3版)。它是對X500的目錄協議的移植,但是簡化了實現方法,所以稱為輕量級的目錄服務。在LDAP中目錄是按照樹型結構組織,目錄由條目(Entry)組成,條目相當於關係資料庫中表的記錄;條目是具有區別名DN(Distinguished Name)的屬性(Attribute)集合,DN相當於關係資料庫表中的關鍵字(Primary Key);屬性由類型(Type)和多個值(Values)組成,相當於關係資料庫中的域(Field)由域名和數據類型組成,只是為了方便檢索的需要,LDAP中的Type可以有多個Value,而不是關係資料庫中為降低數據的冗餘性要求實現的各個域必須是不相關的。LDAP中條目的組織一般按照地理位置和組織關係進行組織,非常的直觀。LDAP把數據存放在文件中,為提高效率可以使用基於索引的文件資料庫,而不是關係資料庫。LDAP協議集還規定了DN的命名方法、存取控制方法、搜索格式、複製方法、URL格式、開發介面等。

Linux支持的LDAP伺服器一般有Michigan大學開發的免費軟體包和Openldap組織基於Michigan大學的開發包提供的Openldap免費軟體發行包,其中Openldap發行包安裝配置更加簡單。RedHat 6.1 Linux發行版中就包含了Openldap軟體包,該發行版可從計算機世界報信息服務中心得到,對LDAP的支持是Redhat6.1提供的一個重要擴展,(參見Redhat 6.1產品介紹),以下詳細介紹在Linux中安裝並配置Openldap的方法,以及使用該軟體包為Windows Outlook中的帳號提供消息簿的後端。

1.安裝Openldap-1.2.7-2.rpm軟體包
  如果不是使用的RedHat 6.1直接進行系統安裝,可以單獨使用管理器rpm進行獨立安裝,其格式為:

  rpm - i openldap-1.2.7-2.rpm

  rpm - i openldap-devel-1.2.7-2.rpm

2.相關文件
安裝完畢后,相應的執行文件主要有:

/usr/sbin/slapd是單獨運行的LDAP看守進程,它監聽客戶端請求,埠號一般是389
/usr/sbin/slurpd是單獨運行的LDAP更新和複製進程,它能夠把本地資料庫的變化通知相關伺服器進行更新。
/usr/sbin/ldifldbm、/usr/sbin/ldbmcat等將LDIF(LDAP Directory Interchange Format)文件(實際是純文本形式的文件)轉化為gdbm形式的二進位數據文件以及相關的工具。
/usr/bin/ldapsearch、/usr/bin/ldapdelete、/usr/bin/ldapmodify、/usr/bin/ud等是LDAP的客戶端軟體,能夠完成對目錄的搜索、添加、修改、刪除等功能。
生成的配置文件在/etc/openldap目錄下,主要的配置文件有:

slapd.conf是slapd和slurpd的配置文件,其一般形式如下:
defaultaccess read

access to attr=userpassword by self write by * compare

access to attr=mail by self write by * read

include /etc/openldap/slapd.at.conf

include /etc/openldap/slapd.oc.conf

schemacheck off

#referral ldap://sunshine.mccc.net

pidfile /var/run/slapd.pid

argsfile /var/run/slapd.args

###################################################################

# ldbm database definitions

###################################################################

database ldbm

#suffix "dc=your-domain, dc=com"

#suffix "o=Your Organization Name, c=US"

suffix "o=mccc, c=US"

directory /usr/tmp

rootdn "cn=root, o=mccc, c=US"

rootpw secret

#replica host=zx.mccc.net:389 binddn="ou=people, o=mccc, c=US" bindmethod=simple

對這個配置文件的關鍵修改是對suffix後綴為本地的組織形式,可以按照域名的形式,也可以按照組織模式。其中的rootdn定義了本地目錄樹的根,rootpw即是相對於本目錄樹的管理員口令,預設是使用的明文為「secret」。其中的replica指定備份目錄伺服器的地址,如果是備份伺服器則不需要replica配置項,而是添加udpatedn=主目錄伺服器的地址,同時指定referral為主目錄伺服器。同時,預設的目錄數據是以ldbm形式(Linux中實際gdbm格式)存放在/usr/tmp目錄中。Access定義了對目錄信息的訪問信息,它是基於條目的,即用戶自己可以通過輸入自己的口令修改自己的數據,其口令存放在自己的口令域(userpassword)中。

ldap.conf是本地系統LDAP客戶的預設配置,啟動slapd后可以使用客戶端軟體使用ldap.conf的信息作為預設信息。根據我們的具體情況,將其修改為如下形式:
BASE O=mccc,C=US

HOST sunshine.mccc.net

3.生成目錄數據

生成數據文件的方法一般分為以下兩步:

編輯LDIF文件
LDIF文件是文本文件的形式,例如為Windows的消息簿提供一個目錄格式可為如下形式:

dn: o=mccc,c=US

o: mccc

objectclass: organization

dn: cn=test,o=mccc,c=US

cn: test

cn: 測試中文

mail: testmail@mccc.net

othermailbox: testmailother@mccc.com

givenname: givenname

sn: test sn

surname: surname

st: st

c: china

co: co

o: mccc

ou: ou

url: http://sunshine.mccc.net

homephone: homephone

homepostaladdress: homepostaladdress

facsimiletelephonenumber: facsimiletelephonenumber

otherfacsimiletelephonenumber: otherfacsimiletelephonenumber

officefax: officefax

mobile: mobile

otherpager: otherpager

officepager: officepager

pager: pager

info: info

title: title

telephonenumber: telephonenumber

l: location

postaladdress: postaladdress

streetaddress: streetaddress

department: department

comment: comment

postalcode: postalcode

physicaldeliveryofficename: physicaldeliveryofficename

initials: initials

conferenceinformation: conferenceinformation

labeleduri: labeleduri

manager: manager

reports: reports

objectclass: organization

其中的:後面的值中均可以填寫中文信息,使用上述格式主要是為了方便在Windows 消息簿中對照用戶的信息。由於,我們不能知道Wab的目錄查詢格式,所以沒有找到個人信息中的4個子項目。

使用ldif2ldbm將LDIF文件轉化為ldbm文件格式
ldif2ldbm - i myldif

將上述的LDIF文件便轉化為/usr/tmp/中的ldbm格式。

啟動本地的LDAP服務
/usr/sbin/slapd

/usr/sbin/slurpd

4. 客戶端測試

客戶端的測試可以使用專用的客戶端軟體,如Openldap包中的ldapsearch、ud等,同樣更為通用的是使用瀏覽器(IE或Netscape),使用如下方式構造查詢url:

ldap://sunshine.mccc.net/o=mccc,c=US??sub?cn=test。另外,也可以使用OUTLOOK中的帳號配置預設的LDAP伺服器地址以及搜索路徑為o=mccc,c=US,便能夠使用 開始->查找->用戶的方法快速搜索用戶信息。

5. 與WEB伺服器連接

目前,基於瀏覽器的信息訪問方式能夠方便前端用戶的使用,所以對於查找特定的目錄內容最好是使用表單方式提交數據,WEB伺服器抽取用戶查詢信息構造查詢與LDAP伺服器進行連接,在Linux中如果你已經安裝了PHP3且該模塊含有LDAP支持,那麼,能夠非常簡單的實現。倘若,沒有LDAP支持則需要找到PHP3的源程序(www.php.net)進行編譯,編譯只需要在配置過程中添加—with-ldap即可,在PHP3的文檔中有非常詳細的LDAP支持和例子。

以上簡單的介紹了我們的目錄服務實現方法和注意事項,這僅僅是我們在對目錄服務了解得非常膚淺的情況下的簡單應用,並不能代表目錄服務作為一種通用服務的真正實力。目錄服務的應用範圍非常廣泛,實際上作為大型的信息站點為了提高客戶訪問效率,都或多或少採用了目錄服務的技術。目錄服務根據具體的應用需求的優化設計方法,對我們決定應用系統的開發無疑是一個啟發,應該說在基於索引信息的領域LDAP服務遠遠優於傳統的關係資料庫系統。同時,我們也深深地體會到Linux系統和它集成的大量軟體的魅力和實力,畢竟,我們不能方便地得到運行於其他操作系統的目錄伺服器,同樣深深地體會到它給我們自己在思考和解決問題時帶來的變化,它給了我們更多選擇的機會。的確,它給我們的已經遠遠超過了我們所期望的。





[火星人 ] 基於Linux的目錄服務實現已經有596次圍觀

http://coctec.com/docs/linux/show-post-70066.html