phpLDAPadmin 安裝配置講解,通過 Web 端來管理您的 LDAP 伺服器
阿新 • • 發佈:2019-01-24
做企業應用的也不時要與 LDAP 打交道的,例如組織架構、人員的管理,許可權的分級控制等。以前管理 LDAP 都是用客戶端工具 LDAP Browser 什麼的,有時不甚方便。幸運的是,網上有一個現成的、功能完備的 LDAP Web 管理工具,那就是赫赫有名的 phpMyAdmin 的姊妹 phpLDAPadmin。
Web 方式的 phpLDAPadmin 利於釋出,隨處使用,基本上它有 LDAP Browser 客戶端工具的所有功能,諸如條目管理、屬性管理、匯入匯出、條件搜尋等。還有比 LDAP Browser 所沒有的 Schema 資訊明細展示功能。
phpLDAPadmin 的介面截圖請見: http://phpldapadmin.sourceforge.net/screenshots.php
您也可以進到 phpLDAPadmin 的 Demo 站點:http://thesmithfam.org/phpldapadmin-demo/htdocs/index.php 先睹為快。
本篇就來介紹 phpLDAPadmin 的安裝及體驗,讀者最好是對 Apache、PHP、LDAP 有一定的瞭解。因未涉及非常具體的安裝細節,只揀關鍵之處說明,所以如若對以上幾個太過陌生的,可能中間稍有差池就要費些思量了。
一:軟體準備
1. Apache HTTP Server,版本可選擇 1.x 或 2.x,到 http://httpd.apache.org/
2. OpenLDAP for Windows,文中版本是 2.2.29,可從 http://download.bergmans.us/openldap/openldap-2.2.29/openldap-2.2.29-db-4.3.29-openssl-0.9.8a-win32_Setup.exe 下載。當然你也可以選擇其他的版本。
3. PHP 5,本文所用版本為 5.2.6,從 http://cn.php.net/distributions/php-5.2.6-Win32.zip
4. phpLDAPadmin,目前版本是 1.1.0.5,不過本文仍使用 1.1.0 版本,因為 1.1.0.5 我使用中有些問題,可從 http://nchc.dl.sourceforge.net/sourceforge/phpldapadmin/phpldapadmin-1.1.0.zip 下載。
二:軟體安裝
1. Apache 的安裝
這個東西的安裝、啟動和停止就不多說了,用 %APACHE_HOME% 表示 Apache 的安裝目錄。
2. OpenLDAP 的安裝配置
請參考之前寫過的一篇日誌:Windows下安裝使用openldap。當然,你也可以藉此連線到一個已有的 LDAP 伺服器,那麼這一步就可以直接跳過。
只是我們將使用 OpenLDAP Samples(http://www.zytrax.com/books/ldap/ch5/index.html) 中的目錄結構。所以與前面不同的是要把 OpenLDAP 安裝目錄下的 slapd.conf 中的 suffix、rootdn 和 rootpw 分別改為如下:
suffix "dc=example,dc=com"
rootdn "cn=jimbob,dc=example,dc=com"
rootpw dirtysecret
然後拷貝下面文字框中的內容儲存為 example.ldif 檔案,比如放在 C 盤根目錄下。
接著在 slapd -d 1 啟動了 OpenLDAP 後,再用命令
ldapadd -x -D "cn=jimbob,dc=example,dc=com" -w dirtysecret -f c:/example.ldif
匯入到 OpenLDAP 中。匯入後 LDAP 的目錄結構如下圖所示:
3. PHP 的配置
下載的 PHP 解壓到某個目錄下,用 %PHP_HOME% 表示這個目錄。
關於 PHP 與 Apache 的結合,參考 %PHP_HOME% 目錄下的 install.txt 檔案。簡單說就是:
1) 修改 %APACHE_HOME%/conf/httpd.conf 檔案,我們以 Apache module 模組方式配置,在末尾加上下面三行
LoadModule php5_module "%PHP_HOME%/php5apache.dll"
#對於 Apache 2 則載入 php5apache2.dll,寫成
#LoadModule php5_module "%PHP_HOME%/php5apache2.dll"
AddType application/x-httpd-php .php
#指定 php.ini 檔案的置,預設是在 %windir% 目錄下
PHPIniDir "%PHP_HOME%/"
說明:%PHP_HOME% 替換為實際的路徑
2) 把 %PHPE_HOME%/php.ini-recommended 檔案更名為 php.ini,然後修改其中的
extension_dir = "%PHP_HOME%/ext"
然後把 extension=php_gettext.dll 和 extension=php_ldap.dll 前面的分號(;) 註釋符去掉,儲存。明顯我們的 php 要用到 ldap 庫,還有在 phpLDAPadmin 中使用了 GETTEXT 來實現國際化。
3) 還要使得 Apache 啟動時能載入到 %PHP_HOME% 下的 libeay32.dll 和 ssleay32.dll 這兩個檔案,我們不妨把這兩個檔案拷到 %APACHE_HOME% 目錄下即可。
4) 最後我們來測試一下 PHP 安裝是否成功,在 %APACHE_HOME%/conf/httpd.conf 的 DocumentRoot 所指向的站點主目錄中新建一個 phpinfo.php,在裡面寫上:
<?php phpinfo(); ?>
啟動 Apache,在瀏覽器中用 http://localhost/phpinfo.php 看看是不是顯示了 php 的相關資訊,並且能找到啟用了 LDAP 和 GETTEXT,OK,到這一步就完成一大半了。
4, phpLDAPadmin 的安裝配置
1) 把下載的 phpLDAPadmin 解壓到 Apache 的站點主目錄中,目錄命名為 phpldapadmin,如 %APACHE_HOME%/htdocs/phpldapadmin,用 %PHP_LDAP_ADMIN_HOME% 來表示這個目錄。
2) 把 %PHP_LDAP_ADMIN_HOME% /config/config.php.example 更名為 config.php,這個檔案中對於各項的配置有很詳細的說明。
3) 修改以上的 config.php 檔案
注意,如果是連線用來連線到本機的 389 埠上的 LDAP 服務,不用修改此檔案都行,到時在介面上直接輸入登入使用者的 DN 和密碼即可。
在該檔案中找到行
$ldapservers->SetValue($i,'server','name','My LDAP Server');
並把這一行隨後的
// $ldapservers->SetValue($i,'server','host','127.0.0.1');
// $ldapservers->SetValue($i,'server','port','389');
// $ldapservers->SetValue($i,'server','base',array(''));
// $ldapservers->SetValue($i,'server','auth_type','cookie');
# $ldapservers->SetValue($i,'login','dn','cn=Manager,dc=example,dc=com');
# $ldapservers->SetValue($i,'login','pass','secret');
去掉註釋符(// 或 #),再依據前面的 OpenLDAP 配置依次改為
$ldapservers->SetValue($i,'server','host','localhost');
$ldapservers->SetValue($i,'server','port','389');
$ldapservers->SetValue($i,'server','base',array('dc=example,dc=com'));
$ldapservers->SetValue($i,'server','auth_type','cookie');
$ldapservers->SetValue($i,'login','dn','cn=jimbob,dc=example,dc=com');
$ldapservers->SetValue($i,'login','pass','dirtysceret');
以上那個屬性不設定,則取預設值,如預設 host 為 localhost,port 為 389,base 為空則自動檢測,auth_type 為 cookie,dn 和 pass 不設值則要求介面輸入。
3) 如果要同時管多個 LDAP 伺服器,則可在這個 config.php 檔案中參照 $i++; 所在的註釋塊配置其他的 LDAP 伺服器引數,配置了多個可以在 WEB 介面上通過下拉選擇當前的的 LDAP 伺服器。
三. 體驗 phpLDAPadmin 在瀏覽器上訪問 http://localhost/phpldapadmin/index.php, 點選左側 My LDAP Server 下的 Login ...,輸入 登入 DN 為 cn=jimbob,dc=example,dc=com 和密碼為:dirtysecret,點選認證按鈕就能連線上 LDAP 伺服器進行管理了。這裡掛上一個搜尋的介面。
四. 一些問題
1. 為什麼用 phpLDAPadmin 1.1.0,而不用目前最新版 1.1.0.5,因為 1.1.0.5 主要有兩個問題:
1) 經常頁面出現亂碼,每次需手工選擇網頁編碼為 UTF-8,1.1.0 下正常。
2) 即使在 config.php 中提供了登入 DN 和 密碼,auth-type 是 cookie,也是不能自己登入的,一定要輸入密碼手工點一點認證按鈕,1.1.0 下正常
2. 注意 PHP 的版本,以及是否開啟了 LDAP 和 GETTEXT 支援。我首先拿到的 phpLDAPadmin 版本是 1.1.0-alpha3,看其中的 INSTALL 檔案裡寫著的是:
PHP 4.1.0 or newer (with LDAP support)
其實我還是比較大方的,直接用了 PHP 4.4.9 來伺候它,LDAP 也開了,結果它不領情。出現了這樣的錯誤:
php unexpected T_STRING, expecting T_OLD_FUNCTION or T_FUNCTION or T_VAR or '}'
定位在 PHP 類的變數宣告上,如 public、private 和 clone 操作上,原因是 PHP 4 不支援這個,只能用 var,所以要換 PHP 5 才行。
還有 phpLDAPadmin 絕口未提要 GETTEXT 來支援它的國際化,害我從原始碼中才翻出這一底細,即使是後續版本也對此默聲不語。況且 PHP 4 本身就沒有內建對 GETTEXT 的支援,嘗試著安裝 gettext for Win32 也不奏效,那就順手移到 PHP5 上吧,在 php.ini 中把 GETTEXT 也開啟,一切解決。
在 phpldapadmin/htdocs/index.php 中有這麼一段程式碼:
# Make sure this PHP install has gettext, we use it for language translation
if (! extension_loaded('gettext'))
pla_error('<p>Your install of PHP appears to be missing GETTEXT support.</p><p>GETTEXT is used for language translation.</p><p>Please install GETTEXT support before using phpLDAPadmin.<br /><small>(Dont forget to restart your web server afterwards)</small></p>');
3. 有關 php.ini 和 config.php 的詳細配置見這兩檔案本身吧,它們是自文件的,例如可以適當的裁剪一些 PHP 的功能。以及 PHP 和 Apache 的搭配也應見 PHP 的 install.txt。最後為方便訪問,在 Apache 的 httpd.conf 中為
DirectoryIndex index.html index.php
把 index.php 也加上,如上形式。
本篇只關注如何配置 phpLDAPadmin 使用,碰到問題實際解決而已。旨在為我們開發中使用 LDAP 提供一個便利的工具而已,或有些用處。不用在 PHP 上糾纏,畢竟 PHP 太久沒用過了,也不清楚現在演化成什麼樣子了。
4. 另外,若是你的 phpLDAPadmin 頁面要載入的資料資訊過於龐大時,建議用 FireFox,因為 FireFox 與 IE 的機制不一樣,FireFox 首先會申請一大塊記憶體,所以顯示大量資料資訊的頁面時不會像 IE 那樣拖不動。用 FireFox 和 IE 分別試著訪問一下 Blogjava 首頁面的,更多部落格連線 http://www.blogjava.net/AllBloggers.aspx 就知道了。