0、 前言
0.1、 版权
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。分发该文档务必保留有关中文版的翻译信息和所有其他的版权信息。
0.2、 该文档的范围
该文档提供了为在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 |
0.3、 致谢
OpenLDAP Project由一个志愿者小组组成。没有他们贡献的时间和精力,该文档不可能形成。
OpenLDAP项目同时还感谢University of Michigan LDAP,他们创建了LDAP软件的基础。并且OpenLDAP软件就是在他们的软件之上创建的。该文档也是在U-Mich的LDAP文档:The SLAPD and SLURPD Administrators Guide的基础上形成的。
0.4、 错误修正
任何对于该文档的改正和完善建议应该使用OpenLDAP 的Issue Tracking System (http://www.openldap.org/its/)提交。
0.5、 关于该文档
该文档使用由Ian Clatworthy开发的简单文档格式(Simple Document Format)文档系统(http://www.mincom.com/mtr/sdf/)创建。
1、 介绍 OpenLDAP 目录服务
该文档描述了如何编译,配置和运行OpenLDAP软件来提供目录服务。包含了如何配置和运行独立的LDAP daemon,slapd(8),以及如何配置运行独立的LDAP更新复制daemon,slurpd(8)的详细信息。该文档面向新手和有经验的系统管理员。本部分提供了对目录服务的一个基本的介绍,特别是对slapd(8)提供的目录服务。
1.1、 什么是目录服务?
一个目录服务是一个特殊的数据库,它为读,浏览和搜索进行了优化。目录可以用来保存描述性的,基于属性的信息,并且支持复杂的过滤搜索能力。目录通常不支持在一般的数据库管理系统中支持的复杂的事务处理或者回滚机制——这些机制是为处理大容量的复杂更新操作而设计的。目录更新只是简单的“所有或者没有”的更新——如果它们被允许的话。目录被优化为针对大量的查找或者搜索操作进行快速的响应。它们可以具有大范围复制信息的功能,以便提高可用性和可靠性,同时缩短响应时间。
当目录中的信息被复制的时候,复本之间信息的暂时不一致是允许的,只要它们最终达到了一致。
有许多种不同的方法来提供一个目录服务。不同的方法允许在目录中存储不同种类的信息,因此,信息如何被引用,查询和更新的要求也就不同,信息被保护并拒绝未经授权访问的方式等等也就不同。一些目录服务是本地的,提供有限制的服务(比如,一个运行在单一机器上的finger服务)。还有一些服务是全局的,提供大的多的规模的服务(比如,整个Internet)。全局服务通常是分部的。这意味着他们保存的数据在许多台机器上分部,所有这些机器合作提供目录服务。典型情况下,一个全局服务定义了一个统一的名字空间,无论您从何处开始和数据关联,该名字空间都会提供相同的数据视图。Internet域名系统就是一个全局分布的目录系统服务的实例。
1.2、 什么是 LDAP?
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同时还支持机密性,完整性和安全性的服务。
1.3、 LDAP 如何工作?
LDAP目录基于客户/服务器方式实现。一个或者多个LDAP服务器包含了组成目录信息树(DIT)的数据。客户连接到服务器并提问,服务器返回答案或者一个指向其他信息的指针(通常是另外一个LDAP服务器)无论客户首先连接到哪一个LDAP服务器,它看到相同的目录视图。提交到一个LDAP服务器的名字和另外一个LDAP服务器将引用了相同的条目。这是一个全局目录服务,比如LDAP的一个重要特性。
1.4、 关于 X.500
从技术上说,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进行复制”一章获得有关复制的信息。
1.5、 LDAP V2 和 V3 的不同
LDAPV3增加了下面的特性:
¢ 使用SASL进行强度认证;
¢ 使用TLS(SSL)进行完整性和安全保护;
¢ 使用UNICODE支持国际化;
¢ 引用和持续
¢ 可扩展性(控制和扩展操作)
¢ 支持模式发现
同时支持LDAPV2和V3是有问题的,应该尽量避免。因为LDAPV3包含了LDAPV2的所有特性,因此,推荐使用LDAPV3;
1.6、 SLAPD 的介绍和作用
SLAPD(8)是一个跨平台的LDAP服务器。可以使用它来提供自己的目录服务。自己的目录可以包含任意多的信息。可以将它和一个全局的LDAP目录服务相联接,或者只是自己运行一个服务。下面是SLAPD的更多特性:
1.6.1、 LDAPV3:
SLAPD实现了LDAP协议的V3版本。并且支持IPV4和IPV6上的LDAP。
1.6.2、 简单认证和安全层
SLAPD通过使用SASL来支持强度认证服务。SLAPD的SASL实现使用了Cyrus SASL软件,该软件支持大量的认证机制,包括DIGEST-MD5,EXTERNAL和GSSAPI。
1.6.3、 传输层安全
SLAPD通过使用TLS(或者SSL)来提供完整性和安全保护。SLAPD的TLS实现使用了OpenSSL软件。
1.6.4、 拓扑控制
SLAPD允许给予网络拓扑控制对服务器的访问。这个特性使用了TCP wrappers。
1.6.5、 存取控制
SLAPD提供了丰富和功能强大的存取控制手段,允许控制数据库的信息。可以基于LDAP的认证信息,IP地址,域名或者其他的条件来控制对条目的存取。SLAPD支持静态和动态的存取控制信息。
1.6.6、 国际化
SLAPD支持UNICODE和语言标记。
1.6.7、 可选择的后台数据库
SLAPD可以选择集中不同的数据库后台支持。包括BDB——高性能的事务数据库;LDBM,轻型的基于DBM的后台数据库;SHELL,多种shell脚本的后台界面;以及PASSWD,一个简单的passwd(5)的界面。BDB使用了Sleepycat的Berkeley DB 4。LDBM使用了Berkeley DB或者GDBM。
1.6.8、 多个数据库实例
SLAPD可以被配置为同时使用多个数据库。这意味着一个SLAPD服务器可以使用相同或者不同的后台数据库,响应多个逻辑上不同的LDAP部分树上的请求。
1.6.9、 通用的模块 API
如果您需要更多的定制,SLAPD允许很容易的书写自己的模块。SLAPD包含了2个清楚的部分:一个前端来处理和LDAP客户之间的协议通信;以及一些处理特定任务比如数据库操作的模块。因为这两个部分之间通过定义的非常好的C API进行通信,您可以书写自己定制的模块,使用多种方法扩展SLAPD。同时,SLAPD还提供了多个可编程的数据库模块。这些允许您使用通用的编程语言(PERL,SHELL,SQL和TCL)将外部数据源开放给SLAPD。
1.6.10、 线程
SLAPD使用了线程来达到高性能。一个单一的多线程SLAPD进程使用线程池来处理所有的请求。这减少了系统的负载,并且显示了高性能。
1.6.11、 复制
SLAPD可以被配置为保持其数据库的复制拷贝。这种单一主服务器/多个附属服务器的复制模式在高吞吐量的环境下是必须的。这时,一个单一的SLAPD不能提供必需的可用性和可靠性。SLAPD也包括了一个实验性的支持多个主服务器的复制。
1.6.12、 可配置性
SLAPD通过一个单一的配置文件来实现高可配置性。此配置文件允许您改变需要改变的任何东西。配置选项具有合理的缺省选项,这使得您的工作更加容易。
当然,SLAPD同时具有其限制。主要的后台BDB数据库不能很好的处理范围查询或者嵌套查询。
1.7、 SLURPD 及其作用
SLURPD(8)是一个服务器daemon,它帮助SLAPD提供复制服务。它的责任在于将对主SLAPD数据库的修改分发到不同的SLAPD的副本上。它使得SLAPD避免去考虑当改变发生的时候,一些副本可能DOWN机,或者不可访问。SLURPD自动重新尝试失败的请求。SLAPD和SLURPD通过一个简单的用来记录改变的文件进行通信。
有关如何配置和运行SLURPD的信息,请参考“使用SLURPD进行配置”一章。