歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux綜合 >> Linux資訊 >> 更多Linux >> 安裝和配置OPENLDAP

安裝和配置OPENLDAP

日期:2017/2/27 14:21:58   编辑:更多Linux
  必需的軟件包 在大多數基於軟件包的系統上(例如,在基於 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: [email protected] 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: [email protected] 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 目錄。如果他們的應用程序和導出格式與您的相合,則嘗試它。不過要確保先備份您的目錄數據庫,這樣,如果導入失敗,您就可以返回到“已知的好”狀態。





Copyright © Linux教程網 All Rights Reserved