1. 程式人生 > >phpLDAPadmin 安裝配置講解,通過 Web 端來管理您的 LDAP 伺服器

phpLDAPadmin 安裝配置講解,通過 Web 端來管理您的 LDAP 伺服器

做企業應用的也不時要與 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/
 下載。本文測試用的是 Apache 1.3.28。我偷了一下懶,直接用了安裝 WAS 5.1 裝上的 IBM HTTP Server。

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
 下載。因為這裡的 phpLDAPadmin-1.1.0.5 要求是 PHP 5。

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 的目錄結構如下圖所示:

LdapBrowserSample.jpg
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 伺服器進行管理了。這裡掛上一個搜尋的介面。

phpLDAPadmin.jpg
四. 一些問題

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 就知道了。