企业有许多验证数据库散布在网络上,这很常见。譬如说,Windows服务器上可能有一个用户数据库; Linux邮件服务器上有另一个用户数据库
。另外负责对VPN用户进行验证的防火墙有内部用户列表; 网络防病毒软件的远程控制系统可能还有一个用户列表。结果有一批不同的数据库需要独立维护,所以要是某个数据库的密码发生变化,这种变化在其他数据库中却不会有。
目录服务旨在把所有识别和验证信息都集中到易于控制的单一实体里面。目录服务这个名称恰如其分地描述了它的功能: 充当“目录”,联网部件就可以使用该目录来查询有关人员及使用网络的其他设备的信息。
联网设备访问目录服务的一种常见方法就是使用轻型目录访问协议(LDAP)。LDAP是一种标准化、相对简单的机制,让客户端设备能够查询目录服务。能够集成到外部用户数据库的任何设备都有可能使用LDAP来完成这项任务。
而OpenLDAP是LDAP的一种开源实现。OpenLDAP可以在大多数现代的Unix和Linux 上运行。实际上,在考虑下载OpenLDAP之前,先检查一下它是不是已经安装在现有的系统上了,或者已包括在其他软件的安装光盘上只是没有安装。该软件包是作为一批源文件来提供的,所以必须自行编译,但这不会有太大难度,只要逐步遵照安装指示,就能自行构建。一旦下载了软件,并解压缩到所选择的服务器上,就可以运行配置脚本。脚本就会查找机器,弄清楚有哪种类型的Unix,然后执行以下的命令:./configure。
一旦配置过程运行起来,就告诉它运行并建立各种源代码目录,所用选项由make depend配置命令来确定。这一步只需要几分钟。接下来是重要的任务:对代码进行编译(make)。这项工作的工作量很大,所以需要一段时间(PⅢ服务器上执行大约需要10分钟)。一旦编译完毕,就可以运行一套测试程序(make test),确保一切都正常。整个过程自动进行,但因为有40多个不同的测试要运行,所以可能也需要等待一段时间。
最后,如果测试一切正常,就可以安装软件了(确保是root用户,因为只有root用户才有权写到系统目录上,使用普通登录身份的用户无权操作),指令是make install。
配置OpenLDAP
一旦该产品安装完毕,就可以进行相应的配置了。在本文的简单示例中,我们准备把OpenLDAP组建成提供用户身份和信息的基本服务器(VPN服务器或者拨号调制解调器服务器等联网设备通常使用这些信息,用于身份验证)。
这里要明白的第一件事就是模式(schema)概念。简单地说,模式描述了用户所要保存数据的类型。现在,如果之前已经使用了任何一种目录服务,可能会遇到 dc=techworld、dc=com或者sn=Bloggs这些类似密文的东西,实际上,在Windows服务器里面创建用户身份时,可能看到过服务器生成的这些东西,但用不着知道具体过程。
默认情况下,OpenLDAP只使用“核心模式”(core schema)。这是几乎任何目录活动都使用的一组基本数据。实际上,用户可以在《与LDAPv3 一起使用的X.500(96)用户模式的摘要》这份RFC2256文件(http://www.ietf.org/rfc/rfc2256.txt)里面看到核心模式的定义。在LDAP目录中看到的数据项从X.500目录系统的规范继承而来。如果全部使用,X.500目录系统庞大而复杂。不过其命名模式相当全面,所以LDAP直接采用了它,而不是重新设计自己的命名模式。
核心模式里面大约有50个左右的数据项,既有简单的数据项,例如sn(姓)和street(地址的州部分);也有复杂的数据项,例如certificateRevocationList(用于存储已知被证书颁发机构撤销的SSL证书列表)。
为了使OpenLDAP可以运行起来,我们需要知道几个关键的内容: 目录将为之服务的域名、超级用户的密码、超级用户的用户名、各个OpenLDAP文件在服务器上的位置。所以,在开始之前,我们需要生成一个加密的超级用户密码。做这一步是因为密码要粘贴到配置文件里面,因为不希望密码是一个明文字符串,所以我们使用slappasswd命令。
[root@localhost ~]# slappasswd
New password:
Re-enter new password:
{SSHA}70u1ktNLJSC7tCatm1cAhVX58wnfv4BP
系统会提示输入密码,然后重新输入,之后得到类似密文的字符串。这基本上告诉了我们: slappasswd选择使用带有种子值(seed)的SHA-1散列函数,其结果是字符串。
现在回到配置过程。安装过程会在服务器磁盘上的某个地方创建一个名为slapd.conf的配置文件。顺便说一下,slapd是实际提供目录服务的那个程序的名称。我们的配置文件被安装程序放到了/usr/local/etc/openldap/slapd.conf。另外,设置例程会往配置文件里面加入一些必要的行,告诉系统其关键目录的位置:
pidfile /usr/local/var/run/slapd.pid
argsfile /usr/local/var/run/slapd.args
directory /usr/local/var/openldap-data