安裝和配置OPENLDAP(轉)

post0發表於2007-08-10
安裝和配置OPENLDAP(轉)[@more@]

必需的軟體包

在大多數基於軟體包的系統上(例如,在基於 RPM 的分發版(distribution)上,如 Red Hat、Mandrake 和 SuSE)安裝和配置 OpenLDAP 是一個相對比較簡單的過程。第一步先確定將哪些 OpenLDAP 元件(如果有的話)作為初始 Linux 設定的一部分進行安裝。

從控制檯視窗或命令列,輸入:

[root@thor root]# rpm -qa | grep openldap

openldap-devel-2.0.23-4

openldap-2.0.23-4

openldap-servers-2.0.23-4

openldap-clients-2.0.23-4

[root@thor root]#

您應該看到類似上面的輸出。注:Red Hat 分發版安裝 OpenLDAP 客戶機軟體,但不安裝 openldap-servers 軟體包,即使您選擇了伺服器配置也是如此。要安裝 RPM 軟體包,在分發版媒質上找到所需檔案的位置並輸入:

rpm -ivh packagename

配置 OpenLDAP 伺服器

安裝了必需的軟體之後,下一步是要配置伺服器。首先,備份原始配置檔案以供今後參考( cp /etc/openldap/slapd.conf /etc/openldap/slapd.conf.orig )。現在,在您所喜愛的文字編輯器中開啟 /etc/openldap/slapd.conf 檔案,花幾分鐘時間通讀註釋。除了定義目錄資料庫型別、suffix、rootdn 和儲存目錄資料庫的位置的幾個項外,slapd.conf 中的大多數預設設定都是適當的。

database ldbm

suffix "dc=syroidmanor,dc=com"

rootdn "cn=root,dc=syroidmanor.com,dc=com"

rootpw {CRYPT}05T/JKDWO0SuI

directory /var/lib/ldap

index objectClass,uid,uidNumber,gidNumber,memberUid eq

index cn,mail,surname,givenname eq,subinitial

保護 rootdn

rootdn 項控制誰可以對目錄資料庫進行寫操作,以及他們要這樣做所必須提供的密碼。請確保閱讀“訪問控制”一章結束部分的註釋:

# if no access controls are present, the default is:

# Allow read by all

#

# rootdn can always write!

“rootdn can always write!”(rootdn 總是可以寫!)的意思正如它所表示的那樣。您在 rootdn 項的 cn= 部分填充的任何項都是對資料庫有完全讀/寫訪問權的使用者。另外,預設配置檔案使用“secret”作為密碼,它以明文形式傳送。如果只能從裝了防火牆與外界隔離的內部網訪問您的 LDAP 伺服器,並且確信將訪問 LDAP 伺服器的使用者不知道有關資訊包嗅探的任何事情,您大概可以以明文形式安全地傳送 rootdn 密碼(只要確保將密碼“secret”稍加修改,使之不易被猜出)。但是,如果您打算儲存在目錄中的資料只有一點點機密性,則對密碼進行雜湊處理。可以用 slappasswd 實用程式完成它,如下所示:

[root@thor root]# slappasswd -h {crypt}

該程式將要求您輸入密碼,然後 slappasswd 將給出與所提供的項相對應的 crypt 字串。將該字串剪下並貼上到 slapd.conf,如上一頁所示。其它雜湊選項包含 SSHA(預設值)、SMD5、MD5 和 SHA。輸入 man slappasswd ,以獲取更多資訊。

測試伺服器

現在是測試伺服器的好時機了。這裡的配置相對比較簡單也容易對可能出現的問題進行故障診斷。在 Red Hat Linux 系統上,命令是:

[root@thor root]# service ldap start

接下來,測試您訪問目錄的能力:

[root@thor root]# ldapsearch -x -b '' -s base '(objectclass=*)' namingContexts

如果正確配置了伺服器,您應該看到類似於下面的輸出(當然,有不同的 dc):

version: 2

#

# filter: (objectclass=*)

# requesting: namingContexts

#

#

dn:

namingContexts: dc=syroidmanor,dc=com

# search result

search: 2

result: 0 Success

# numResponses: 2

# numEntries: 1

如果您得到了錯誤訊息,或輸出與上面有很大的不同,則返回並檢查配置。要使 LDAP 服務在重新引導時自動啟動,輸入以下命令:

[root@thor root]# chkconfig ldap on

再提醒一下,上面的命令特定於 Red Hat 分發版。

配置 ACL

配置 LDAP 伺服器的最後一步是設定一些基本訪問控制。這樣做可以確保使用者只能訪問他們需要訪問的項。

在 OpenLDAP 下設定 ACL(訪問控制表,Access Control List)的方法有兩種:可以將 include 行放在 /etc/openldap/slapd.conf 的頂部,指向一個單獨的檔案(例如, include /etc/openldap/slapd.access.conf );或者可以將 ACL 直接新增到 slapd.conf。這完全由您選擇 — Mandrake 通常使用 include 行;Red Hat 將 ACL 新增到配置檔案。

您將在下一頁看到一組示例 ACL 以及它們做些什麼的說明。

ACL 示例

# Define ACLs -- access control definitions

access to dn=".*,dc=syroidmanor,dc=com" attr=userPassword

by dn="cn=root,dc=syroidmanor,dc=com" write

by self write

by * auth

access to dn=".*,dc=syroidmanor,dc=com" attr=mail

by dn="cn=root,dc=syroidmanor,dc=com" write

by self write

by * read

access to dn=".*,ou=people,dc=syroidmanor,dc=com"

by * read

access to dn=".*,dc=syroidmanor,dc=com"

by self write

by * read

上面的配置僅允許 userPassword 屬性的所有者修改項,但僅當所有者提供他或她的優先密碼時才允許進行修改。在所有其它情況下,只能出於認證目的來訪問該項,而不能檢視它。第二個 access to... 項允許使用者修改自己的電子郵件地址(attr=mail)。第三個項指定除了 rootdn 外,對於所有人,ou=people,dc=syroidmanor,dc=com 中的任何 DN 都是隻讀的。這可防止使用者更改其使用者名稱、uid、gid 和主目錄等。最後,最後一項是包容前面訪問控制中未涉及的任何東西的安全的“大雜燴”。例如,它允許使用者更改其自己地址簿中的項。

在伺服器可以使用新的 ACL 之前,需要重新啟動: service ldap restart 。

完成基本配置之後,應該將一些有用的項填充到資料庫。

填充資料

進行到這一階段,您應該大致瞭解了 LDAP 的內部機制和結構,並且有了一個正在執行的 OpenLDAP 伺服器。下一步是將聯絡人資料填充到您的目錄,隨後,電子郵件應用程式將使用這些資料來查詢電子郵件地址。遺憾的是,這會使事情變得有點兒棘手。

有三種使聯絡人資訊填入目錄樹的基本方法:從命令列手工輸入,透過 LDIF(LDAP 資料庫交換檔案 (LDAP Database Interchange File) )匯入,或者透過使用指令碼。棘手的部分是選擇有效的方法以及將資料正確地填入資料庫而不出差錯。好處就是,一旦完成了,您不必再次執行整個過程 — 當然前提是您繼續使用支援 LDAP 的應用程式。

手工填充資料庫是三種方法中最直接的一種(雖然,正如單詞“手工”暗示的那樣,它需要的勞動力最多),所以我們先處理這一過程。

手工資料輸入

首先,從控制檯視窗或命令列,輸入下列命令:

[root@thor root]# ldapadd -D "cn=root" -h

server

password: *******

dn: uid=juser,ou=people,dc=syroidmanor,dc=com

uid: juser

cn: Joe User

givenname: Joe

sn: User

mail: juser@syroidmanor.com

objectClass: top

objectClass: mailRecipient

objectClass: person

objectClass: inetOrgPerson

^D

adding new entry uid=juser,ou=people,dc=syroidmanor,dc=com

[root@thor root]#

上面概述的過程使用三個基本的 LDAP 操作:繫結操作、更新操作和隱式取消繫結操作。為了修改目錄,您必須以特權使用者身份繫結或連線到 LDAP 伺服器。所顯示的示例使用 cn=root,因為那就是 OpenLDAP 伺服器的配置方式。如果您對 slapd.conf 中的 rootdn 項使用了其它名稱,則用合適的替換它。

在密碼提示後,輸入 DN,後跟要與 DN(RDN 項)相關聯的資料,後跟包含型別/值對的屬性的物件類。過程結束部分的 CTRL-D 會將資料傳送給伺服器,並隱式取消與伺服器的繫結。然後,LDAP 伺服器用一條已經成功輸入(已顯示)資料的訊息或錯誤訊息來響應。常見錯誤是嘗試新增型別/值,而不指定正確的物件類、新增已經存在的使用者或 RDN 或遺忘了“MUST”項(例如,物件類人員同時需要 givenname 和 sn)等。

另外,在進行手工資料輸入時,要知道以下幾點:

您必須知道哪個物件類擁有您正在新增的型別/值 RDN 資料的屬性。

該過程所需的工作量較大。

很容易錯誤地輸入一個項,這會使目錄樹中有錯誤資訊。

一般而言,能使您的目錄樹佈局視覺化並熟悉配置 LDAP 伺服器以使用的模式很重要。

最後一點對於所有資料輸入方法都適用,它正是 LDAP 入門一章的目的。熟悉 LDAP 的結構並清楚地知道您正在嘗試完成什麼對於消除與填充 LDAP 資料庫相關聯的失敗和不可避免的錯誤大有幫助。

LDIF 方法

將資料插入 LDAP 目錄的第二種方法是使用 LDIF 檔案。LDIF 檔案只是包含想要插入的以特定語法編排的資料的純文字文件。您已經熟悉了語法:dn: 後跟樹中儲存項的位置,後跟一個或多個 RDN 項(包含資料的型別/值對),後跟必需的物件類。要建立 LDIF,使用純文字編輯器,然後輸入想要新增到目錄中的資料。使用我們的上一個示例:

dn: uid=juser,ou=people,dc=syroidmanor,dc=com

uid: juser

cn: Joe User

givenname: Joe

sn: User

mail: juser@syroidmanor.com

objectClass: top

objectClass: mailRecipient

objectClass: person

objectClass: inetOrgPerson

儲存檔案(比如,example.ldif),在控制檯視窗或命令列上,輸入:

[root@thor root]# ldapadd -x -D "cn=root,dc=syroidmanor,dc=com" -W -f sample.ldif

將提示您輸入 rootdn 密碼,透過認證後,包含在 LDIF 中的資料將被寫入 LDAP 資料庫。

LDIF 方法的優缺點

LDIF 方法既有優點也有缺點。其優點為:

在將檔案匯入資料庫之前,您可以檢查拼寫和語法。

可以建立帶有許多項的 LDIF 檔案,然後用一個操作將它們新增到目錄中。

如果匯入失敗,只要開啟 LDIF 檔案,查詢錯誤,並嘗試重新匯入即可。

LDIF 檔案是一種開放標準,幾乎可以將它們匯入到任何目錄伺服器中。

其缺點為:

該過程仍需要較大的工作量 — 必須輸入 LDIF 中的所有項,並遵循正確的語法。

當 LDAP 伺服器遇到匯入檔案中的錯誤時,它並不總是能方便地處理。雖然您可能會得到一條“syntax error(語法錯誤)”訊息,但它不會告訴您,在一個相當大的 LDIF 檔案中,錯誤在哪裡。

歸結起來講,比起從命令列手工輸入資料,LDIF 檔案有某些明顯的優勢。但您仍必須遵守正確的語法來將聯絡人資訊輸入檔案,並將它匯入目錄中。有沒有一個更自動化的方法來填充 LDAP 資料庫呢?— 請繼續讀下去。

指令碼方法

可以使用通常用 Perl 或 PHP 編寫的指令碼,它們的目的是接收您的資料並將它“自動”放到 LDAP 目錄中。這種方法有兩個問題。首先,也是最重要的,我親自嘗試過的任何指令碼都有許多可惡的錯誤,在某些最壞的情形下,會在匯入期間毀壞您的資料或者破壞目錄樹本身。其次,使用指令碼匯入資料假設資料已經以某種形式存在。當分別從 /etc/passwd 和 /etc/groups 匯入使用者密碼和組資訊時,這當然很好,但您的聯絡人資訊可能不是通常可識別的格式。畢竟,本教程的主要目的是使聯絡人資訊不受專用格式的支配。

如果將聯絡資訊資料匯出成純文字、用逗號分隔的檔案,並找到能夠將資料匯入 LDAP 目錄的指令碼,會怎麼樣呢?如果可以找到這種指令碼,並且如果它執行得如它所宣稱的那樣,則您會得到所有的功能。請記住,您的電子郵件客戶機對“用逗號分隔的檔案”有其自己精確的解釋。要在每行結束的地方新增回車嗎?匯出程式如何處理嵌入欄位中的空格?某些人通常竊用 LDAP 匯入指令碼來將他們的資料從應用程式 A(已經以格式 X 匯出)傳送到 LDAP 目錄。如果他們的應用程式和匯出格式與您的相合,則嘗試它。不過要確保先備份您的目錄資料庫,這樣,如果匯入失敗,您就可以返回到“已知的好”狀態。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/8225414/viewspace-940591/,如需轉載,請註明出處,否則將追究法律責任。

相關文章