簡介: 您是否曾經設法與某個使用不同數據格式的人共享您的聯繫人列表,或者設法將您的地址簿遷移到另一個應用程序?如果是這樣的話,您知道這是件令人頭痛的事。導入和導出方案(如果它們確實存在)通常很笨拙而且使用起來不能令人滿意,即使只使用一次也是如此,更不用說經常使用了。歡迎使用輕量級目錄訪問協議(Lightweight Directory Access Protocol)。本教程向您演示瞭如何創建一個基於 LDAP 的後端來存儲多個應用程序可以方便共享的聯繫人信息。同時,我們提供了 LDAP 基礎知識的概述,並向您介紹了一個預先構建的聯繫人管理工具,該工具將幫助您着手使用這一開放技術。
在大多數基於軟件包的系統上(例如,在基於 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 |
其它分發版在程序的封裝和命名方式方面不同;有關詳細信息,請參考文檔。
安裝了必需的軟件之後,下一步是要配置服務器。首先,備份原始配置文件以供今後參考( 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
項控制誰可以對目錄數據庫進行寫操作,以及他們要這樣做所必須提供的密碼。請確保閱讀“訪問控制”一章結束部分的註釋:
# 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 分發版。
配置 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 以及它們做些什麼的說明。
# 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
。
完成基本配置之後,應該將一些有用的項填充到數據庫。
更簡單的一句話:
access to *
by * read
除了root 用戶可以讀寫外。其他用戶都只讀