建立开源目录服务

时间:2022-07-06 09:32:56

建立开源目录服务

现在市场上有关LDAP的产品已有很多,各大软件公司都在它们的产品中集成了LDAP服务。而OpenLDAP是LDAP的一种开源实现,其功能一点不比商业产品差,而且源码开放。

企业有许多验证数据库散布在网络上,这很常见。譬如说,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文件(/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

第一项工作就是在配置文件中设定域,在我们安装的系统中,这个文件是/usr/local/etc/openldap/slapd.conf(slapd是提供LDAP服务的程序)。

suffix "dc=techworld,dc=com"

这个后缀定义了所要使用的域的顶级,这样只能在这个域里面定义数据项,除非为配置文件添加了其他域。这里,把域设置成域。接下来,需要把超级用户的名称告诉系统。会在域里面使用用户名ldapadmin:

rootdn "cn=ldapadmin,dc=techworld,dc=com"

rootpw {SSHA}70u1ktNLJSC7tCatm1cAhVX58wnfv4BP

rootpw即超级用户密码是我们之前从slappasswd获得的那个字符串。这比把明文格式的密码放到配置文件里面安全多了。最后,需要告诉服务器它应当索引目录中的哪些字段:

index objectClass eq

index cn,sn,uid pres,eq,approx,sub

MORE IN HERE

现在只需要运行服务器就可以了:

/usr/local/libexec/slapd

管理目录

一旦让目录服务运行起来,就可以从Unix/Linux系统的命令行来管理它。譬如说,只要使用bash往文本文件里面加入相应的行,就可以把顶级域信息和ldapadmin用户的具体信息添加到目录中(即使这种信息在配置文件中已有指定,也需要这样做):

# Techworld的组织记录

dn: dc=techworld,dc=com

objectClass: dcObject

objectClass: organization

dc: Techworld

o: Techworld

description: The Techworld Directory

# ldapadmin用户在组织中的角色

dn: cn=ldapadmin,dc=techworld,dc=com

objectClass: organizationalRole

cn: ldapadmin

description: LDAP administrator

然后使用下面这个ldapadd命令,导入到目录里面(这里把该文件称为techworld.ldif):

ldapadd -f techworld.ldif -x -D "cn=ldapadmin,dc=techworld,dc=com" -w techworld

不过,大多数人认为现在流行使用某种GUI工具。利用Google搜索引擎可以找到许多这类工具,随用户挑选。我们决定试用Softerra的LDAP Administrator 3.4(该商用软件价格为175美元)。

虽然可以使用LDAP用于基本的用户验证,当然也可以探究其他比较复杂的应用。譬如说,对于从Unix/Linux服务器上使用SAMBA软件来提供Windows文件共享服务的人来说,可以把SAMBA指向LDAP目录,而不是让它使用自己的专有密码文件。(小黑)

链接:目录与数据库

目录是一种专门的数据库,它服务于各种应用程序,包括LDAP(轻量级目录访问协议)目录和基于X.500的目录。这些目录都是通用的标准的目录。虽然目录也被称为特殊的数据库,但它不同于真正的数据库。目录的大部分操作为读操作。假如应用程序要写大量的数据,就应该考虑选择使用数据库来实现。目录支持相对简单的事务处理。相反,数据库被设计成处理大量的各种各样的事务处理。假如应用要求这种重负荷的事务支持,应该选择数据库而不是目录。在另一方面,假如应用不要求这样的大负荷事务处理,而是偶尔地写一些简单的事务信息。这时,目录是理想的选择。它会更有效,更简单。

上一篇:KVM实现机房安全“一手抓” 下一篇:文化信息共享众口难调