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 盘根目录下。

version: 1 # 为: dc=example,dc=com,导出LDIF # 由phpLDAPadmin ( http://phpldapadmin.sourceforge.net/ ) 在 September 11, 2008 8:33 am上生成的 # 服务器: My LDAP Server (10.128.12.16) # 搜索范围: sub # 搜索过滤器: (objectClass=*) # 条目总数: 15 dn: dc=example,dc=com dc: example description: My wonderful company as much text as you want to place in this line up to 32K continuation data for the line above must have or < LF> i.e. ENTER works on both Windows and *nix system - new line MUST begin with ONE SPACE objectClass: dcObject objectClass: organization o: Example, Inc. dn: ou=customers,dc=example,dc=com objectClass: organizationalUnit ou: customers description: customer address book branch dn: ou=equipment,dc=example,dc=com objectClass: organizationalUnit ou: equipment description: IT assets branch dn: cn=LP1,ou=equipment,dc=example,dc=com objectClass: device cn: LP1 description: Some brand of printer serialNumber: 1-77-23-15 l: Room 17 owner: cn=John Smith,ou=people,dc=example,dc=com ou: printers dn: ou=groups,dc=example,dc=com objectClass: organizationalUnit ou: groups description: generic groups branch dn: cn=hrpeople,ou=groups,dc=example,dc=com objectClass: groupOfNames cn: hrpeople description: Human Resources group member: cn=Robert Smith,ou=people,dc=example,dc=com dn: cn=itpeople,ou=groups,dc=example,dc=com objectClass: groupOfNames cn: itpeople description: IT security group member: cn=William Smith,ou=people,dc=example,dc=com dn: cn=salespeople,ou=groups,dc=example,dc=com objectClass: groupOfNames cn: salespeople description: Sales group member: cn=John Smith,ou=people,dc=example,dc=com dn: ou=people,dc=example,dc=com ou: people description: All people in organisation objectClass: organizationalUnit dn: cn=John Smith,ou=people,dc=example,dc=com objectClass: inetOrgPerson cn: John Smith cn: John J Smith sn: Smith uid: jsmith userPassword: jSmitH carLicense: HISCAR 124 homePhone: 555-111-2223 mail: [email protected] mail: [email protected] mail: [email protected] ou: Sales dn: ou=addressbook,cn=John Smith,ou=people,dc=example,dc=com objectClass: organizationalUnit ou: addressbook description: Personal Address Book dn: cn=Robert Smith,ou=people,dc=example,dc=com objectClass: inetOrgPerson cn: Robert Smith cn: Robert J Smith cn: bob smith sn: smith uid: rjsmith userPassword: rJsmitH carLicense: HISCAR 123 homePhone: 555-111-2222 mail: [email protected] mail: [email protected] mail: [email protected] description: swell guy ou: Human Resources dn: ou=addressbook,cn=Robert Smith,ou=people,dc=example,dc=com objectClass: organizationalUnit ou: addressbook description: Personal Address Book dn: cn=Sheri Smith,ou=people,dc=example,dc=com objectClass: inetOrgPerson cn: Sheri Smith sn: smith uid: ssmith userPassword: sSmitH carLicense: HERCAR 125 homePhone: 555-111-2225 mail: [email protected] mail: [email protected] mail: [email protected] ou: IT dn: ou=addressbook,cn=Sheri Smith,ou=people,dc=example,dc=com objectClass: organizationalUnit ou: addressbook description: Personal Address Book
接着在 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 就知道了。

你可能感兴趣的:(apache,Web,PHP,server,firefox,extension)