OpenLDAP资源列表
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/
目录
序言
1.简要介绍OpenLDAP目录服务
1.1 什么是目录服务?
1.2 什么是LDAP?
1.3 LDAP是如何工作的?
1.4 什么是X.500?
1.5 LDAPv2和LDAPv3的区别?
1.6 什么是slapd,它能做什么?
1.7 什么是slurpd,它能做什么?
2.快速入门
3。总览 - 配置选择
3.1 本地目录服务
3.2 带有引用(Referrals)的本地目录服务
3.3 拷贝(Replicated)的目录服务
3.4 分布式(Distributed)的目录服务
4.构建和安装OpenLDAP软件
4.1 获取和解压缩
4.2 预安装(Prerequisite)
4.3 运行configure命令
4.4 生成
4.5 测试
4.6 安装
5.slapd的配置文件
5.1 配置文件格式
5.2 配置文件指令
5.3 访问控制
5.4 配置文件示列
6.运行slapd
6.1 命令行选项
6.2 启动slapd
6.3 停止slapd
7.数据库创建和维护工具
7.1 在LDAP上创建数据库
7.2 脱机创建数据库
7.3 LDIF文本的条目格式
8.方案说明
8.1 分布式的方案文件
8.2 方案的扩展
9.安全考虑
9.1 网络安全
9.2 保持数据的完整(integrity)与一致(confidentiality)
9.3 认证(authentication)方法
10.使用SASL
10.1 SASL的安全考虑
10.2 SASL认证
10.3 SASL代理认证
11.使用TLS
11.1 TLS验证
11.2 配置TLS
12.构建分布式的目录服务(Distributed Directory Service)
12.1 子确认消息(Subordinate Knowledge Infomation)
12.2 父确认消息(Superior Knowledge Infomation)
12.3 ManageDsaIT控制器(Control)
13.用slurpd进行拷贝
13.1 总览
13.2 拷贝日志
13.3 命令行选项
13.4 配置slurpd和从属的slapd实例
13.5 高级slurpd选项
14.LDAP同步拷贝
14.1 LDAP内容同步协议
14.2 Syncrepl的细节
14.3 配置Syncrepl
15.代理缓存引擎
15.1 总览
15.2 代理缓存配置
附录A.通用配置说明
附录B.OpenLDAP软件版权声明
B.1 OpenLDAP软件版权声明
B.2 附加版权声明
B.3 密西根大学版权声明
附录C.OpenLDAP公关许可证
1.OpenLDAP目录服务简介
本文档详细讲解了如何构建,配置和操作OpenLDAP来提供目录服务。其中包括配置并运行LDAP守护程序slapd以及负责LDAP的更新和复制的守护程序slurpd的细节。它既是新手的上路指南,也为经验丰富的管理员提供参考。本节将对目录服务,特别是slapd所提供的目录服务做一个简单的介绍。
1.1 什么是目录服务?
目录是在读取,浏览和搜索方面做了特殊优化的一类数据库。目录包含基于属性的,描述性的信息,并且支持高级的过滤功能。目录一般来说不支持大多数事务型数据库所支持的高吞吐量和复杂的更新操作。就算目录允许进行更新操作的话,也是要么全部,要么都不的原子操作。目录的长处在于为大量的查询和搜索操作提供快速反馈。为了保证数据的可用性和可靠性,它们在着眼于减少反应时间的同时也可能具备广泛的复制信息的能力。当目录信息被复制时,复制方与被复制方有暂时的不一致是可以的,只要它们最终仍然保持同步。
可以有多种不同的方式来提供目录服务。不同的目录所允许存储的信息是不同的,在信息如何被引用,查询,更新以及防止未经授权的访问等问题上不同的目录的处理方式也有诸多的不同。一些目录服务是本地的,只提供受限的服务(比如,单机上的finger服务)。另一些服务是大范围的(global),提供广阔得多的服务(比如面向整个因特网)。大范围的服务通常是分布式的,这也就意味着数据是分布在多台机器上的,这些机器一起来提供目录服务。典型的大范围服务定义一个统一的名称空间(namespace)来给出一个相同的数据视图(data view),而不管你相对于数据所在的位置。DNS是一个典型的大范围分布式目录服务的例子。
1.2 什么是LDAP?
LDAP是Lightweight Directory Access Protocol(轻量级目录访问协议)的缩写。正如它的名字所表明的那样,它是一个轻量级的目录访问协议,特指基于X.500的目录访问协议的缩微版本。LDAP运行在TCP/IP或者其他的面向连接的传输服务之上。LDAP完整的技术规范由 RFC2251 "The Lightweight Directory Access Protocol (v3)" 和其他几个在RFC3377中定义的文档组成。本节将从用户的角度对LDAP做一个大致的了解。
什么样的信息可以存储在目录当中?LDAP信息模型是基于条目的(entry)。一个条目就是一些具有全局唯一的标识名(Distinguished Name,简写做DN)的属性的集合。DN用于无二义性的指代一个唯一的条目。条目的每一个属性都有一个类型(type),一个或者多个值(value)。类型(type)往往是特定字符串的简写,比如用"cn"指代"common name",或者"mail"指代电子邮件地址。值(value)的语法依赖于类型(type)。比如,类型为cn的属性可能包含值Babs Jensen。类型为mail的属性可能包含值"babs@example.com"。类型为jpegPhoto的属性可能包含二进制格式的JPEG图象。
信息在目录中是如何组织的?在LDAP中,条目是按树状的层次结构组织的。传统上,这个结构往往是地理界限或者组织界限的反映。代表国家的条目位于整个目录树的顶层。之下的条目则代表各个州以及国家性的组织。再下面的条目则代表着组织单位,个人,打印机,文件,或者你所能想到的其他东西。图1.1显示了按照传统命名方式组织的LDAP目录信息树。
图1.1: LDAP目录树(传统命名方式)
目录树也可以按照因特网域名结构组织。因为它允许按照DNS对目录服务进行定位,这种命名方式正变得越来越受欢迎。图1.2显示了按照域名进行组织的一个LDAP目录树的例子。
图1.2:LDAP目录树(域名命名方式)
另外,LDAP允许你通过使用一种叫做objectClass的特殊属性来控制哪些属性是条目所必须的,哪些属性是条目可选的。objectClass属性的值是由条目所必须遵从的方案(schema)来定义的。
信息是如何被引用的?一个条目是通过它的标识名来引用的。而标识名是由相对标识名(Relative Distinguished Name或者RDN)和它的父条目名连在一起来构成的。比如,在因特网命名的例子中,Barbara Jensen条目有相对标识名uid=babs和标识名uid=babs,ou=People,dc=example,dc=com。完整的DN格式在 RFC2253,"Lightweight Directory Access Protocol (v3): UTF-8 String Representation of Distinguished Names"中描述。
信息是如何被访问的?LDAP定义了一组查询和更新目录的操作。支持的操作包括从目录中添加和删除条目,更改已有的条目,更改已有条目的名字。然而,大多数情况下LDAP是用于搜索目录中的信息的。通过指定搜索过滤器,LDAP可以在目录的相关部分搜索相符的条目。满足过滤条件的每一个条目都能收到请求信息。
比如,你可能想搜索位于dc=example,dc=com目录子树下的叫Barbara Jensen的人的条目,并获取找到的每个条目的email地址。LDAP可以让你轻松的完成这一切。或者你想搜索直接位于st=California,c=US子树之下且名称中有Acme字符串,并且有一个传真号的组织的条目。LDAP也让你能轻松地完成这一切。下一节将详细描述更多的有关你能用LDAP做什么和它如何对你有用的诸多细节。
怎样保护信息不受未经授权的访问?一些目录服务不提供保护,允许信息对任何人可见。LDAP提供了一套机制来对客户进行身份确认,或者让客户证明他拥有连接到服务器的身份,这无疑为对服务器进行全方位的访问控制铺平了道路,从而确保了服务器上所包含信息的安全。LDAP也支持privacy和integrity的安全服务。
1.3 LDAP是怎样工作的?
LDAP目录服务是基于客户--服务器模式的。一个或者多个LDAP服务器包含着组成整个目录信息树(DIT)的数据。客户连接到服务器并且发出一个请求(question)。然后服务器要么以一个回答(answer)予以回应,要么给出一个指针,客户可以通过此指针获取到所需的数据(通常,该指针是指向另一个LDAP服务器)。无论客户连到哪个LDAP服务器,它看到的都是同一个目录视图(view)。这是LDAP这类全局目录服务的一个重要特征。
1.4 什么是X.500?
从技术上来说,LDAP是一个到X.500目录服务的目录访问协议,X.500是一个OSI目录协议。最初,LDAP客户通过网关(gateway)访问X.500目录服务。这个网关在客户和网关之间运行LDAP和X.500目录访问协议(Directory Access Protocol ,DAP),而X.500目录访问协议是位于网关和X.500服务器之间的。DAP是一个重量级的协议,在整个OSI协议栈上进行操作,而且需要占用大量的计算资源。LDAP被设计为在TCP/IP层上操作,以小得多的代价实现了大多数DAP的功能。
虽然LDAP可以仍旧通过网关访问X.500目录服务器,但是现在通常都是在X.500服务器上直接实现LDAP。
单独的LDAP守护程序,slapd,可以被看做是一个轻量级的X.500目录服务器。也就是说,它没有实现X.500完整的DAP协议。作为一个轻量级的目录服务器,slapd实现的仅仅是X.500模型的一个子集。
如果你已经在打算运行一个X.500的DAP服务而且你想继续这么做的话,你可以不用再阅读本指南了。本指南全都是关于通过slapd运行LDAP的,而不是运行X.500的DAP。如果你现在没有运行X.500的DAP,或者想停止运行X.500的DAP,或者还没有立即计划要运行X.500的话,请继续往下读。
从LDAP目录服务器上拷贝数据到X.500 DAP DSA是可能的。这需要LDAP/DAP网关。OpenLDAP不提供这样的网关,但是我们的拷贝守护程序可以用于拷贝数据到这样的网关。请参阅本文档的Replication with slurpd章节了解关于拷贝的信息。
1.5 LDAPv2和LDAPv3的区别?
LDAPv3 是在90年代后期开发以取代LDAPv2的。LDAPv3为LDAP添加了如下功能:
。基于SASL的强类型认证(Strong Authentication)
。基于TLS(SSL)的数据完整性和一致性保护
。通过Unicode国际化
。Referrals and Continuations
。方案发现
。可扩展性(控制,可扩展的操作,等等)
LDAPv2是历史性的(RFC3494)。因为大多数LDAPv2的实现(包括 slapd()都没有遵从LDAPv2技术规范,在不同的LDAPv2的实现当中进行互操作是有限的。因为LDAPv2和LDAPv3有着显著的不同,同时部署LDAPv2和LDAPv3将会有大麻烦。应该避免使用LDAPv2。LDAPv2默认是不被支持了的。
1.6 什么是slapd,它能干什么?
slapd(8)是一个可在许多平台上运行的LDAP目录服务器。你可以用它来提供你自己的目录服务。你的目录可以包含相当多的你想放在里面的东西。你可以将它连接到一个全局的目录服务器上,也可以自己运行它。slapd的一些其他的有趣的功能包含如下:
LDAPv3:slapd实现了轻量级目录访问协议的第三个版本。slapd支持IPv4和IPv6还有Unix IPC上的LDAP。
Simple Authentication and Security Layer:slapd支持通过SASL的强类型认证服务。slapd的SASL实现利用了 Cyrus SASL--一个支持DIGEST-MD5,EXTERNAL,和GSSAPI在内的多种机制的软件。
Transport Layer Security:slapd通过使用TLS(或者SSL)提供privacy和integrity保护。slapd的TLS实现利用了OpenSSL。
Topology control:slapd可以被配置为限制基于网络拓扑信息之上的套接字层的访问。这个功能用到了TCP wrappers。
Access control:slapd提供了一个多样并且强大的访问控制功能,它允许你控制对你的数据库中的信息的访问。你能够通过LDAP认证信息,IP地址,域名或者其它的规则控制对条目的访问。slapd支持静态的和动态的访问控制信息。
Internationalization:slapd支持Unicode和语言标志。
Choice of database backends:slapd提供了可让你选择的多种后端数据库。这包括BDB,一种高性能的事务性后端数据库;LDBM,一种轻量级的DBM后端数据库;SHELL,一种能够和任意脚本交互的数据库接口;还有PASSWD,一种与passwd文件交互的简单数据库接口。BDB后端数据库使用了Sleepycat Berkeley DB。LDBM使用Berkeley DB或者GDBM。
Multiple database instances:slapd可以被配置为同时支持多个数据库实例。这意味着一个单一的slapd服务器能够响应LDAP树上多个不同逻辑的部分,使用相同或者不同的后端数据库。
Generic modules API:如果你要求有更多的个性化,slapd可以让你轻易的写出你自己的模块。slapd包含两个不同的部分:前端模块处理和LDAP客户的通信;另外有多个模块处理特定的任务比如数据库操作。因为这两部分是通过定义好的C API进行交互的,所以你可以写出自己的个性化的模块来以多种方式扩展slapd。而且,许多可编程的数据库模块也被提供。这允许你使用流行的编程语言将外部的数据源导入slapd当中(比如Perl,shell,SQL,和TCL)。
Threads: 为达到高性能slapd被线程化了。通过使用一个线程池,只需要有一个支持多线程的slapd进程你就可以处理所有的输入请求。这减小了在高负荷时系统的开销。
Replication: slapd可以被配置为维护一个目录信息的shadow拷贝。这种一主多属(single-master/multiple-slave)的拷贝方案在一些大数据量的环境下是很重要的,因为这种情况下单一的slapd不能提供必要的可用性和可靠性。slapd也支持尚在实验中的多主(multi-master)拷贝方案(用于强类型的ACID属性不需要的地方)。slapd支持两种拷贝方案:LDAP Sync-based和slurpd(-based拷贝方案。
Proxy Cache:slapd可以被配置为具有代理缓存功能的LDAP服务器。
Configuration:slapd是高度可配置的,通过一个简单的配置文件你就可以更改你想要改变的一切。配置选项也都有合理的默认值,无疑这会让你的工作更为轻松。
1.7 什么是slurpd,它能干什么?
slurpd(8)是一个在slapd的帮助下提供拷贝服务的守护程序。它负责将对主slapd数据库的改变分发给各个不同的slapd从属(replicas)。它免除了slapd的后顾之忧--在数据发生改变的时候某些从属也许当掉(down)了或者不可达。slurpd会自动处理失败请求的重传。slapd和slurpd通过一个将更改记入日志的简单文本文件进行通信。
查看Replication with slurpd章节以获得更多关于如何配置和运行slurpd的信息。
反过来,LDAP-Sync-based拷贝也可以用来提供拷贝服务。查看LDAP Sync Replication章节以获得更多信息。
2.快速入门
以下将对OpenLDAP 2.1做一个简单的简介,其中包括LDAP守护程序,slapd(。
它将带你领略安装和配置OpenLDAP的几个基本步骤。它应当和本文档的其他章节,手册,以及其它随发布包一起发放的资料(比如INSTALL文档)或者OpenLDAP站点上的资料(尤其是FAQ)一起使用。
如果你打算严肃地运行OpenLDAP,你应当在准备安装之前参看本文档的全部章节。
-------------------------------------------------------------------------------------------
注意:快速入门没有提及强类型身份认证,也没有提及数据的完整和保密措施。这些都将在本文档的其它章节中详细讲述
-------------------------------------------------------------------------------------------
1. 获取软件包
你可以按照OpenLDAP下载页面(http://www.openldap.org/software/download/).上的说明获得该软件的一个拷贝。推荐新手使用最新版本。
2. 解压发布包
选择一个目录存放该软件的源代码,更改工作目录到该目录下,用下列命令解开发布包:
gunzip -c openldap-VERSION.tgz | tar xvfB -
然后进入发布包目录:
cd openldap-VERSION
你需要用你的发布版本来代替VERSION。
3. 参看文档
现在你应该先参看随发布包发布的COPYRIGHT, LICENSE, README 和 INSTALL文档。COPYRIGHT 和 LICENSE 提供了使用,复制OpenLDAP的相关信息。
你也应该参看本文档的其它章节。特别是,“构建和安装OpenLDAP软件”一节提供了预安装软件以及安装过程的细节。
4. 运行configure脚本
你需要运行configure配置脚本来配置发布包以便在你的系统上构建OpenLDAP。configure脚本可以接受很多的命令行选项来启用或者禁用某些可选的功能。通常默认值就可以了,但你可能会想改变它们。要想得到configure脚本接受的完整选项列表,需要使用--help选项:
./configure --help
考虑到你正在参考本文档,我们就假设你有足够的勇气让configure脚本去决定一切:
./configure
如果configure脚本在你系统上没有出什么差错的话,你现在就可以继续构建整个软件了。如果configure脚本出了问题的话,你可能就需要前往FAQ的安装版块寻求帮助(http://www.openldap.org/faq/),或者是仔细阅读本文档的“构建和安装OpenLDAP软件”一节了。
5.构建软件
下一步是构建整个软件。这一步分为两部分,首先我们构建依赖关系,然后我们开始编译:
make depend
make
两部分都应当无差错的完成。
6. 测试构建是否正确
为了确保构建是正确的,你应当运行test套件(它仅仅会花几分钟的时间):
make test
作用在你确定的配置之上的测试将开始运行并且所有的测试都应该通过。某些测试,比如对复制(replication)的测试,可能会被忽略。
7. 安装软件
现在你要准备安装了,这通常需要超级用户的权限:
su root -c 'make install'
所有的东西都将安装在/usr/local目录下(或者在运行configure时你指定的其它位置)。
8. 编辑配置文件
用你喜欢的编辑器编辑slapd.conf样例(通常位于/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=eng,dc=uni,dc=edu,dc=eu"
rootdn "cn=Manager,dc=eng,dc=uni,dc=edu,dc=eu"
rootpw secret
directory /usr/local/var/openldap-data
配置slapd的相关细节可以在slapd.conf手册和本文档的”slapd的配置文件“一节当中找到。
--------------------------------------------------------------------------------------
注意:启动slapd时指定的目录需要预先存在。
--------------------------------------------------------------------------------------
1. 启动slapd
现在你需要运行下面的命令以启动LDAP服务器slapd:
su root -c /usr/local/libexec/slapd
要检查服务器是否在运行并且配置是否正确,你可以在服务器上运行ldapsearch命令。默认情况下,ldapsearch工具的位置是/usr/local/bin/ldapsearch:
ldapsearch -x -b '' -s base '(objectclass=*)' namingContexts
注意用单引号括起来的命令参数将会取消shell字符的特殊解释。这应当返回:
dn:
namingContexts: dc=example,dc=com
有关运行slapd的细节可以在slapd手册和本文档的”运行slapd“一节中找到。
2. 添加初始条目到目录中
你可以用ldapadd工具添加条目到你的LDAP目录中。ldapadd需要LDIF格式的输入。我们将通过两步来完成它:
1. 创建LDIF文件
2. 运行ldapadd
使用你喜欢的编辑器创建一个包含下面内容的LDIF文件:
dn: dc=<MY-DOMAIN>,dc=<COM>
objectclass: dcObject
objectclass: organization
o: <MY ORGANIZATION>
dc: <MY-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来把这些条目添加到你目录当中了。
ldapadd -x -D "cn=Manager,dc=<MY-DOMAIN>,dc=<COM>" -W -f example.ldif
一定要用你的域名的正确部分取代<MY-DOMAIN> 和 <COM>。你将被提示输入slapd.conf中指定的”secret“。比如,对于example.com,用:
ldapadd -x -D "cn=Manager,dc=example,dc=com" -W -f example.ldif
其中,example.ldif是你在上面创建的文件。
有关目录创建的其它信息可以在本文档的”数据库创建和维护工具“一节中找到。
3. 观察它是否工作
现在你将添加的条目是不是在你的目录当中。你可以用任何LDAP客户端工具来这样做,但是在我们的示例中使用的是ldapsearch工具。切记要用你的站点的正确值取代dc=example,dc=com:
ldapsearch -x -b 'dc=example,dc=com' '(objectclass=*)'
这条命令将搜索并且取得数据库中的每一个条目。
现在你可以用ldapadd或者其它的客户端工具添加更多的条目,尝试各种配置选项,数据库参数或者诸如此类的了。
注意,在默认情况下,slapd允许非超级用户拥有对每个条目的读取权限(超级用户由rootdn配置指令指定)。推荐的方式是对授权用户建立严格的访问控制。访问控制在”slapd的配置文件“章节的”访问控制“一节中讨论。我们鼓励你阅读”安全考虑“,“使用SASL”,“使用TLS”章节。
接下来的章节将给出更多关于编译,构建,运行slapd的详细信息。
3.纵览 - 配置选项
本节给出了LDAP目录服务的各种配置模式的一个纵览,以及如何让你的LDAP服务器slapd适合世界的其他地方。
3.1 本地目录服务
在这种配置模式下,你的slapd只为你的本地域提供目录服务。它不会以任何方式与别的目录服务器交互。这种配置模式如图3.1所示。
图3.1:本地配置模式
如果你是刚刚开始接触LDAP(也就是“快速入门”教你做的),或者如果你只想提供本地的目录服务而不想与外部世界发生瓜葛,那么就应该使用这种模式。只要你愿意,它可以很容易的升级到其它模式。
3.2 带有指针(Referrals)的本地目录服务
在这种配置模式下,你为你的本地域运行一个LDAP服务器,并且将它配置成为当客户的请求超出你的本地域的处理能力的时候能够返回一个指针,该指针指向一个具备处理客户请求能力的更高级的服务器的地址。你可以自己运行这一服务,也可以使用已提供给你的一个。这种配置模式如图3.2所示。
图3.2:带指针的本地模式
如果你想运行本地目录服务并且参与全局的目录,那么运行这种模式。
3.3 拷贝(Replicated)的目录服务
slurpd守护程序是用来将主slapd上的改变传播到一个或多个从属的slapd上。一个master-slave 类型的配置示例如图3.3所示。
图3.3:复制模式的目录服务
这种配置模式可以和前面的两种配置模式之一和起来使用,在前面的两种情况中,单独的slapd不能提供足够的可用性和可靠性。
3.4 分布式(Distributed)的目录服务
在这种配置模式下,本地的服务被分割成为多个更小的服务,每一个都可能被复制,并且通过上级(superior)或者下级(subordinate)指针(referral)粘合起来。
4.构建和安装OpenLDAP软件
本节详细讲解了如何构建和安装OpenLDAP,这包括slapd和slurpd。构建和安装OpenLDAP需要经过几个步骤:安装支撑软件,配置,编译,最后是安装。以下的几节将详细说明这一过程。
4.1 获取和解压缩
你可以从OpenLDAP的官方站点http://www.openldap.org/software/download/ 或者该项目的FTP站点ftp://ftp.openldap.org/pub/OpenLDAP/ 获取到OpenLDAP的一份拷贝。
有两类包(package)可以使用。releases包含了新功能,同时对bug做了修复。尽管项目组采取了相关的的措施保证releases的稳定性,但问题往往还是会在release中出现。stable发布版是被认为稳定的最新版本。
用户可以根据他对新功能或者稳定性的要求自己选择使用的版本。
将OpenLDAP软件包下载到你的本地机器上之后,你需要将它们从存档的压缩文件中解压出来并更改你的当前工作目录到解压后的目录:
gunzip -c openldap-VERSION.tgz | tar xf -
cd openldap-VERSION
你需要用你版本号代替VERSION。
现在你应该先参看随发布包发布的COPYRIGHT, LICENSE, README 和 INSTALL文档。COPYRIGHT 和 LICENSE 提供了使用,复制OpenLDAP的相关信息。
4.2 预安装(Prerequisite)
OpenLDAP需要几个第三方软件的支持。根据你要实现的功能,你可能需要下载并安装一些相关的软件包。本节给出了通常你可能要用到的一些软件包的一些细节。需要注意的是这些第三方软件包可能还需要一些额外的软件的支持。请按照软件包中的安装说明安装好需要的每一个包。
4.2.1 传输层安全
OpenLDAP客户和服务器需要安装OpenSSL TLS库来提供传输层的安全服务。虽然一些操作系统可能把OpenSSL作为基本系统的一部分或者作为可选的组件。OpenSSL仍然需要单独安装。
OpenSSL可从http://www.openssl.org/ 获得。
没有使用OpenSSL的OpenLDAP算不上真正的LDAPv3版本。
4.2.2 Kerberos认证服务
OpenLDAP客户和服务器可以支持基于Kerberos的认证服务。特别是,通过使用Heimdal 或者 MIT Kerberos V,OpenLDAP还可以支持SASL/GSSAPI 认证机制。如果你需要使用基于Kerberos的SASL/GSSAPI 认证,那么你需要安装Heimdal 或者 MIT Kerberos V。
Heimdal可从http://www.pdc.kth.se/heimdal/获得。 MIT Kerberos V可从http://web.mit.edu/kerberos/www/获得。
强烈推荐使用诸如Kerberos这样的软件来提供强类型认证服务。
4.2.3 简单认证和安全层
OpenLDAP客户和服务器需要安装Cyrus的SASL库来提供简单认证和安全层服务。虽然一些操作系统可能把Cyrus SASL作为基本系统的一部分或者作为可选的组件。Cyrus SASL通常还是需要单独安装。
Cyrus SASL可从http://asg.web.cmu.edu/sasl/sasl-library.html获得。Cyrus SASL 将会用到已安装的OpenSSL和Kerberos/GSSAPI 库。
不使用Cyrus SASL 的OpenLDAP算不上真正的LDAPv3版本。
4.2.2 数据库软件
OpenLDAP的首选后端数据库是BDB,要求4.2版本的Sleepycat Software Berkeley DB。如果配置安装的时候还没有安装BDB的话,你是不能用首选后端数据库构建slapd的。
你的操作系统可能把4.2版本的Berkeley DB作为基本系统的一部分或者作为可选的组件。否则的话你需要自己下载并安装它。
Berkeley DB可从http://www.sleepycat.com/download/获得。它有几个不同的版本可用。在写作本文档的时候,其最新版本,即4.2版本,是我们推荐使用的。如果你想使用BDB作为后端数据库的话,这个包是必须的。
slapd的LDBM支持很多种不同的数据库管理系统,包括Berkeley DB 和 GDBM。GDBM可从自由软件基金会(FSF)的站点ftp://ftp.gnu.org/pub/gnu/gdbm/获得。
4.2.5 线程
OpenLDAP可以利用线程。OpenLDAP 支持 POSIX pthreads, Mach CThreads,以及其它的一些变种。如果找不到一个合适的线程系统的话,configure会给出警告。如果这发生的话,请参照FAQ(http://www.openldap.org/faq/)的Software|Installation|Platform Hints一节。
4.2.6 TCP包装器(wrapper)
如果已安装的话,slapd支持TCP包装器(IP级别的过滤控制)。对于不包含公共信息的服务器推荐使用TCP包装器或者其它的IP级别的访问过滤器(比如一些IP级别的防火墙提供的这样的功能)。
4.3 运行configure命令
现在你可能需要运行带--help参数的configure脚本。这将给出一个你在构建OpenLDAP时可做的改变的选项的清单。OpenLDAP的很多功能都可以通过这种方式起用或者禁用。
./configure --help
configure脚本也会通过查看环境变量做某些设置。这些环境变量包括:
表4.1: 环境变量
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]
作为一个示例,假设我们想安装一个以BDB为后端数据库且带有TCP包装器的OpenLDAP。默认情况下,BDB是起用的,而TCP包装器不是。所以,我们需要指定--with-wrappers 来包含对TCP包装器的支持:
./configure --with-wrappers
然而,如果所依赖的软件不是安装在系统目录下面的话,这将会失败。比如,如果TCP包装器的头文件和库文件是分别安装在/usr/local/include 和 /usr/local/lib 下面的话,configure脚本应该是像这样:
env CPPFLAGS="-I/usr/local/include" LDFLAGS="-L/usr/local/lib" \
./configure --with-wrappers
---------------------------------------------------------------------------------------------
注意:有些shell,比如源自Bourne sh的shell,不需要使用env命令。在有些情况下,环境变量需要通过其它语法来指定。
---------------------------------------------------------------------------------------------
4.4 构建
一旦你已运行configure脚本,那么configure脚本输出的最后一行应当是:
Please "make depend" to build dependencies
如果不是上面的这行的话,则说明configure脚本失败了,你需要参看它的输出来决定是在什么地方出了点问题。除非configure完全成功了,否则你不能进入到下一步。
要构建依赖关系,运行命令:
make depend
现在构建整个系统,这一步将实际编译OpenLDAP。
make
你应当小心地检查该命令的输出来确保所有的东西都已经正确构建了。注意这个命令构建LDAP库,相应的客户端和slapd以及slurpd。
4.5 测试
一旦配置和编译都正确完成之后,你应当运行测试套件(suite)来验证构建过程是正确的。
make test
作用在你确定的配置之上的测试将开始运行并且所有的测试都应该通过。某些测试,比如对复制(replication)的测试,可能会被忽略。
4.6 安装
一旦你成功地测试了软件之后,你就要安装它了。你需要拥有对你在configure时指定的安装目录有写权限。默认情况下OpenLDAP是安装在/usr/local目录下的。如果你用--prefix配置选项改变了该设置,它将被安装在你指定的位置。
典型的,安装需要你有超级用户权限。在OpenLDAP源代码的顶层目录,键入:
su root -c 'make install'
然后会给出提示让你输入正确的密码。
你应当小心地检查该命令的输出来确保所有的东西都已经正确安装了。默认情况下你会在/usr/local/etc/openldap 目录下找到slapd的配置文件。参看“slapd的配置文件”一节以获得更多信息