OpenLDAP 2.1 管理员指南


OpenLDAP2.1管理员指南 OpenLDAP 2.1 管理员指南 The OpenLDAP Project 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章! 欢迎指正。 http://i18n.linux.net.cn/others/OpenLDAP2.htm(第 1/88 页)2007-10-4 22:36:22 OpenLDAP2.1管理员指南 目录 0、 前言 0.1、 版权 0.2、 该文档的范围 0.3、 致谢 0.4、 错误修正 0.5、 关于该文档 1、 介绍OpenLDAP目录服务 1.1、 什么是目录服务? 1.2、 什么是LDAP? 1.3、 LDAP如何工作? 1.4、 关于X.500 1.5、 LDAP V2和V3的不同 1.6、 SLAPD的介绍和作用 1.6.1、 LDAPV3: 1.6.2、 简单认证和安全层 1.6.3、 传输层安全 1.6.4、 拓扑控制 1.6.5、 存取控制 http://i18n.linux.net.cn/others/OpenLDAP2.htm(第 2/88 页)2007-10-4 22:36:22 OpenLDAP2.1管理员指南 1.6.6、 国际化 1.6.7、 可选择的后台数据库 1.6.8、 多个数据库实例 1.6.9、 通用的模块API 1.6.10、 线程 1.6.11、 复制 1.6.12、 可配置性 1.7、 SLURPD及其作用 2、 快速指南 2.1、 获得软件 2.2、 解包发行 2.3、 查看文档 2.4、 运行configure 2.5、 编译软件 2.6、 测试编译 2.7、 安装软件 2.8、 编辑配置文件 2.9、 启动SLAPD 2.10、 向目录中增加初始化条目 2.11、 是否能够工作? 3、 配置选项 http://i18n.linux.net.cn/others/OpenLDAP2.htm(第 3/88 页)2007-10-4 22:36:22 OpenLDAP2.1管理员指南 3.1、 本地目录服务 3.2、 带有引用(Referrals)的本地目录服务 3.3、 可复制的目录服务 3.4、 分布式本地目录服务 4、 编译和安装OpenLDAP软件 4.1、 获得并且展开软件 4.2、 需要的软件 4.2.1、 传输层安全(TLS) 4.2.2、 Kerberos认证服务 4.2.3、 简单认证和安全层 4.2.4、 数据库软件 4.2.5、 线程 4.2.6、 TCP Wrappers 4.3、 运行configure 4.4、 编译软件 4.5、 测试软件 4.6、 安装软件 5、 SLAPD配置文件 5.1、 配置文件格式 5.2、 配置文件指令 5.2.1、 全局指令 http://i18n.linux.net.cn/others/OpenLDAP2.htm(第 4/88 页)2007-10-4 22:36:22 OpenLDAP2.1管理员指南 5.2.2、 通用后端指令 5.2.3、 通用数据库指令 5.2.4、 BDB数据库指令 5.2.5、 LDBM数据库指令 5.3、 存取控制 5.3.1、 控制对于What的访问 5.3.2、 赋予Who访问权限 5.3.3、 赋予的access权限 5.3.4、 存取控制计算 5.3.5、 存取控制示例 5.4、 配置文件示例 6、 运行SLAPD 6.1、 命令行选项 6.2、 启动SLAPD 6.3、 停止SLAPD 7、 数据库创建和维护工具 7.1、 在LDAP上创建数据库 7.2、 脱机创建数据库 7.2.1、 slapadd程序 7.2.2、 slapindex程序 7.2.3、 slapcat程序 http://i18n.linux.net.cn/others/OpenLDAP2.htm(第 5/88 页)2007-10-4 22:36:22 OpenLDAP2.1管理员指南 7.3、 LDIF文本条目格式 8、 模式说明 8.1、 已发布的模式文件 8.2、 扩展模式 8.2.1、 对象标识 8.2.2、 名称前缀 8.2.3、 本地模式文件 8.2.4、 属性类型说明 8.2.5、 对象类说明 8.2.6、 OID宏 9、 使用SASL 9.1、 SASL安全考虑 9.2、 SASL认证 9.2.1、 GSSAPI 9.2.2、 KERBEROS_V4 9.2.3、 将认证身份映射到LDAP条目 9.2.4、 为个人DN执行搜索 9.3、 SASL授权 9.3.1、 授权的使用 9.3.2、 为身份授权 9.3.3、 授权规则 http://i18n.linux.net.cn/others/OpenLDAP2.htm(第 6/88 页)2007-10-4 22:36:22 OpenLDAP2.1管理员指南 10、 使用TLS 11、 构建分布式目录服务 11.1、 下级知识信息 11.2、 上级知识信息 11.3、 ManageDsaIT控制 12、 使用SLURPD进行复制 12.1、 简述 12.2、 复制日志 12.3、 命令行选项 12.4、 配置slurpd和从属slapd实例 12.4.1、 设置主slapd 12.4.2、 设置从属slapd 12.4.3、 关闭主slapd 12.4.4、 将主slapd的数据库拷贝到从属slapd 12.4.5、 为复制设置主slapd 12.4.6、 重新启动主slapd并且启动从属slapd 12.4.7、 启动slurpd 12.5、 高级slurpd操作 12.5.1、 复制错误 12.5.2、 One-shot模式和拒绝文件 13、 附录A 常用配置指令 http://i18n.linux.net.cn/others/OpenLDAP2.htm(第 7/88 页)2007-10-4 22:36:22 OpenLDAP2.1管理员指南 14、 OpenLDAP软件版权 14.1、 OpenLDAP Copyright Notice 14.2、 University of Michigan Copyright Notice 15、 The OpenLDAP Public License http://i18n.linux.net.cn/others/OpenLDAP2.htm(第 8/88 页)2007-10-4 22:36:22 OpenLDAP2.1管理员指南 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 http://www.OpenLDAP.org/doc/ Frequently Asked Questions http://www.OpenLDAP.org/faq/ Issue Tracking System http://www.OpenLDAP.org/its/ Mailing Lists http://www.OpenLDAP.org/lists/ Software Pages http://www.OpenLDAP.org/ software/ Support Pages http://www.OpenLDAP.org/support 0.3、 致谢 OpenLDAP Project由一个志愿者小组组成。没有他们贡献的时间和精力,该文档不可能形成。 OpenLDAP项目同时还感谢University of Michigan LDAP,他们创建了LDAP软件的基础。并且 http://i18n.linux.net.cn/others/OpenLDAP2.htm(第 9/88 页)2007-10-4 22:36:22 OpenLDAP2.1管理员指南 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域名系统就是一个全局分布的目录系统服务的实例。 http://i18n.linux.net.cn/others/OpenLDAP2.htm(第 10/88 页)2007-10-4 22:36:22 OpenLDAP2.1管理员指南 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目录树的例子: http://i18n.linux.net.cn/others/OpenLDAP2.htm(第 11/88 页)2007-10-4 22:36:22 OpenLDAP2.1管理员指南 图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”中描述。 http://i18n.linux.net.cn/others/OpenLDAP2.htm(第 12/88 页)2007-10-4 22:36:22 OpenLDAP2.1管理员指南 图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 如何工作? http://i18n.linux.net.cn/others/OpenLDAP2.htm(第 13/88 页)2007-10-4 22:36:22 OpenLDAP2.1管理员指南 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支持国际化; ¢ 引用和持续 http://i18n.linux.net.cn/others/OpenLDAP2.htm(第 14/88 页)2007-10-4 22:36:22 OpenLDAP2.1管理员指南 ¢ 可扩展性(控制和扩展操作) ¢ 支持模式发现 同时支持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和语言标记。 http://i18n.linux.net.cn/others/OpenLDAP2.htm(第 15/88 页)2007-10-4 22:36:22 OpenLDAP2.1管理员指南 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 及其作用 http://i18n.linux.net.cn/others/OpenLDAP2.htm(第 16/88 页)2007-10-4 22:36:22 OpenLDAP2.1管理员指南 SLURPD(8)是一个服务器daemon,它帮助SLAPD提供复制服务。它的责任在于将对主SLAPD数据 库的修改分发到不同的SLAPD的副本上。它使得SLAPD避免去考虑当改变发生的时候,一些副本 可能DOWN机,或者不可访问。SLURPD自动重新尝试失败的请求。SLAPD和SLURPD通过一个 简单的用来记录改变的文件进行通信。 有关如何配置和运行SLURPD的信息,请参考“使用SLURPD进行配置”一章。 2、 快速指南 下面的部分是OpenLDAP2.1的一个快速指南,包括独立的LDAP daemon,SLAPD(8)。 如果您需要认真地运行OpenLDAP,在安装之前应该阅读本文档的所有部分。 注意:快速指南没有使用强度认证和任何完整性和安全保护服务。这些服务在OpenLDAP管理员指南的 后面的章节描述。 2.1、 获得软件 http://www.openldap.org/software/download/。 2.2、 解开软件发行包 gunzip _c openldap-VERSION.tgz | tar xvfB – 然后进入目录: cd openldap-VERSION 您必须将VERSION使用发行版本的版本名称替换。 2.3、 查看文档 应该查看随版本发行的COPYRIGHT,LICENSE,README,以及INSTALL文档。COPYRIGHT和 LICENSE提供了OpenLDAP软件可以使用,拷贝和限制的警告。 还应该查看本文档的其他章节。特别是,“编译和安装OpenLDAP软件”。这一章提供了该软件 需要的其他软件和安装步骤地详细信息。 http://i18n.linux.net.cn/others/OpenLDAP2.htm(第 17/88 页)2007-10-4 22:36:22 OpenLDAP2.1管理员指南 2.4、 运行 configure 您需要运行系统提供的configure脚本来配置您系统上的发行版本。configure脚本接受许多命令行 参数,它们允许或者禁止软件的某些特性。通常情况下,默认的选项是可以的,但是,您可能需 要改变它们。要得到configure脚本接受的命令行参数的列表,使用—help选项: ./configure –-help 但是,既然您使用了本指南,我们假设您足够勇敢,只是让configure来决定什么是最佳的: ./configure 假设configure喜欢您的系统,您可以继续编译软件。如果configure的确抱怨了什么,现在您需要 查看FAQ的安装部分(http://www.openldap.org/faq/),或者,阅读本文档的“编译和安装 OpenLDAP软件”部分。 2.5、 编译软件 下一个步骤是编译软件。这个步骤有两部分,首先,我们创建编译依赖选项,然后编译软件: make depend make 两次make都应该能够进行无错误编译。 2.6、 测试编译 为了确保进行了正确的编译,应该测试代码集合(它只需要几分钟时间): make test 符合您的配置的测试程序将会运行,它们应该通过。一些测试,比如复制测试,可以跳过。 2.7、 安装软件 现在可以准备安装软件了。这通常需要超级用户的权限: su root –c ‘make install’ http://i18n.linux.net.cn/others/OpenLDAP2.htm(第 18/88 页)2007-10-4 22:36:22 OpenLDAP2.1管理员指南 所有东西应该被安装到/usr/local(或者是configure中指定的安装目录) 2.8、 编辑配置文件 使用编辑器编辑系统提供的slapd.conf(5)示例(通常安装在/usr/local/etc/openldap/slapd.conf)来 包含一个如下所示的BDB数据库定义: database bdb suffix “dc=,dc=” rootdn “cn=Manager,dc=, dc=” rootpw secret directory /usr/local/var/openldap-data 确保记住使用正确的域名替换。比如,对于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配置文件”一章 http://i18n.linux.net.cn/others/OpenLDAP2.htm(第 19/88 页)2007-10-4 22:36:22 OpenLDAP2.1管理员指南 中找到。 注意:指定的目录在启动slapd(8)之前必须存在。 2.9、 启动SLAPD 现在已经准备好启动独立的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”章节中找 到。 2.10、 向目录中增加初始化条目 可以使用ldapadd(1)来向LDAP目录中增加条目。ldapadd需要输入是LDIF格式。我们可以通过两个 步骤来完成这一点: ¢ 创建一个LDIF文件; ¢ 执行ldapadd; 使用编辑器创建一个LDIF文件,它包含: dn:dc=,dc= objectclass:dcObject objectclass:organization http://i18n.linux.net.cn/others/OpenLDAP2.htm(第 20/88 页)2007-10-4 22:36:22 OpenLDAP2.1管理员指南 o: dc: dn:cn=Manager,dc=, dc= objectclass:organizationalRole cn:Manager 确保使用正确的域名部分替换。并且使用您组织的名称替换。如果您使用了拷贝粘贴,确认将开始和结束的空格从下面的例子中去掉。 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是上面您创建的文件。 其他的关于创建目录的信息可以在本文档的“数据库创建和维护工具”一章中找到。 2.11、 是否能够工作? 现在来检验增加的条目确实在数据库中。可以使用任何LDAP客户端来验证这一点。但是,我们 http://i18n.linux.net.cn/others/OpenLDAP2.htm(第 21/88 页)2007-10-4 22:36:22 OpenLDAP2.1管理员指南 的例子是用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)的更详细的信息。 3、 配置选项 下面的部分给出了不同的LDAP目录配置选项,以及您的独立的LDAP服务器slapd(8)如何适应其他 的服务器。 3.1、 本地目录服务 在此配置中,您运行一个slapd只为您本地的域提供目录服务。它不会和其他的目录服务器交互。 这种配置如图3.1所示: 图3.1:本地目录服务配置 如果你只是刚刚开始,或者如果您需要提供本地的服务,并且对于连接到世界上的其他部分不感 兴趣,请使用这个配置。(这是第2章快速指南中的配置)。如果需要,以后可以很容易的升级 到其他的配置。 3.2、 带有引用(Referrals)的本地目录服务 在这个配置中,您运行一个slapd,它为您的本地域提供目录服务,并且将它配置为,对于本地域 之外的请求,返回一个指向上一级目录的引用。您可以自己运行该服务,或者使用其他人为您提 供的服务。这种配置如图3.2所示: http://i18n.linux.net.cn/others/OpenLDAP2.htm(第 22/88 页)2007-10-4 22:36:22 OpenLDAP2.1管理员指南 图3.2:带有引用的本地目录服务 如果您需要提供本地的服务并且参与到一个全局服务,使用此配置。 3.3、 可复制的目录服务 SLURPD daemon用来从主slapd服务器向一个或者多个附属slapd服务器传播改变。一个主——附属 配置的例子如图3.3所示。 图3.3:可复制的目录服务 在单一slapd可靠性不够的情况下,这种配置可以被用来和前两种配置中的一种联合使用。 3.4、 分布式本地目录服务 http://i18n.linux.net.cn/others/OpenLDAP2.htm(第 23/88 页)2007-10-4 22:36:22 OpenLDAP2.1管理员指南 在这种配置中,本地服务被划分成较小的服务,每一个都可以被复制,并且使用上级和下级引用 关联在一起。 4、 编译和安装OpenLDAP软件 本章详细的介绍了如何编译和安装OpenLDAP软件包,包括slapd(8),独立的LDAP daemon和 slurpd(8)——独立的更新复制daemon。编译和安装OpenLDAP需要几个步骤:安装需要的软件, 配置OpenLDAP本身,making,以及最终安装。下面的部分详细描述了这个过程。 4.1、 获得并且展开软件 从http://www.openldap.org/software/download/可以下载OpenLDAP。 运行下面的命令: gunzip _c openldap-VERSION.tgz | tar xvfB – cd openldap-VERSION 4.2、 需要的软件 OpenLDAP软件依赖许多第3方的软件包。根据您打算使用的特性,您可能必须下载并且安装许多 附加的软件包。本部分详细描述了您必须安装的最经常使用的第3方软件包。注意,某些第3方的 软件包也依赖于其他的软件包。按照它们的安装指南安装每一个软件包。 4.2.1、 传输层安全(TLS) OpenLDAP客户端和服务器需要安装OpenSSL TLS库来提供传输层的安全服务。虽然一些操作系统 可能提供了这些库作为基础系统的一部分或者作为一个可选的软件组件,OpenSSL通常需要单独 安装。 OpenSSL可以从http://www.openssl.org得到。 除非OpenLDAP的configure检测到了可用的OpenSSL安装,否则,OpenLDAP不是完全符合 LDAPV3标准的。 4.2.2、 Kerberos认证服务 OpenLDAP客户端和服务器端支持基于Kerberos的认证服务。特别的,OpenLDAP通过使用 http://i18n.linux.net.cn/others/OpenLDAP2.htm(第 24/88 页)2007-10-4 22:36:22 OpenLDAP2.1管理员指南 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提供的认证服务。 4.2.3、 简单认证和安全层 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标准的。 4.2.4、 数据库软件 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/ 下载。 4.2.5、 线程 OpenLDAP设计上利用了线程。OpenLDAP支持POSIX的pthreads,Mach的Cthreads,和其他一些 线程库。如果不能发现合适的线程子系统,configure将会抱怨。如果发生了这种情况,请参考 OpenLDAP FAQ http://www.openldap.org/faq/ 的Software|Installation|PlatformHints部分。 http://i18n.linux.net.cn/others/OpenLDAP2.htm(第 25/88 页)2007-10-4 22:36:22 OpenLDAP2.1管理员指南 4.2.6、 TCP Wrappers 如果事先安装,slapd(8)支持TCP Wrappers(IP层存取控制过滤)。对于一个包含非公共信息的服 务期,推荐使用TCP Wrappers或者其他IP层的访问过滤(比如由一个IP层的防火墙提供的)。 4.3、 运行configure 现在,应该使用—help选项运行configure脚本。这将显示一个编译OpenLDAP时您可以改变的可用 选项的列表。许多OpenLDAP的特性可以通过这种方法来允许或者禁止。 ./configure –help configure脚本将检测不同的环境变量。这些环境变量包括: Table 4.1: Environment Variables Variable Description CC Specify alternative C Compiler CFLAGS Specify additional compiler flags CPPFLAGS Specify C Preprocessor flags LDFLAGS Specify linker flags LIBS Specify additional libraries 现在,可以使用需要的配置选项或者环境变量来运行configure。 [[env] settings] ./configure [options] 例如,假设我们需要使用LDBM后台数据库和支持TCP wrapper来安装OpenLDAP。默认情况下, LDBM是允许的,TCP wrappers是不允许的。因此,我们只需要指明—with-wrappers来包含对TCP Wrapper的支持: ./configure --with-wrappers 但是,如果所依赖的软件没有安装在系统目录下,上面的命令会失败。比如,如果TCP Wrappers 的头文件和库文件安装在/usr/local/include和/usr/local/lib目录,configure脚本应该如下调用: env CPPFLAGS="-I/usr/local/include" LDFLAGS="-L/usr/local/lib" \ ./configure --with-wrappers http://i18n.linux.net.cn/others/OpenLDAP2.htm(第 26/88 页)2007-10-4 22:36:22 OpenLDAP2.1管理员指南 注意:某些SHELLS,比如从Bourne sh(1)派生的SHELL,不需要使用env(1)命令。在某些情况下,环 境变量必须使用其他的语法指定。 configure脚本通常情况下能够自动监测正确的设置。如果您在这个阶段有问题,请参考Platform Specific Hints或者检查您的configure选项。 4.4、 编译软件 当运行了configure脚本之后,最后出现的一行输出应该如下所示: Please "make depend" to build dependencies 如果不是,说明configure出现错误,不应该继续。为了编译依赖选项,执行: make depend 然后,执行下面的步骤实际编译OpenLDAP: make 应该检查上面的命令的输出,已确定所有东西正确编译。注意,这个命令编译了LDAP库,以及 LDAP客户端,还有slapd(8)和slurpd(8)。 4.5、 测试软件 当配置和编译成功之后,应该执行测试程序测试编译。执行: make test 符合配置的测试程序将运行,并且应该通过。一些测试,比如副职,如果您的配置中不支持,应 该跳过。 4.6、 安装软件 成功测试之后就可以准备安装了。必须具有正确的权限。缺省情况下,OpenLDAP安装在/usr/ local目录下。如果在configure中使用了—prefix选项改变了目录,将会安装到你指定的目录下。 通常情况下,安装需要超级用户权限。在OpenLDAP的顶层目录,执行: su root -c 'make install' http://i18n.linux.net.cn/others/OpenLDAP2.htm(第 27/88 页)2007-10-4 22:36:22 OpenLDAP2.1管理员指南 应该仔细检查该命令的输入,确认所有东西正确安装。您将会发现slapd(8)的配置文件默认情况下 出现在/usr/local/etc/openldap目录下。请参阅“SLAPD配置文件”一章得到更多的信息。 5、 SLAPD配置文件 成功编译和安装软件之后,可以准备在您的站点中配置slapd(8)了。Slapd运行配置主要是通过 slapd.conf(5)文件。通常,该文件安装在/usr/local/etc/openldap目录下。 也可以使用slapd(8)或者slurpd(8)的命令行参数指定其他的配置文件。本章描述了配置文件的格 式,并且描述了常用的配置指令。 5.1、 配置文件格式 slapd.conf(5)文件由3个部分的配置信息组成:全局的,特定后台的,和特定数据库的。全局信息 首先被指明,后面是特定后台的信息,在后面是特定数据库实例的信息。全局信息可以被特定后 台和特定数据库的信息覆盖。特定后台的信息可以被特定数据库的信息覆盖。 空白行和以“#”开始的注释行被忽略。如果一行以空格开始,它被认为是上一行的继续。常用 的slapd.conf的格式如下所示: # global configuration directives # backend definition backend # first database definition & config directives database # second database definition & config directives database http://i18n.linux.net.cn/others/OpenLDAP2.htm(第 28/88 页)2007-10-4 22:36:22 OpenLDAP2.1管理员指南 # second database definition & config directives database # subsequent backend & database definitions & config directives 配置指令可以包含参数。如果包含参数,它们以空格分隔。如果一个参数包含空格,参数应该用 双引号因起来,比如“like this”。如果一个参数包含双引号或者一个反斜线“\”,它们因该用 一个“\”开始。 软件包含了一个示例配置文件,安装在/usr/local/etc/openldap目录下。软件还提供了许多包含模式 定义(属性类型attribute types和对象类inject classes)文件,它们在/usr/local/etc/openldap/schema目 录下。 5.2、 配置文件指令 本部分详细描述了经常使用的配置指令。要得到完整的列表,请参阅slapd.conf(5)的手册页。本部 分将配置文件指令划分为全局的,特定后台的和特定数据的类别,描述了每一个指令和它的默认 值,并且给出了使用示例。 5.2.1、 全局指令 本部分描述的指令应用于所有的后台和数据库,除非在后台或者数据库的定义中被明确覆盖。应 该被实际文本替换的参数放在尖括号<>中。 5.2.1.1、 access to [ by ]+ 此指令将访问一组由描述的条目或者属性,并且具有由指明的存取控制权 限,赋予一个或者多个由描述的请求者。参考本章的“存取控制”部分获得基本的使用信 息。 5.2.1.2、 attributetype 此指令定义了一个属性类型。请参考“模式说明”一章获取如何使用此指令的更详细的信息 5.2.1.3、 defaultaccess { none | compare | search | read | write } 此指令说明了当没有存取控制指令说明的时候,默认的存取权限。任何给定的存取级别隐含了更 http://i18n.linux.net.cn/others/OpenLDAP2.htm(第 29/88 页)2007-10-4 22:36:22 OpenLDAP2.1管理员指南 低的级别。比如,读权限隐含了搜索和比较的权限,但是,不包含写权限。 注意:推荐使用access指令来设置存取控制。有关access指令的详细信息,参阅本章的“存取控制”部 分。 缺省值: defaultaccess read 5.2.1.4、 idletimeout 此指令说明强制关闭一个非活动状态的客户连接之前等待的秒数。默认情况下,该时间等于0, 禁止该特性。 5.2.1.5、 include 此指令说明slapd在继续当前文件的下一行之前,应该从指定的文件读取附加的配置信息。被包含 的文件应该符合正常的slapd配置文件的格式。该文件通常被用来包含模式说明。 注意:在使用该指令的时候应该小心。因为对于嵌套的引入指令的最小数量没有限制,并且,没有循环 引用的检测。 5.2.1.6、 loglevel 该指令说明了调试语句和操作统计的日志级别。(当前,日志记录到syslogd(8){EX: LOG_LOCAL4})应用程序)。在此选项工作之前,必须使用—enable-debug选项配置了 OpenLDAP。(除了两个统计级别,它们总是被使用)。日志级别是附加的。要显示那一个数字 和什么级别的调试相关联,使用-?运行slapd或者参考下面的表格。可能的数值包括: Table 5.1: Debugging Levels Level Description -1 enable all debugging 0 no debugging 1 trace function calls 2 debug packet handling 4 heavy trace debugging 8 connection management 16 print out packets sent and received 32 search filter processing http://i18n.linux.net.cn/others/OpenLDAP2.htm(第 30/88 页)2007-10-4 22:36:22 OpenLDAP2.1管理员指南 64 configuration file processing 128 access control list processing 256 stats log connections/operations/results 512 stats log entries sent 1024 print communication with shell backends 2048 print entry parsing debugging 示例: loglevel –1 将记录许多许多的调试信息。 缺省值: loglevel 256 5.2.1.7、 objectclass 该指令定义了一个对象类。请参考“模式说明”一章获得如何使用该指令的更多信息。 5.2.1.8、 referral 该指令说明了当slapd处理请求时,如果不能在本地数据库中找到信息,将返回的引用。 示例: referral ldap://root.openldap.org 这将引用一个非本地的请求到OpenLDAP项目的全局根LDAP服务器。具有智能的LDAP客户端可 以向该服务器重新提交请求。但是请注意,大多数客户端只是知道如何处理简单的包含一个主机 部分和一个DN(distinguished name)部分的LDAP URL。 5.2.1.9、 sizelimit 该指令说明了一个搜索操作所能返回的最大条目的数量。 缺省值: sizelimit 500 http://i18n.linux.net.cn/others/OpenLDAP2.htm(第 31/88 页)2007-10-4 22:36:22 OpenLDAP2.1管理员指南 5.2.1.10、 timelimit 该指令说明了slapd应答搜索请求的时候花费的最长秒数。如果一个请求在该时间内没有结束,会 返回一个表示超时的结果。 缺省值: timelimit 3600 5.2.2、 通用后端指令 本部分说明的指令只应用于定义它们的后端。它们被所有类型的后端所支持。后端指令应用于所 有相同类型的数据库实例,并且,根据不同的指令,可以被数据库指令覆盖。 5.2.2.1、 backend 该指令表示一个后端声明的开始。应该是bdb或者是其他受支持的后端类型中的一种。这 些类型在表5.2种列出: Table 5.2: Database Backends Types Description bdb Berkeley DB transactional backend dnssrv DNS SRV backend ldbm Lightweight DBM backend ldap Lightweight Directory Access Protocol (Proxy) backend meta Meta Directory backend monitor Monitor backend passwd Provides read-only access to passwd(5) perl Perl Programmable backend shell Shell (extern program) backend sql SQL Programmable backend tcp TCP Programmable backend 示例: database bdb 这说明了一个新的BDB后端声明的开始。 5.2.3、 通用数据库指令 http://i18n.linux.net.cn/others/OpenLDAP2.htm(第 32/88 页)2007-10-4 22:36:22 OpenLDAP2.1管理员指南 本部分说明的指令只应用于定义它们的数据库。它们被每一种类型的数据库所支持。 5.2.3.1、 database 此指令表示一个数据库实例声明的开始。可以是bdb或者是其他受支持的后端类型中的一 种。这些类型在表5.2种列出。 示例: database bdb 这说明了一个新的数据库实例声明的开始。 5.2.3.2、 readonly { on | off } 此指令将数据库设置为“只读”状态。任何试图修改数据库的操作将返回“unwilling to perform”错误。 缺省值: readonly off 5.2.3.3、 replica replica host=[:] [bindmethod={ simple | kerberos | sasl }] ["binddn="] [mech=] [authcid=] [authzid=] [credentials=] [srvtab=] 此指令说明了一个该数据库的一个复制站点。host=参数说明了一个主机和一个可选的端口,此主 机上运行了一个附属slapd实例。对于可以指定域名或者IP地址。如果没有指定 http://i18n.linux.net.cn/others/OpenLDAP2.htm(第 33/88 页)2007-10-4 22:36:22 OpenLDAP2.1管理员指南 ,使用标准的LDAP端口(389)。 binddn=参数给出了更新附属slapd时绑定的DN。该DN应该具有对附属slapd数据库的读/写权限, 通常给定一个在附属slapd的配置文件中指定的rootdn。它必须和附属slapd的配置文件中指出的 updatedn相匹配。因为DN很可能会包含空格,因此,整个"binddn="字符串应该包含在双引 号中。 bindmethod应该是simple或者kerberos或者sasl。取决于当连接到附属slapd时是使用了简单的口令认 证,或者是Kerberos认证或SASL认证。 除非存在足够的安全性和秘密保护措施(比如,TLS或者IPSEC),否则,不应该使用简单口令认 证。简单口令认证需要声明binddn和credentials参数。 Kerberos认证和SASL认证相比也是不推荐的。尤其是KERBEROS_V4和GSSAPI。Kerberos需要设置 binddn和srvtab参数。 SASL认证是最推荐使用的。SASL认证需要使用mech参数指定一种认证机制。根据这种机制,需 要分别使用authcid和credentials参数指定一个认证身份和认证证书。authzid参数也可以被用来指定 一个认证身份。 请参阅“使用SLURPD进行复制”一章来获得使用此指令的更多信息。 5.2.3.4、 replogfile 该指令说明了slapd用来记录改变的复制日志文件。复制日志文件通常被slapd写入,并且由slurpd 读出。通常情况下,该指令只有在使用slurpd复制数据库的时候才会使用。但是,即使slurpd没有 运行,您也可以使用它来产生一个事务记录。在这种情况下,您需要定时截断该文件,否则,它 将会持续增长。 请参阅“使用SLURPD进行复制”一章来获得使用此指令的更多信息。 5.2.3.5、 rootdn 该指令说明了对于该数据库的操作不受限于存取控制或者管理限制的DN。该DN不应该指向目录 中的任何条目。该DN可以指向一个SLSL证书。 基于条目的示例: rootdn "cn=Manager,dc=example,dc=com" 基于SASL的示例: http://i18n.linux.net.cn/others/OpenLDAP2.htm(第 34/88 页)2007-10-4 22:36:22 OpenLDAP2.1管理员指南 rootdn "uid=root@EXAMPLE.COM" 5.2.3.6、 rootpw 该指令说明了上面的指令中总是能够工作的DN的口令,无论指定的DN条目是否存在,或者,是 否具有一个口令。该指令和基于SASL的认证相比是不推荐的。 示例: rootpw secret 5.2.3.7、 suffix 该指令指明了一个传递给后台数据库的查询的DN后缀。可以给出多个后缀行,并且对于每一个 数据库定义,至少需要一个。 示例: suffix "dc=example,dc=com" 以指定后缀"dc=example,dc=com"结尾的查询将被传递给后台数据库。 注意:当选择了一个传递给后端的查询时,slapd在每一个数据库定义中,按照它们在文件中出现的顺 序查找后缀行。因此,如果一个数据库后缀是另外一个的前缀,它在配置文件中,必须出现在另外一个 的后面。 5.2.3.8、 updatedn 该指令只有在附属slapd中才会使用。它说明了允许对复本进行改变的DN的名称。这可能是slurpd (8)在对复本做改变的时候绑定的DN,或者是和一个SASL证书相关联的DN。 基于条目的示例: updatedn "cn=Update Daemon,dc=example,dc=com" 基于SASL的示例: updatedn "uid=slurpd@EXAMPLE.COM" 请参阅“使用SLURPD进行复制”一章来获得使用此指令的更多信息。 http://i18n.linux.net.cn/others/OpenLDAP2.htm(第 35/88 页)2007-10-4 22:36:22 OpenLDAP2.1管理员指南 5.2.3.9、 updateref 该指令只有在附属slapd中才会使用。它说明了当客户端对复本提交更新请求时返回给客户端的 URL。如果说明了多次,每一个URL都将被返回。 updateref ldap://master.example.net 5.2.4、 BDB数据库指令 该类别的指令只是适用于一个BDB数据库。也就是说,它们必须出现在一个“database bdb”行之 后,并且在任何后续的“backend”或者“database”行之前。 5.2.4.1、 directory 该指令说明了包含BDB数据库文件和相关联的索引的目录。 缺省值: directory /usr/local/var/openldap-data 5.2.5、 LDBM数据库指令 该类别的指令只是适用于一个LDBM数据库。也就是说,它们必须出现在一个“database LDBM”行之后,并且在任何后续的“backend”或者“database”行之前。 5.2.5.1、 cachesize 该指令说明了被LDBM后端数据库实例保持在内存缓存中的条目的数量。 缺省值: cachesize 1000 5.2.5.2、 dbcachesize 该指令说明了和每一个打开的索引文件相关联的内存缓存的字节数。如果它不被底层的数据库方 法支持。该指令被忽略。增加该数量将会使用更多的内存,但是,可以使得性能大幅度上升,尤 其是在修改或者创建索引的时候。 缺省值: http://i18n.linux.net.cn/others/OpenLDAP2.htm(第 36/88 页)2007-10-4 22:36:22 OpenLDAP2.1管理员指南 dbcachesize 100000 5.2.5.3、 dbnolocking 如果该选项存在,禁止数据库锁定。允许该选项可以提高性能,但是将为数据安全性付出代价。 5.2.5.4、 dbnosync 该选项使得当发生改变时,磁盘上的数据库内容不会立即和内存中的内容进行同步。允许该选项 将提高性能,但是,同样将损害数据安全性。 5.2.5.5、 directory 该指令说明了包含LDBM数据库文件和相关联的索引的目录。 缺省值: directory /usr/local/var/openldap-data 5.2.5.6、 index { | default} [pres,eq,approx,sub,none] 该指令说明了对于指定属性维护的索引。如果只是指定一个,将维护缺省的索引。 示例: index default pres,eq index uid index cn,sn pres,eq,sub index objectClass eq 第1行设置缺省的索引集合维护为存在和相等,第2行使得对于uid属性类型维护缺省的索引集合 (存在和相等)。第3行对于cn和sn属性类型维护存在,子串,和相等索引集合,第4行对于 objectClass属性类型维护相等索引。 默认情况下,不维护任何索引。通常情况下,建议对于objectClass属性类型维护一个相等索引。 index objectClass eq http://i18n.linux.net.cn/others/OpenLDAP2.htm(第 37/88 页)2007-10-4 22:36:22 OpenLDAP2.1管理员指南 5.2.5.7、 mode 该指令说明了对于新创建的数据库索引文件应该具有的保护模式: 缺省值: mode 0600 5.3、 存取控制 对于slapd和条目的访问受到存取配置文件指令的控制。一个存取控制行的通常的格式如下: ::= access to [by ]+ ::= * | [ dn[.]=] [filter=] [attrs=] ::= regex | base | one | subtree | children ::= | , ::= | entry | children ::= [* | anonymous | users | self | dn[.]=] [dnattr= ] [group[/[/][.]]= ] [peername[.]=] [sockname[.]=] [domain[.]=] [sockurl[.]=] http://i18n.linux.net.cn/others/OpenLDAP2.htm(第 38/88 页)2007-10-4 22:36:22 OpenLDAP2.1管理员指南 [set=] [aci=] ::= regex | exact | base | one | subtree | children ::= regex | exact ::= [self]{|} ::= none | auth | compare | search | read | write ::= {=|+|-}{w|r|s|c|x}+ ::= [stop | continue | break] 其中,部分选择了该存取控制应用的条目或者属性。部分说明了哪一个身份被赋予 访问权限,部分说明了赋予什么样的访问权限。可以指定多个 3 元组,以允许为相同的条目和属性赋予多个身份不同的访问权限。 5.3.1、 控制对于What的访问 一个存取控制说明的部分决定了存取控制规则应用的条目和属性。条目可以通过两种方式 选择:通过匹配条目的DN的正则表达式: dn= 注意:DN的模式说明应该规范到RFC2253中限制的DN格式。特别是,不应该出现用来分隔不同部分的 空格或者逗号。一个规范化的DN的例子是:"cn=Babs Jensen,dc=example,dc=com"。一个不规范的DN 的例子是:"cn=Babs Jensen; dc=example; dc=com"。 或者,可以通过匹配条目中的某些属性的过滤器来选择条目: filter= 是一个表示一个LDAP搜索过滤的字符串,如RFC2254中描述的那样。 通过在选择器中包含一个用逗号分隔的属性列表来选择条目中的属性: attrs= http://i18n.linux.net.cn/others/OpenLDAP2.htm(第 39/88 页)2007-10-4 22:36:22 OpenLDAP2.1管理员指南 对于条目本身的访问控制必须使用特殊的属性名称“entry”来赋予或者拒绝。注意,给一个属性 赋予权限是不够的,通过entry属性赋予条目本身访问权限也是需要的。在本部分最后的示例可以 帮助您搞清楚这些问题。 最后,有一个特殊的条目选择器“*”,该选择器被用来选择任何条目。当没有提供其他的 选择器时使用该选择器。它等同于“dn=.*” 5.3.2、 赋予Who访问权限 部分指明了被赋予访问权限的身份。注意,权限被赋予“身份”而不是“条目”。表5.3说 明了身份说明选项: Table 5.3: Access Entity Specifiers Specifier Entities * All, including anonymous and authenticated users anonymous Anonymous (non-authenticated) users users Authenticated users self User associated with target entry dn= Users matching regular expression DN说明选项使用一个正则表达式来匹配当前身份的“规范”DN。 dn= 所谓的“规范化”,指的是从身份DN中删除多余的空格,并且删除RDN中用来分隔不同部分的 逗号。 系统还支持其他的控制方式。比如,一个(By NTKO:此处应该是?)可以通过一个匹 配限制客户端的域名: domain= 或者通过一个条目,该条目出现在访问权限应用的条目的一个具有一个DN值的属性中: dnattr= dnattr指令被用来给予访问一个条目的权限,并且访问者的DN出现该条目的一个具有DN类型的 值中。(比如,可以将访问一个组条目的权限给予所有那些列出在该组条目的owner属性中的 人。) 5.3.3、 赋予的access权限 http://i18n.linux.net.cn/others/OpenLDAP2.htm(第 40/88 页)2007-10-4 22:36:22 OpenLDAP2.1管理员指南 可以赋予的的类型可以是如下几种: Table 5.4: Access Levels Level Privileges Description none no access auth =x needed to bind compare =cx needed to compare search =scx needed to apply search filters read =rscx needed to read search results write =wrscx needed to modify/rename 每一个级别隐含了更低的级别。因此,给予某人写一个条目的权限同时给了他读,搜索,比较和 认证的权限。但是,也可以使用权限说明来赋予特定的权限。 5.3.4、 存取控制计算 当计算某个请求者是否应该被给予访问一个条目或者属性的权限的时候,slapd将条目或者属性和 在配置文件中给出的条目或者属性相比较。对于每一个条目,包含该条目的数据库所提供 的存取控制被首先应用,(或者如果没有包含在任何一个数据库中,应用第一个数据库的存取控 制),然后是全局存取控制指令。在这种优先级的情况下,存取控制按照它们在配置文件中出现 的顺序被检查。Slapd在找到第一个匹配该条目或者属性的选择器时停止搜索。相关的存取 控制指令就是slapd将要用来计算存取控制的指令。 下一步,slapd将请求访问的身份和上面找到的存取控制指令的相比较,它在找到第一个匹 配请求者身份的选择器之后停止。这决定了请求访问者对于条目或者属性所具有的访问权 限。 最后,slapd将所选的指令中赋予的权限和客户端请求的权限相比较。如果超过或者等于 客户端请求的权限,则赋予该用户权限,否则拒绝访问。 存取控制指令的计算顺序使得它们在配置文件中的顺序非常重要。如果一个存取控制指令在所选 择的条目中比另外一个更加特定(选择的范围更小),它应该首先出现在配置文件中。同样,如 果一个选择器比另外一个更加特定,它也应该首先出现在存取控制指令中。下面的存取控 制示例可以让这个问题更加清楚。 5.3.5、 存取控制示例 上面描述的存取控制应用是非常强大的。下面的部分显示了它们的一些实用示例。首先,几个简 单的例子: http://i18n.linux.net.cn/others/OpenLDAP2.htm(第 41/88 页)2007-10-4 22:36:22 OpenLDAP2.1管理员指南 access to * by * read 这个存取控制指令将读权限赋予每一个人。 access to * by self write by anonymous auth by * read 该指令允许用户修改自己的条目,允许认证,并且允许所有其他人读取。注意,只有第一个by 语句匹配应用。因此,匿名用户被赋予认证权限,而非读取权限。因此,最后一个语句 和“by users read”效果相同。 下面的指令显示了一个使用通过两条存取控制指令中的DN,并且使用正则表达式来选择条目的 示例。此示例中,顺序是非常重要的: access to dn=".*,dc=example,dc=com" by * search access to dn=".*,dc=com" by * read dc=com子树下面的条目被赋予读权限,除了dc=example,dc=com的子树,它被赋予的是搜索权 限。dc=com没有被赋予任何权限,因为没有任何存取控制指令匹配该DN。如果上面的存取控制 指令被反过来,后面的存取控制指令将永远不会到达,因为所有dc=example,dc=com的条目同样 也是dc=com的条目。 同时注意,如果没有任何access to指令匹配或者没有by 语句,访问将被拒绝。也就是说, 所有的access to指令都以一个隐含的by * none语句结束,并且每一个存取控制列表以一个隐含的 access to * by * none指令结束。只有没有指定存取控制的情况下,才会赋予defaultaccess权限。 下面的例子显示了顺序的重要性,对于存取控制指令和by 语句而言都是如此。它也显示了 使用一个属性选择器来赋予对特定属性的访问权限,以及不同的选择器。 access to dn="(.*,)?dc=example,dc=com" attr=homePhone by self write http://i18n.linux.net.cn/others/OpenLDAP2.htm(第 42/88 页)2007-10-4 22:36:22 OpenLDAP2.1管理员指南 by dn="(.*,)?dc=example,dc=com" search by domain=.*\.example\.com read access to dn="(.*,)?dc=example,dc=com" by self write by dn=".*,dc=example,dc=com" search by anonymous auth 该示例适用于所有在“dc=example,dc=com”子树中的条目。对于所有除了homePhone以外的属性 而言,该条目本身可写,其他example.com条目可以搜索,其他任何人除了认证/授权之外(总是 被匿名操作),没有存取权限(由by * none隐含说明)。homePhone属性可以被该条目写,被其 他的example.com中的条目搜索,可以被从example.com域中连接的客户读取,其他的将不能读 (由by * none隐含说明)。其他的访问将被拒绝(由隐含的access to * by * none说明)。 有时,允许一个特定的DN来从一个属性中增加或者删除自己是很有用的。比如,如果您想创建 一个组,并且允许人们想该组的member属性中增加或者删除自己的DN,应该使用如下的存取控 制指令来完成这一点: access to attr=member,entry by dnattr=member selfwrite 这个dnattr说明的选择器说明,该存取控制应用于member属性中列出的条目。selfwrite存取 控制选择器说明那些成员只能从属性中增加或者删除自己,而不能增加或者删除其他值。附加 的“entry”是必须的,因为要访问该条目的属性,能够访问该条目是必须的。 5.4、 配置文件示例 下面是一个配置文件的示例。该示例中有许多说明文字。它定义了两个数据库来处理X.500树中的 不同部分;两个部分都是BDB数据库实例。示例中显示的行号只是为了参考,并没有包含在实际 的文件中。首先,是全局配置部分: 1. # example config file - global configuration section 2. include /usr/local/etc/schema/core.schema 3. referral ldap://root.openldap.org http://i18n.linux.net.cn/others/OpenLDAP2.htm(第 43/88 页)2007-10-4 22:36:22 OpenLDAP2.1管理员指南 4. access to * by * read 第1行是注释。第2行包含了一个包含主要模式定义的配合文件。第3行的referral指令的意思是在后 面的本地数据库定义中找不到的查询将被引用到一个运行在标准端口的LDAP服务器。该服务器 是root.openldap.org。 第4行是一个全局的存取控制。它应用于所有的条目(在每一个单独的数据库指明的存取控制之 后)。 配置文件的下一部分定义了一个BDB后端,它将负责处理“dc=example,dc=com”树中的查询。该 数据库被复制到两个附属slapd,一个在truelies,另外一个在judgmentday。对于几个属性维护索 引,并且,userPassword属性对于非授权访问被保护。 5. # BDB definition for the example.com 6. database bdb 7. suffix "dc=example,dc=com" 8. directory /usr/local/var/openldap-data 9. rootdn "cn=Manager,dc=example,dc=com" 10. rootpw secret 11. # replication directives 12. replogfile /usr/local/var/openldap/slapd.replog 13. replica host=slave1.example.com:389 14. binddn="cn=Replicator,dc=example,dc=com" 15. bindmethod=simple credentials=secret 16. replica host=slave2.example.com 17. binddn="cn=Replicator,dc=example,dc=com" 18. bindmethod=simple credentials=secret 19. # indexed attribute definitions http://i18n.linux.net.cn/others/OpenLDAP2.htm(第 44/88 页)2007-10-4 22:36:22 OpenLDAP2.1管理员指南 20. index uid pres,eq 21. index cn,sn,uid pres,eq,approx,sub 22. index objectClass eq 23. # database access control definitions 24. access to attr=userPassword 25. by self write 26. by anonymous auth 27. by dn="cn=Admin,dc=example,dc=com" write 28. by * none 29. access to * 30. by self write 31. by dn="cn=Admin,dc=example,dc=com" write 32. by * read 第5行是注释。第6行的database关键字表示开始数据库定义。第7行制定了传递给该数据库的查询 的DN后缀。第8行说明了该数据库文件所处的位置。 第9行和第10行指明了数据库的“超级管理员”,以及他们的口令。该条目不会受限制于存取控 制或者大小和时间限制。 第11行到第18行是说明复制的。第12行说明了复制日志文件的位置(该文件记录数据库的改变, 被slapd写入,被slurpd读出)。第13行到第15行指明了副本数据库的主机名和端口,和执行改变 操作相绑定的DN,以及绑定的方法和执行绑定操作的DN的口令。第16行到第18行说明了第2个 复本站点。查看“使用slurpd进行复制”一章来获得有关这些指令的更多信息。 第20行到第22行指明了为哪些属性维护索引。 第24行到第32行说明了对本数据库中条目的存取控制。因为这是第一个数据库,存取控制同样适 用于不在任何数据库中保存的条目(比如Root DSE)。对于所有适合的条目,userPassword属性只 能被条目本身和“admin”条目写入。它可以被用来进行认证或者授权,但是其他情况时不能读 取的。所有其他的条目可以被条目本身和“admin”条目写入,并且可以被其他任何用户读取 http://i18n.linux.net.cn/others/OpenLDAP2.htm(第 45/88 页)2007-10-4 22:36:22 OpenLDAP2.1管理员指南 (认证过或者没有认证过的用户)。 该示例配置文件的下一个部分定义了另外一个BDB数据库。该数据库查询包含在“dc=example, dn=net”子树中的查询。但是,被第一个数据库中相同的条目所管理。注意,如果没有第39行, 由于第4行中的全局存取规则,将会允许读取权限。 33. # BDB definition for example.net 34. database bdb 35. suffix "dc=example,dc=net" 36. directory /usr/local/var/openldap-data-net 37. rootdn "cn=Manager,dc=example,dc=com" 38. index objectClass eq 39. access to * by users read 6、 运行SLAPD slapd被设计为可以作为一个单独的服务器运行。这允许服务器充分的利用缓存,利用底层数据库 的特性来管理并发,并且节省系统资源。从inetd(8)来运行slapd(8)不能作为选项。 6.1、 命令行选项 slapd(8)支持大量的命令行选项。它们在手册页中有详细的说明。本部分详细说明了几个常用的选 项。 -f 该选项说明了可以为slapd使用的另外的配置文件。缺省选项是正常情况下的/usr/local/etc/ openldap/slapd.conf。 -h 该选项说明了另外的侦听器配置。缺省的是ldap:///,它表示运行在TCP上的LDAP,在缺省的389 端口侦听所有的网络界面。可以指明特殊的主机——端口对或者其他的协议模式(比如,ldaps:// 或者ldapi://)。例如:-h “ldaps:// ldap://127.0.0.1:666”将创建两个侦听器:一个在默认的LDAP/ SSL的636端口,侦听所有网络界面上的通过SSL的LDAP请求,另一个在localhost(环回地址)界面 http://i18n.linux.net.cn/others/OpenLDAP2.htm(第 46/88 页)2007-10-4 22:36:22 OpenLDAP2.1管理员指南 上侦听666端口。主机可以使用IPV4的点分十进制格式,或者使用主机名称。端口必须是数字。 -n 该选项说明了用来进行日志记录或者其他用途的服务名称。默认的服务名称是slapd。 -l 该选项指明了用于syslog(8)应用的本地用户。可以是LOCAL0,LOCAL1,LOCAL2,⋯⋯LOCAL7 等数值。默认值是LOCAL4。该选项并不是在所有系统上都支持。 -u user -g group 该选项分别指明了用来运行的用户或者组的身份。User可以是用户名或者uid,group可以是组名 或者gid。 -r directory 该选项指明了一个运行时的目录。slapd将在打开侦听器并且读取任何配置文件或者初始化任何后 端数据库之前使用chroot(2)到该目录。 -d | ? 该选项设置slapd的调试级别为。当level是“?”的时候,无论传递给它任何选项,将打印不 同的调试级别,然后slapd终止。当前的调试级别是: Table 6.1: Debugging Levels Level Description -1 enable all debugging 0 no debugging 1 trace function calls 2 debug packet handling 4 heavy trace debugging 8 connection management 16 print out packets sent and received 32 search filter processing 64 configuration file processing 128 access control list processing 256 stats log connections/operations/results 512 stats log entries sent 1024 print communication with shell backends 2048 print entry parsing debugging http://i18n.linux.net.cn/others/OpenLDAP2.htm(第 47/88 页)2007-10-4 22:36:22 OpenLDAP2.1管理员指南 可以在调试选项中指定多个调试级别。每次指定一个。或者,因为调试级别是可以相加的,可以 指定它们的和。比如,如果需要跟踪函数调用,并且查看正在处理的配置文件,可以设置该选项 为:-d 65。或者,可以设定为:-d 1 –d 64。参阅获取更详细的信息。 注意:为了使得除了两个统计级别之外的调试信息生效,slapd必须在编译时定义_DLDAP_DEBUG。 6.2、 启动SLAPD 通常情况下,slapd可以以如下方式运行: /usr/local/etc/libexec/slapd [
还剩87页未读

继续阅读

下载pdf到电脑,查找使用更方便

pdf的实际排版效果,会与网站的显示效果略有不同!!

需要 8 金币 [ 分享pdf获得金币 ] 0 人已下载

下载pdf

pdf贡献者

lei123hb

贡献于2012-09-23

下载需要 8 金币 [金币充值 ]
亲,您也可以通过 分享原创pdf 来获得金币奖励!
下载pdf