OpenLDAP 2.1 管理员指南
The OpenLDAP Project <http://www.openldap.org/>
9 June 2002
该中文文档由 NTKO 翻译
E-mail: dominoreg@sina.com
Any comments are welcome!
This document is form OpenLDAP 2.1 Administrator’s Guide English Version
由于时间关系,质量一般。尤其是5.3章!
欢迎指正。
目录
Copyright 1998-2001, The OpenLDAP Foundation, All Rights Reserved.
Copyright 1992-1996, Regents of the University of Michigan, All Rights Reserved.
中文版由NTKO翻译。E-mail: dominoreg@sina.com。分发该文档务必保留有关中文版的翻译信息和所有其他的版权信息。
该文档提供了为在UNIX或者类UNIX的系统上安装OpenLDAP 2.1软件(http://www.openldap.org/software/)提供了一个指南。该文档面向有经验的系统管理员。但是,他可以没有运行一个基于LDAP目录软件的经验。
该文档应该和随该软件包一起提供的其他的OpenLDAP信息资源,以及和WWW上该项目的站点(http://www.OpenLDAP.org/)上提供的信息一起使用。该站点提供了大量的资源。
| OpenLDAP Resources |
|
| Resource |
URL |
| Document Catalog |
|
| Frequently Asked Questions |
|
| Issue Tracking System |
|
| Mailing Lists |
|
| Software Pages |
|
| Support Pages |
|
OpenLDAP Project由一个志愿者小组组成。没有他们贡献的时间和精力,该文档不可能形成。
OpenLDAP项目同时还感谢University of Michigan LDAP,他们创建了LDAP软件的基础。并且OpenLDAP软件就是在他们的软件之上创建的。该文档也是在U-Mich的LDAP文档:The SLAPD and SLURPD Administrators Guide的基础上形成的。
任何对于该文档的改正和完善建议应该使用OpenLDAP 的Issue Tracking System (http://www.openldap.org/its/)提交。
该文档使用由Ian Clatworthy开发的简单文档格式(Simple Document Format)文档系统(http://www.mincom.com/mtr/sdf/)创建。
该文档描述了如何编译,配置和运行OpenLDAP软件来提供目录服务。包含了如何配置和运行独立的LDAP daemon,slapd(8),以及如何配置运行独立的LDAP更新复制daemon,slurpd(8)的详细信息。该文档面向新手和有经验的系统管理员。本部分提供了对目录服务的一个基本的介绍,特别是对slapd(8)提供的目录服务。
一个目录服务是一个特殊的数据库,它为读,浏览和搜索进行了优化。目录可以用来保存描述性的,基于属性的信息,并且支持复杂的过滤搜索能力。目录通常不支持在一般的数据库管理系统中支持的复杂的事务处理或者回滚机制——这些机制是为处理大容量的复杂更新操作而设计的。目录更新只是简单的“所有或者没有”的更新——如果它们被允许的话。目录被优化为针对大量的查找或者搜索操作进行快速的响应。它们可以具有大范围复制信息的功能,以便提高可用性和可靠性,同时缩短响应时间。
当目录中的信息被复制的时候,复本之间信息的暂时不一致是允许的,只要它们最终达到了一致。
有许多种不同的方法来提供一个目录服务。不同的方法允许在目录中存储不同种类的信息,因此,信息如何被引用,查询和更新的要求也就不同,信息被保护并拒绝未经授权访问的方式等等也就不同。一些目录服务是本地的,提供有限制的服务(比如,一个运行在单一机器上的finger服务)。还有一些服务是全局的,提供大的多的规模的服务(比如,整个Internet)。全局服务通常是分部的。这意味着他们保存的数据在许多台机器上分部,所有这些机器合作提供目录服务。典型情况下,一个全局服务定义了一个统一的名字空间,无论您从何处开始和数据关联,该名字空间都会提供相同的数据视图。Internet域名系统就是一个全局分布的目录系统服务的实例。
LDAP代表轻型目录访问协议。正如名字中表示的,它是一个用来访问目录服务,尤其是基于X.500的目录服务的轻型协议。LDAP运行在TCP/IP协议或者其他的面向连接的传输服务之上。LDAP的详细本质在RFC2251“轻型目录访问协议(V3)”中定义。本部分从用户的角度给出了LDAP的概述。
什么类型的信息可以被保存在目录中?LDAP的信息模型是建立在“条目”(entries)的基础上。一个条目是一个属性的集合,并且具有一个全局唯一的“可区分名称”DN。该DN被用来唯一的引用该条目。每一个条目的属性具有一个类型和一个或者多个值。类型通常是容易记忆的名称,比如“cn”是通用名称(common name),或者“mail”是电子邮件地址。条目的值的语法取决于属性类型。比如,cn属性可能具有一个值“Babs Jensen”。一个mail属性可能包含值“babs@example.com”。一个jpegphoto属性可能包含一幅JPEG(二进制)格式的图片。
信息是怎样组织的?在LDAP中,目录条目以一个层次的树结构来安排。传统上,该结构反映了地理的或者组织结构上的边界。条目代表国家,出现在树的顶部,下面是代表州或者地理组织的条目,它们下面可能是代表组织单元,个人,打印机,文档或者只是任何其他的你能想到的东西的条目。图1.1显示了一个使用传统命名的LDAP目录树的例子:
图1.1: LDAP目录树(传统命名方式)
该树同样可以根据Internet域名来安排。这种命名方式逐渐普遍,因为它允许目录服务使用域名系统来定位。图1.2显示了一个使用基于域名的命名方式的LDAP目录树的示例。
另外,LDAP通过使用一个特殊的,叫做objectClass的属性来允许您控制哪一个属性必须出现或者允许出现在一个条目中。objectClass属性的值决定了该条目必须遵守的模式规则。
信息是怎样被引用的?一个条目通过它的DN被引用。该DN使用如下方式构造:首先得到条目自己的名称(相对DN,RDN),然后连接上其祖先条目的名称。比如,图1.2的基于Internet的命名方式中的Barbara Jensen的条目,具有一个RDN:uid=babs。和一个DN:uid=babs,ou=People,dc=example,dc=com。完全的DN格式在RFC2253“Lightweight Directory Access Protocol (v3): UTF-8 String Representation of Distinguished Names”中描述。
图1.2: LDAP目录树(基于Internet的命名)
信息是如何被访问的?LDAP定义了查询和更新目录的操作。还提供了从目录中增加和删除一个条目的操作,以及改变条目名称的操作——虽然大多数时间LDAP被用来在目录中搜索信息。LDAP搜索操作允许搜索目录的一部分,查找匹配由某个搜索过滤器指明的规则的条目。然后就可以从匹配规则的每一个条目中获取信息。
比如,您需要搜索在dc=example,dc=com条目之中或者之下的整个目录子树,查找一个名字叫做Barbara Jensen的个人,并且获取每一个找到的条目的电子邮件地址。LDAP让您简单的做到这一点。或者,您可能需要搜索直接在st=California,c=US条目之下的条目,查找一个组织名字中包含字符串Acme,并且具有传真号码的组织。LDAP也允许您做到这一点。下一部分将更详细的描述您可以使用LDAP做什么,以及为什么它对您很有用。
信息是怎样被保护以拒绝未经授权的访问?一些目录服务提供了未经保护的信息,允许任何人看到这些信息。LDAP提供了一种机制,让客户端进行认证,或者向目录服务器证实它的身份,这为保护服务器包含的信息提供丰富的存取控制铺平了道路。LDAP同时还支持机密性,完整性和安全性的服务。
LDAP目录基于客户/服务器方式实现。一个或者多个LDAP服务器包含了组成目录信息树(DIT)的数据。客户连接到服务器并提问,服务器返回答案或者一个指向其他信息的指针(通常是另外一个LDAP服务器)无论客户首先连接到哪一个LDAP服务器,它看到相同的目录视图。提交到一个LDAP服务器的名字和另外一个LDAP服务器将引用了相同的条目。这是一个全局目录服务,比如LDAP的一个重要特性。
从技术上说,LDAP是一个访问一个X.500目录服务——OSI目录服务的目录访问协议。最初,LDAP客户端通过网关访问目录服务。该网关运行LDAP(在客户和网关之间)和X.500的目录访问协议(DAP)(在网关和X.500服务器之间)。DAP是一个重量级的协议,运行在去安全的OSI协议栈之上,需要消耗大量的计算资源。LDAP被设计出来运行在TCP/IP上,并且以低的多的代价提供了大多数DAP所能提供的功能。
虽然LDAP仍然可以被用来通过网关来访问X.500目录服务,现在,LDAP更多的被直接在X.500服务器上实现。
独立的LDAP daemon,或者说slapd(8),可以被看作是一个轻型的X.500目录服务器。也就是说,它没有实现X.500的DAP,作为一个轻型的目录服务器,slapd(8)只是实现了X.500模型的一个功能子集。
如果您已经运行了一个X.500 DAP服务器,并且您想继续这样做,您可以停止阅读本指南。该指南都是关于通过slapd(8)来运行LDAP的,没有运行X.500 DAP。如果您没有运行X.500 DAP,或者想停止运行X.500 DAP,或者没有马上运行X.500 DAP的计划,请继续阅读。
从一个LDAP目录服务器向一个X.500 DAP DSA复制数据是可行的。这需要一个LDAP/DAP网关。OpenLDAP没有提供这样一个网关。但是,我们的复制daemon可以被用来向这样的网关进行复制。参阅本文档的“使用SLURPD进行复制”一章获得有关复制的信息。
LDAPV3增加了下面的特性:
¢ 使用SASL进行强度认证;
¢ 使用TLS(SSL)进行完整性和安全保护;
¢ 使用UNICODE支持国际化;
¢ 引用和持续
¢ 可扩展性(控制和扩展操作)
¢ 支持模式发现
同时支持LDAPV2和V3是有问题的,应该尽量避免。因为LDAPV3包含了LDAPV2的所有特性,因此,推荐使用LDAPV3;
SLAPD(8)是一个跨平台的LDAP服务器。可以使用它来提供自己的目录服务。自己的目录可以包含任意多的信息。可以将它和一个全局的LDAP目录服务相联接,或者只是自己运行一个服务。下面是SLAPD的更多特性:
SLAPD实现了LDAP协议的V3版本。并且支持IPV4和IPV6上的LDAP。
SLAPD通过使用SASL来支持强度认证服务。SLAPD的SASL实现使用了Cyrus SASL软件,该软件支持大量的认证机制,包括DIGEST-MD5,EXTERNAL和GSSAPI。
SLAPD通过使用TLS(或者SSL)来提供完整性和安全保护。SLAPD的TLS实现使用了OpenSSL软件。
SLAPD允许给予网络拓扑控制对服务器的访问。这个特性使用了TCP wrappers。
SLAPD提供了丰富和功能强大的存取控制手段,允许控制数据库的信息。可以基于LDAP的认证信息,IP地址,域名或者其他的条件来控制对条目的存取。SLAPD支持静态和动态的存取控制信息。
SLAPD支持UNICODE和语言标记。
SLAPD可以选择集中不同的数据库后台支持。包括BDB——高性能的事务数据库;LDBM,轻型的基于DBM的后台数据库;SHELL,多种shell脚本的后台界面;以及PASSWD,一个简单的passwd(5)的界面。BDB使用了Sleepycat的Berkeley DB 4。LDBM使用了Berkeley DB或者GDBM。
SLAPD可以被配置为同时使用多个数据库。这意味着一个SLAPD服务器可以使用相同或者不同的后台数据库,响应多个逻辑上不同的LDAP部分树上的请求。
如果您需要更多的定制,SLAPD允许很容易的书写自己的模块。SLAPD包含了2个清楚的部分:一个前端来处理和LDAP客户之间的协议通信;以及一些处理特定任务比如数据库操作的模块。因为这两个部分之间通过定义的非常好的C API进行通信,您可以书写自己定制的模块,使用多种方法扩展SLAPD。同时,SLAPD还提供了多个可编程的数据库模块。这些允许您使用通用的编程语言(PERL,SHELL,SQL和TCL)将外部数据源开放给SLAPD。
SLAPD使用了线程来达到高性能。一个单一的多线程SLAPD进程使用线程池来处理所有的请求。这减少了系统的负载,并且显示了高性能。
SLAPD可以被配置为保持其数据库的复制拷贝。这种单一主服务器/多个附属服务器的复制模式在高吞吐量的环境下是必须的。这时,一个单一的SLAPD不能提供必需的可用性和可靠性。SLAPD也包括了一个实验性的支持多个主服务器的复制。
SLAPD通过一个单一的配置文件来实现高可配置性。此配置文件允许您改变需要改变的任何东西。配置选项具有合理的缺省选项,这使得您的工作更加容易。
当然,SLAPD同时具有其限制。主要的后台BDB数据库不能很好的处理范围查询或者嵌套查询。
SLURPD(8)是一个服务器daemon,它帮助SLAPD提供复制服务。它的责任在于将对主SLAPD数据库的修改分发到不同的SLAPD的副本上。它使得SLAPD避免去考虑当改变发生的时候,一些副本可能DOWN机,或者不可访问。SLURPD自动重新尝试失败的请求。SLAPD和SLURPD通过一个简单的用来记录改变的文件进行通信。
有关如何配置和运行SLURPD的信息,请参考“使用SLURPD进行配置”一章。
下面的部分是OpenLDAP2.1的一个快速指南,包括独立的LDAP daemon,SLAPD(8)。
如果您需要认真地运行OpenLDAP,在安装之前应该阅读本文档的所有部分。
注意:快速指南没有使用强度认证和任何完整性和安全保护服务。这些服务在OpenLDAP管理员指南的后面的章节描述。
http://www.openldap.org/software/download/。
gunzip _c openldap-VERSION.tgz | tar xvfB –
然后进入目录:
cd openldap-VERSION
您必须将VERSION使用发行版本的版本名称替换。
应该查看随版本发行的COPYRIGHT,LICENSE,README,以及INSTALL文档。COPYRIGHT和LICENSE提供了OpenLDAP软件可以使用,拷贝和限制的警告。
还应该查看本文档的其他章节。特别是,“编译和安装OpenLDAP软件”。这一章提供了该软件需要的其他软件和安装步骤地详细信息。
您需要运行系统提供的configure脚本来配置您系统上的发行版本。configure脚本接受许多命令行参数,它们允许或者禁止软件的某些特性。通常情况下,默认的选项是可以的,但是,您可能需要改变它们。要得到configure脚本接受的命令行参数的列表,使用—help选项:
./configure –-help
但是,既然您使用了本指南,我们假设您足够勇敢,只是让configure来决定什么是最佳的:
./configure
假设configure喜欢您的系统,您可以继续编译软件。如果configure的确抱怨了什么,现在您需要查看FAQ的安装部分(http://www.openldap.org/faq/),或者,阅读本文档的“编译和安装OpenLDAP软件”部分。
下一个步骤是编译软件。这个步骤有两部分,首先,我们创建编译依赖选项,然后编译软件:
make depend
make
两次make都应该能够进行无错误编译。
为了确保进行了正确的编译,应该测试代码集合(它只需要几分钟时间):
make test
符合您的配置的测试程序将会运行,它们应该通过。一些测试,比如复制测试,可以跳过。
现在可以准备安装软件了。这通常需要超级用户的权限:
su root –c ‘make install’
所有东西应该被安装到/usr/local(或者是configure中指定的安装目录)
使用编辑器编辑系统提供的slapd.conf(5)示例(通常安装在/usr/local/etc/openldap/slapd.conf)来包含一个如下所示的BDB数据库定义:
database bdb
suffix “dc=<MY-DOMAIN>,dc=<COM>”
rootdn “cn=Manager,dc=<MY-DOMAIN>, dc=<COM>”
rootpw secret
directory /usr/local/var/openldap-data
确保记住使用正确的域名替换<MY-DOMAIN>和<COM>。比如,对于example.com,使用:
database bdb
suffix “dc=example,dc=com”
rootdn “cn=Manager,dc=example, dc=com”
rootpw secret
directory /usr/local/var/openldap-data
如果您的域名包含了其他的部分,比如,eng.uni.edu.eu,使用:
database bdb
suffix “dc=end,dc=uni,dc=edu,dc=eu”
rootdn “cn=Manager, dc=end,dc=uni,dc=edu,dc=eu”
rootpw secret
directory /usr/local/var/openldap-data
配置slapd(8)的详细信息可以在slapd.conf(5)的手册页中或者在本文档的“SLAPD配置文件”一章中找到。
注意:指定的目录在启动slapd(8)之前必须存在。
现在已经准备好启动独立的LDAP服务器,slapd(8)了。运行下面的命令:
su root –c /usr/local/libexec/slapd
为了检查服务是否正在运行并且被正确配置,可以对服务器运行一个搜索命令,使用ldapsearch(1)。ldapsearch安装在/usr/local/bin/ldapsearch:
ldapsearch –x –b ‘’ –s base ‘(objectclass=*)’ namingContexts
注意命令行参数中单引号的使用,它们阻止特殊的字符被shell解析。这应该返回:
dn:
namingContexts: dc=example,dc=com
关于运行slapd(8)的详细信息,可以在slapd(8)的手册页或者本文档的“运行SLAPD”章节中找到。
可以使用ldapadd(1)来向LDAP目录中增加条目。ldapadd需要输入是LDIF格式。我们可以通过两个步骤来完成这一点:
¢ 创建一个LDIF文件;
¢ 执行ldapadd;
使用编辑器创建一个LDIF文件,它包含:
dn:dc=<MY-DOMAIN>,dc=<COM>
objectclass:dcObject
objectclass:organization
o:<MY ORGANIZATION>
dc:<NY-DOMAIN>
dn:cn=Manager,dc=<MY-DOMAIN>, dc=<COM>
objectclass:organizationalRole
cn:Manager
确保使用正确的域名部分替换<MY-DOMAIN>和<COM>。并且使用您组织的名称替换<MY ORGANIZATION>。如果您使用了拷贝粘贴,确认将开始和结束的空格从下面的例子中去掉。
dn:dc=example,dc=com
objectclass:dcObject
objectclass:organization
o:Example Company
dc:example
dn:cn=Manager, dc=example,dc=com
objectclass:organizationalRole
cn:Manager
现在,您可以运行ldapadd(8)来讲这些条目增加到目录中(您会被提示输入slapd.conf中指定的”secret”部分):
ldapadd –x –D "cn=Manager,dc=example,dc=com" -W -f example.ldif
其中,example.ldif是上面您创建的文件。
其他的关于创建目录的信息可以在本文档的“数据库创建和维护工具”一章中找到。
现在来检验增加的条目确实在数据库中。可以使用任何LDAP客户端来验证这一点。但是,我们的例子是用ldapsearch(1)工具。记住,使用您的正确的域名替换dc=example,dc=com:
ldapsearch -x -b 'dc=example,dc=com' '(objectclass=*)'
这个命令将搜索并且获取数据库中的所有条目。
现在可以使用ldapadd(1)或者其他的LDAP客户端,试验不同的配置选项和后台的配置等等。
注意默认情况下,slapd(8)数据库给除了super-user之外的每一个人读者的存取权限。强烈建议设置对存取权限的控制来认证用户。存取控制在“SLAPD配置文件”一章中的“存取控制”部分讨论。同时,建议您阅读“使用SASL”和“使用TLS”部分。下面的部分提供了有关编译,安装和运行slapd(8)的更详细的信息。
下面的部分给出了不同的LDAP目录配置选项,以及您的独立的LDAP服务器slapd(8)如何适应其他的服务器。
在此配置中,您运行一个slapd只为您本地的域提供目录服务。它不会和其他的目录服务器交互。这种配置如图3.1所示:
图3.1:本地目录服务配置
如果你只是刚刚开始,或者如果您需要提供本地的服务,并且对于连接到世界上的其他部分不感兴趣,请使用这个配置。(这是第2章快速指南中的配置)。如果需要,以后可以很容易的升级到其他的配置。
在这个配置中,您运行一个slapd,它为您的本地域提供目录服务,并且将它配置为,对于本地域之外的请求,返回一个指向上一级目录的引用。您可以自己运行该服务,或者使用其他人为您提供的服务。这种配置如图3.2所示:
图3.2:带有引用的本地目录服务
如果您需要提供本地的服务并且参与到一个全局服务,使用此配置。
SLURPD daemon用来从主slapd服务器向一个或者多个附属slapd服务器传播改变。一个主——附属配置的例子如图3.3所示。
图3.3:可复制的目录服务
在单一slapd可靠性不够的情况下,这种配置可以被用来和前两种配置中的一种联合使用。
在这种配置中,本地服务被划分成较小的服务,每一个都可以被复制,并且使用上级和下级引用关联在一起。
本章详细的介绍了如何编译和安装OpenLDAP软件包,包括slapd(8),独立的LDAP daemon和slurpd(8)——独立的更新复制daemon。编译和安装OpenLDAP需要几个步骤:安装需要的软件,配置OpenLDAP本身,making,以及最终安装。下面的部分详细描述了这个过程。
从http://www.openldap.org/software/download/可以下载OpenLDAP。
运行下面的命令:
gunzip _c openldap-VERSION.tgz | tar xvfB –
cd openldap-VERSION
OpenLDAP软件依赖许多第3方的软件包。根据您打算使用的特性,您可能必须下载并且安装许多附加的软件包。本部分详细描述了您必须安装的最经常使用的第3方软件包。注意,某些第3方的软件包也依赖于其他的软件包。按照它们的安装指南安装每一个软件包。
OpenLDAP客户端和服务器需要安装OpenSSL TLS库来提供传输层的安全服务。虽然一些操作系统可能提供了这些库作为基础系统的一部分或者作为一个可选的软件组件,OpenSSL通常需要单独安装。
OpenSSL可以从http://www.openssl.org得到。
除非OpenLDAP的configure检测到了可用的OpenSSL安装,否则,OpenLDAP不是完全符合LDAPV3标准的。
OpenLDAP客户端和服务器端支持基于Kerberos的认证服务。特别的,OpenLDAP通过使用Heimdal或者MIT Kerberos V软件包支持SASL/GSSAPI认证机制。应该安装Heimdal或者MIT Kerberos V。
Heimdal Kerberos 可以从http://www.pdc.kth.se/heimdal/下载,MIT Kerberos可以从http://web.mit.edu/kerberos/www/下载。
强烈推荐使用高强度的认证服务,比如Kerberos提供的认证服务。
OpenLDAP客户端和服务器需要安装Cyrus’s SASL库来提供简单认证和安全层服务。虽然一些操作系统可能提供了这些库作为基础系统的一部分或者作为一个可选的软件组件,Cyrus SASL通常需要单独安装。
Cyrus SASL可以从http://asg.web.cmu.edu/sasl/sasl-library.html下载。如果预先安装了OpenSSL和Kerberos/GSSAPI库,Cyrus SASL将使用它们。
除非OpenLDAP的configure检测到了可用的Cyrus SASL安装,否则,OpenLDAP不是完全符合LDAPV3标准的。
OpenLDAP的slapd(8)主要的后台数据库,BDB,需要Sleepycat Software Berkeley DB,第4版。如果在配置的时候该软件不可用,您将不能编译slapd(8)使用主要的后台数据库。
您的操作系统可能作为基础系统的一部分或者作为一个可选的软件组件提供了Berkeley DB,版本4,如果没有,您需要自己下载并安装。
Berkeley DB可以从http://www.sleepycat.com/download.html下载。有几个可用的版本。现在,推荐使用版本4。
OpenLDAP的slapd(8)LDBM后台数据库支持多种数据库管理器。Berkeley DB 和GDBM。 GDBM 可以从FSF的下载站点ftp://ftp.gnu.org/pub/gnu/gdbm/ 下载。
OpenLDAP设计上利用了线程。OpenLDAP支持POSIX的pthreads,Mach的Cthreads,和其他一些线程库。如果不能发现合适的线程子系统,configure将会抱怨。如果发生了这种情况,请参考OpenLDAP FAQ http://www.openldap.org/faq/ 的Software|Installation|PlatformHints部分。
如果事先安装,slapd(8)支持TCP Wrappers(IP层存取控制过滤)。对于一个包含非公共信息的服务期,推荐使用TCP Wrappers或者其他IP层的访问过滤(比如由一个IP层的防火墙提供的)。
现在,应该使用—help选项运行configure脚本。这将显示一个编译