openldap2.4版本管理员文档中文翻译版

OpenLDAP2.4管理员指南

文章目录

  • 1.OpenLDAP介绍
  • 2.快速开始指南
    • 1.获得软件
    • 2.解压压缩包
    • 3.阅读文档
    • 4.运行configure
    • 5.编译软件
    • 6.测试编译结果
    • 7.安装软件
    • 8.编辑配置文件
    • 9.导入数据库配置
    • 10.启动slapd
    • 11.添加初始条目到目录中
    • 12.检测添加结果
  • 3.大图片-配置选择
    • 1.本地目录服务
    • 2.带转发的本地服务
    • 3.可复制的目录服务
    • 4.分布式本地目录服务
  • 4.编译和安装OpenLDAP软件
    • 1.获得和解包软件
    • 2.依赖的软件
      • 1.传输层安全
      • 2.简单验证和安全层
      • 3.Kerberos验证服务
      • 4.数据库软件
      • 5.线程
      • 6.TCP包装
    • 3.运行configure
    • 4.编译软件
    • 5.测试软件
    • 6.安装软件
  • 5.配置slapd
    • 1.配置布局
    • 2.配置指令
      • 1.**`cn=config`**
        • 1.`olcIdleTimeout: `
        • 2.`olcLogLevel: `
        • 3.`olcReferral `
        • 4.示例条目
      • 2.**`cn=module`**
        • 1.`olcModuleLoad: `
        • 2.`olcModulePath: `
        • 3.示例条目
      • 3.**`cn=schema`**
        • 1.`olcAttributeTypes: `
        • 2.`olcObjectClasses: `
        • 3.示例条目
      • 4.具体后端指令
        • 1.`olcBackend: `
        • 2.示例条目
      • 5.具体数据库指令
        • 1.`olcDatabase: [{}]`
        • 2.`olcAccess: to [ by [] [] ]+`
        • 3.`olcReadonly { TRUE | FALSE }`
        • 4.`olcRootDN: `
        • 5.`olcRootPW: `
        • 6.`olcSizeLimit: `
        • 7.`olcSuffix: `
        • 8.`olcSyncrepl`
        • 9.`olcTimeLimit: `
        • 10.`olcUpdateref: `
        • 11.示例目录
      • 6.BDB和HDB数据库指令
        • 1.`olcDbDirectory: `
        • 2.`olcDbCachesize: `
        • 3.`olcDbCheckpoint: `
        • 4.`olcDbConfig: `
        • 5.`olcDbNosync: { TRUE | FALSE }`
        • 6.`olcDbIDLcacheSize: `
        • 7.`olcDbIndex: { | default} [pres,eq,approx,sub,none]`
        • 8.`olcDbLinearIndex: { TRUE | FALSE }`
        • 9.`olcDbMode: { | }`
        • 10.`olcDbSearchStack: `
        • 11.`olcDbShmKey: `
        • 12.示例目录
    • 3.配置文件示例
    • 4.转换旧的slapd.conf(5)文件到cn=config格式
  • 6.slapd配置文件
    • 1.配置文件格式
    • 2.配置文件指令
      • 1.全局指令
        • 1.`access to [ by [] [] ]+`
        • 2.`attributetype `
        • 3.`idletimeout `
        • 4.`include `
        • 5.`loglevel `
        • 6.`objectclass `
        • 7.`referral `
        • 8.`sizelimit `
        • 9.`timelimit `
      • 2.通用后端指令
        • 1.`backend `
      • 3.通用数据库指令
        • 1.`database `
        • 2.`limits [ [...]]`
        • 3.`readonly { on | off }`
        • 4.`rootdn `
        • 5.`rootpw: `
        • 6.`suffix: `
        • 7.`syncrepl`
        • 8.`updateref: `
      • 4.BDB和HDB数据库指令
        • 1.`directory: `
    • 3.配置文件示例
  • 7.运行slapd
  • 1.命令行选项
  • 2.运行slapd
  • 3.停止slapd
  • 8.访问控制
  • 1.介绍
  • 2.静态配置访问控制
      • 1.用什么控制访问
      • 2.谁授予访问权限
      • 3.访问授予
      • 4.访问控制评估
      • 5.访问控制示例
    • 3.动态配置访问控制
      • 1.用什么控制访问
      • 2.谁授予访问权限
      • 3.访问授予
      • 4.访问控制评估
      • 5.访问控制示例
      • 6.访问控制排序
    • 4.访问控制常见例子
      • 1.基本的ACLs
      • 2.匹配匿名和认证用户
      • 3.控制rootDN的访问
      • 4.管理组的访问
      • 5.子集属性的访问授权
      • 6. 允许用户修改他们自己的所有条目
      • 7. 允许创建条目
      • 8. 访问控制中使用正则表达式的tips
      • 9. 基于安全强度系数(SSF)的授权和拒绝访问
      • 10.当预期的东西不工作
    • 5.集 - 基于关系授予权限
      • 1.Groups of Groups
      • 2.没有DN语法的组ACLS
      • 3.Following references
  • 9.Limits
  • 10.Database Creation and Maintenance Tools
  • 11.Backends
  • 12.Overlays
  • 13. Schema Specification
  • 14. Security Considerations
  • 15. Using SASL
  • 16.使用TLS
    • 1.TLS证书
      • 1.服务器证书
      • 2.客户端证书
    • 2.TLS配置
      • 1.服务器配置
        • 1.`TLSCACertificateFile `
        • 2.`TLSCACertificatePath `
        • 3.`TLSCertificateFile `
        • 4.`TLSCertificateKeyFile `
        • 5.`TLSCipherSuite `
        • 6.`TLSRandFile `
        • 7.`TLSEphemeralDHParamFile `
        • 8.`TLSVerifyClient { never | allow | try | demand }`
      • 2.客户端配置
        • 1.`TLS_CACERT `
        • 2.`TLS_CACERTDIR `
        • 3.`TLS_CERT `
        • 4.`TLS_KEY `
        • 5.`TLS_RANDFILE `
        • 6.`TLS_REQCERT { never | allow | try | demand }`
  • 17.构建分布式目录服务
  • 18.复制
    • 1.复制技术
      • 1.LDAP同步复制
        • 1.LDAP内容同步协议
        • 2.Syncrepl细节
    • 2.部署替代
      • 1.Delta-syncrepl复制
      • 2.N-Way Multi-Master复制
        • 1.对于Multi-Master replication有效的观点
        • 2.对于Multi-Master replication无效的观点
        • 3.和Multi-Master replication抵触的观点
      • 3.MirrorMode复制
        • 1.MirrorMode的观点
        • 2.和MirrorMode抵触的观点
      • 4.Syncrepl代理模式
        • 1.替代Slurpd
    • 3.配置不同的复制类型
      • 1.Syncrepl
        • 1.Syncrepl配置
        • 2.设置提供者的slapd
        • 3.设置消费者的slapd
        • 4.启动提供者和消费者的slapd
      • 2.Delta-syncrepl
        • 1.Delta-syncrepl提供者配置
        • 2.Delta-syncrepl消费者配置
      • 3.N-Way Multi-Master
      • 4.MirrorMode
        • 1.Mirror Node配置
          • 1.容错配置
          • 2.标准消费者配置
        • 2.MirrorMode总结
      • 5.Syncrepl代理
  • 19.维护
    • 1.目录备份
    • 2.Berkeley DB的日志
    • 3.Checkpointing
    • 4.Migration
  • 20.Monitoring
  • 21.Tuning
  • 22.调试

1.OpenLDAP介绍

略。

2.快速开始指南

以下是一个OpenLDAP2.4的快速开始指南, 包含独立的LDAP演示, slapd(8)。

它包括安装和配置OpenLDAP软件所需要的基本步骤。但是你应该结合其它文档一起来看,包括本文的其他章节,手册页面,以及其随同软件提供的材料(例如INSTALL文档)或OpenLDAP网站,特别是OpenLDAP的常见问题解答。

如果你确定要使用OpenLDAP软件, 你应该在尝试安装软件之前阅读本文的全文。

注意: 这个快速开始指南没有使用强验证或任何保密服务。这些服务在本OpenLDAP管理员指南的其它章节里有所描述。

1.获得软件

你可以从OpenLDAP软件下载页面获得一份软件拷贝。建议新用户使用最新版本。

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报错, 那么, 你可能需要去看看软件常见问题解答的安装一节 或仔细阅读本文的编译和安装OpenLDAP软件一章。

5.编译软件

下一步是编译软件. 这一步分为两部分,首先我们构建依赖,然后编译软件:

make depend
make

两个 make 都应该不出错地完成。

6.测试编译结果

为了确保正确的编译,你应该运行测试套件(只要花几分钟):

make test

应用你的配置的测试将运行并应该通过. 但是一些测试, 例如复制测试, 可能会跳过。

7.安装软件

现在准备开始安装软件;这通常需要超级用户权限:

su root -c 'make install'

现在所有文件应该都被安装在/usr/local目录下(或任何configure指定的安装目录下).

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=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(8)的细节,可在slapd.conf(5) 手册页,以及本文的 slapd 配置文件一章找到. 注意启动slapd(8)之前那些定义的目录必须实际存在.

9.导入数据库配置

现在准备导入你的数据库配置,运行下面的命令:

su root -c /usr/local/sbin/slapadd -F /usr/local/etc/cn=config -l /usr/local/etc/openldap/slapd.ldif

10.启动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一章找到.

11.添加初始条目到目录中

你可以使用ldapadd(1)添加条目到你的LDAP目录. ldapadd期待的输入是LDIF格式。
我们将分两步走:
1. 建立LDIF文件
2. 运行ldapadd

使用你的编辑器新建一个LDIF文件,包含如下内容:

dn: dc=,dc=
objectclass: dcObject
objectclass: organization
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(1)来添加这些条目到你的目录.

ldapadd -x -D "cn=Manager,dc=,dc=" -W -f example.ldif

确保用你的域名的适当部分替换。你将收到提示输入密码,也就是在slapd.conf中定义的"secret"。例如, 对于 example.com, 使用:

ldapadd -x -D "cn=Manager,dc=example,dc=com" -W -f example.ldif

这里example.ldif就是你上面新建的文件。

另外关于建立目录的信息可以在本文的数据库建立和维护工具一章找到。

12.检测添加结果

现在我们准备检验目录中添加的条目。你可使用任何LDAP客户端来做这件事,但我们的例子使用ldapsearch(1)工具。记住把 dc=example,dc=com 替换成你的网站的正确的值:

ldapsearch -x -b 'dc=example,dc=com' '(objectclass=*)'

本命令将搜索和接收这个数据库中的每一个条目。

现在你准备使用ldapadd(1)或其它LDAP客户端添加更多的条目, 试验更多的配置选项, 后端安排, 等等.

注意缺省的情况下, slapd(8)数据库赋予阅读权限给每个人,除了超级用户(即配置文件中的rootdn参数). 强烈建议你建立控制来限制授权用户的操作。操作权限控制在访问控制章讨论。也鼓励你阅读安全事项,使用SASL和使用TLS章节.

接下来的章节提供更多编译,安装和运行slapd(8)的详细信息。

3.大图片-配置选择

本节概述了各种LDAP目录配置,以及如何使您的独立的LDAP守护进程slapd(8)适合世界其他国家。

1.本地目录服务

在这种配置中,你运行slapd(8)实例,只为你的本地网域提供目录服务。它不以任何方式与其他目录服务器交互。这种配置如图3.1。

图3.1 本地服务配置

图3.1 本地服务配置

如果你刚刚起步(快速启动指南的目的之一就是为了你这种人),或者如果你想提供本地服务且对连接到世界其他地区不感兴趣,请使用此配置。如果以后你想的话,这也很容易升级到另一个配置。

2.带转发的本地服务

在这种配置中,你运行slapd ( 8 )实例,为你的本地网域提供目录服务,并配置它返回转发到其他能够处理请求的服务器。你可以自己运行此服务(或多个服务)或使用别人提供给你的服务。这种配置如图3.2。

openldap2.4版本管理员文档中文翻译版_第1张图片

图3.2 带转发的本地服务

如果你想提供本地服务,并参与全球目录,或者您想代表负责下属条目到另一台服务器,使用此配置。

3.可复制的目录服务

slapd ( 8 )包括了对LDAP基于同步的复制的支持, 即所谓syncrepl,可用于在多个目录服务器上维持目录信息的影子复制。在其最基本的配置,主服务器是一个syncrepl供应商,而一个或多个从服务器(或影子服务器)是syncrepl消费者。一个主从配置的例子如图3.3。多主机的配置,也支持。

openldap2.4版本管理员文档中文翻译版_第2张图片

图3.3 可复制的目录服务

此配置可用于头两个配置的任何一个情况下,例如一个单一的slapd(8)没有提供所需的可靠性和可用性。

4.分布式本地目录服务

在这种配置中,当地的服务被分割成较小的服务,每个都是可复制的,和上下级粘在一起转发。

4.编译和安装OpenLDAP软件

这一章详细说明如何编译和安装包含了slapd(8),独立的LDAP守护进程的OpenLDAP软件包。编译和安装OpenLDAP软件需要几个步骤:安装依赖的软件,配置OpenLDAP软件本身,编译,并最终安装。以下各节详细描述了此过程中。

1.获得和解包软件

你可以从该项目的下载页面上或直接从该项目的FTP服务获取OpenLDAP软件。

该项目提供两个系列的包作为一般用途。该项目发布版本提供新的特性和错误修正。虽然该项目采取措施,以改善这些版本的稳定性,但是经常会版本发布之后才发现问题。稳定版本是最新的经过一般性的使用已经显示出稳定的版本。

OpenLDAP软件的用户可以选择最适当的一系列安装,这取决于他们对于最新功能与稳定表现的期望。

OpenLDAP软件下载后,你需要从压缩存档文件提取发布版并更改您的工作目录到发布版的根目录:

gunzip -c openldap-VERSION.tgz | tar xf -
cd openldap-VERSION

你需要把 VERSION 换成发布版的实际版本号.

你现在应该阅读版权,许可证,自述文件和发布版提供的安装文件规定。版权和许可提供对OpenLDAP软件的可接受的使用,复制,和限制的保证。自述文件和安装文件提供依赖的软件和安装过程的详细资料。

2.依赖的软件

OpenLDAP软件依靠一些第三方分发的软件包。根据您打算使用的不同的功能,您可能必须下载并安装一些额外的软件包。本节详述通常需要的您可能需要安装的第三方软件的软件包。然而,一个最新的依赖软件信息,应在自述文件中获得。请注意,其中一些第三方软件包可能依赖于额外的软件包。每个软件包提供了它自己的安装说明。

1.传输层安全

OpenLDAP客户端和服务器需要安装OpenSSL或GnuTLS的TLS库来提供TLS,传输层安全服务。虽然一些操作系统可能提供这些库的一部分,作为基本系统或一个可选的软件组件,OpenSSL和GnuTLS往往需要单独安装。

OpenSSL可从这获得。GnuTLS可从这获得.

OpenLDAP 软件将不是完全兼容 LDAPv3,除非 OpenLDAP 的配置检测到一个可用的 TLS 库。

2.简单验证和安全层

OpenLDAP客户端和服务器需要安装Cyrus SASL 库提供简单身份认证和安全层服务。虽然一些操作系统可能会提供这个库,作为基本系统的一部分或作为一个可选的软件组件,Cyrus SASL 往往需要单独安装。

Cyrus SASL 可从这获得. Cyrus SASL 将使用 OpenSSL 和 Kerberos/GSSAPI 库,如果预先安装了的话。

OpenLDAP软件将不完全兼容 LDAPv3,除非 OpenLDAP 的配置检测到一个可用的 Cyrus SASL 安装。

3.Kerberos验证服务

OpenLDAP客户端和服务器支持Kerberos身份验证服务。特别是, OpenLDAP支持 Kerberos V GSS-API SASL 认证机制,称为GSSAPI机制。此功能要求,除了Cyrus SASL 库之外,还要有 Heimdal 或 MIT Kerberos V 库。

Heimdal Kerberos 可从这获得. MIT Kerberos 可从 这获得。

强烈推荐使用强验证服务, 例如 Kerberos 提供的那些。

4.数据库软件

OpenLDAP的slapd ( 8 )的BDB和HDB主要数据库后端需要甲骨文公司的Berkeley DB。如果在设定的时间没有可用的,您将无法与这些主要的数据库后端编译slapd ( 8 )。

您的操作系统可能提供一个支持版本的Berkeley DB作为基础系统或作为一个可选的软件组件。如果不是这样,您将不得不自己去获取并安装它。

Berkeley DB 可从 Oracle 公司的 Berkeley DB 下载页获得.

有很多可用的版本. 通常, 推荐最近的版本 (包含发布的补丁) . 如果你想使用BDB或HDB数据库后端,这个包是必需的.

注意: 请看推荐的 OpenLDAP 软件依赖版本 一节获得更多信息。

5.线程

OpenLDAP设计成充分利用线程。 OpenLDAP支持POSIX pthreads,Mach CThreads ,以及其他一些品种。如果不能找到一个合适的线程子系统,configure会抱怨。如果发生这种情况,请咨询OpenLDAP常见问题中的 软件|安装|平台 提示部分。

6.TCP包装

slapd(8) 支持 TCP 包装 (IP 级访问控制过滤), 如果预先安装了的话. 建议为包含非公开信息的服务器使用 TCP 包装或其他 IP级的访问过滤 (例如那些IP级防火墙所提供的)。

3.运行configure

现在,您或许应该运行configure脚本的–help选项。这将给你一个选项列表,编译OpenLDAP时您可以变更这些选项 。使用此方法可以启用或禁用OpenLDAP的许多功能。

./configure --help

configure脚本还将使用各种环境变量的某些设置。这些环境变量包括:

表 4.1: 环境标量

变量 描述
CC 指定替代的 C 编译器
CFLAGS 指定额外的编译器 flags
CPPFLAGS 指定 C 预编译器 flags
LDFLAGS 指定 linker flags
LIBS 指定额外的库

现在以任何期望的配置选项或环境变量运行configure脚本.

./configure [options] [variable=value ...]

作为一个例子,假设我们要安装OpenLDAP,后端是BDB并支持TCP封装。默认情况下,BDB是启用的而TCP封装并非如此。所以,我们只需要指定 --enable-wrappers, 来包含对TCP封装的支持:

./configure --enable-wrappers

无论如何,这无法定位没有安装到系统目录的依赖的软件. 例如, 如果 TCP Wrappers 头文件和库文件分别被安装在 /usr/local/include 和 /usr/local/lib, configure 脚本应该如下调用:

./configure --enable-wrappers \
        CPPFLAGS="-I/usr/local/include" \
        LDFLAGS="-L/usr/local/lib -Wl,-rpath,/usr/local/lib"

注意: 一些 shells, 例如那些衍生自Bourne sh(1)的 shell, 不需要使用 env(1) 命令. 在某些情况下, 环境变量不得不使用替代的语法来指定。

configure脚本通常将自动检测适当的设定。如果你对此阶段有任何问题,咨询任何平台特定的提示并检查你的configure选项, 如果有的话。

4.编译软件

一旦你运行了 configure 脚本,输出的最后一行应该是:
Please "make depend" to build dependencies
如果最后一行输出不符, configure失败了,你需要阅读它的输出来决定什么地方出错了。你不应继续下去,直到configure成功的完成。

编译依赖, 运行:
make depend
现在编译软件, 这一步将确实地编译OpenLDAP。

make

你应该仔细检查这个命令的输出信息以确认每件东西正确地被编译了. 注意这个命令同时编译了 LDAP 库文件和相关的客户端以及 slapd(8).

5.测试软件

一旦软件被正确地配置和成功地编译了, 你应该运行测试套件来检查这个版本.

make test

适用于您的配置地试验将运行,它们应该通过。一些测试,如复制测试,可以跳过,如果您的配置不支持的话。

6.安装软件

一旦你成功地测试了软件,你开始准备安装它.你将需要在运行configure时你指定的那些安装目录的写权限. 缺省OpenLDAP软件安装在/usr/local. 如果你用 --prefix configure 选项改变了设置 , 它将被安装在你提出的位置.

典型的, 安装需要超级用户权限. 从OpenLDAP源码根目录, 键入:

su root -c 'make install'

需要的时候输入适当的密码.

你应该仔细检查此命令的输出以确保每件东西正确地安装了. 缺省你将在 /usr/local/etc/openldap 发现slapd(8)的配置文件. 更多信息见 配置 slapd 一章。

5.配置slapd

一旦该软件已编译并安装后,您准备配置slapd(8),用于您的网站。与以前OpenLDAP的版本不同,slapd (8)运行时配置在2.3(及更高版本)是完全的允许LDAP并且可以LDIF数据使用标准的LDAP操作来管理。LDAP配置引擎允许所有slapd的配置选项在运行中改变,一般不需要重新启动服务器以使更改生效。旧风格slapd.conf(5)文件仍然是支持的,但必须转换为新的slapd配置(5)格式,允许运行时改变被保存。虽然旧的风格配置使用一个单一的文件,通常安装在/usr/local/etc/openldap/slapd.conf,新的风格采用了slapd后端数据库来存储配置。配置数据库通常放在/usr/local/etc/openldap/slapd.d目录。从slapd.conf格式转换成slapd.d格式时,任何包含文件也将被集成到由此产生的配置数据库。

可以通过slapd ( 8 )的命令行选项指定候补的配置目录(或文件)。本章说明配置系统的一般格式,然后详细说明了常用的配置设置。

注:一些后端和分布式覆盖还不支持运行时配置。在这种情况下,旧式slapd.conf ( 5 )文件必须使用。

1.配置布局

slapd配置作为一个特殊的拥有预定义的规划和DIT的LDAP目录来存储。有一些特定的objectClasses用于进行全球配置选项,架构定义,后端和数据库的定义,以及各种其他项目。样本配置树如图5.1。

openldap2.4版本管理员文档中文翻译版_第3张图片

图5.1 样本配置树

其他对象可能是配置的一部分,但省略了明确的说明.

该slapd配置配置树有一个非常特殊的结构。树的根被命名为cn=config,并且包含全局配置设置。其他设置均包含在独立的子条目中:

  • 动态装载模块
    这些可能只在使用了 --enable-modules 选项 configure 软件的时候需要用。
  • 规划定义
    cn=schema,cn=config 条目包含了系统的规划(在slapd中所有规划都是硬编码)。
    cn=schema,cn=config 的子条目包含从配置文件装载或运行时添加的的用户规划。
  • 特定后端配置
  • 特定数据库配置
    Overlay被定义在数据库条目的子条目下。
    数据库和Overlay也可以有其他的杂项子条目。

LDIF文件的通常规则适用于配置信息:以’#'字符开始的注释行会被忽略。如果一行的开始是一个空格,它被认为是延续前行(即使前行是注释)并且这个单个的空格会被删除。条目是由空白行分开的。

config LDIF的总体布局如下:

# 全局配置设定
dn: cn=config
objectClass: olcGlobal
cn: config


# 规划定义
dn: cn=schema,cn=config
objectClass: olcSchemaConfig
cn: schema


dn: cn={X}core,cn=schema,cn=config
objectClass: olcSchemaConfig
cn: {X}core


# 额外的用户定义的规划
...

# 后端定义
dn: olcBackend=,cn=config
objectClass: olcBackendConfig
olcBackend: 


# 数据库定义
dn: olcDatabase={X},cn=config
objectClass: olcDatabaseConfig
olcDatabase: {X}


# 随后的定义和设置
...

一些以上所列项目在他们的名字有一个数字索引"{X}"。虽然大多数配置设置具有内在的次序依赖(即一个设置必须在另一个设定之前生效),LDAP数据库本身是无次序的。这个数字索引是用来在配置数据库强制一致性的次序,以便使所有的次序依赖被保存。在大多数情况下,并没有提供索引,它将根据条目创建的顺序自动生成。

配置指令被定义为一个独立属性的值。大部分用于slapd配置的属性和objectClasses在他们的名字有一个“olc”前缀(OpenLDAP配置)。通常在属性和旧式slapd.conf配置关键字之间有一对一的对应关系,使用关键字作为属性名称,以“olc”作前缀。

一个配置指令可采用参数。如果是这样,参数们由空格分开。如果参数包含空格,这个参数应包含在双引号里“像这样”。在以下描述中,在方括号<>中的参数应被实际的文字替换 。

发布版包含一个配置文件例子,将被安装在/usr/local/etc/OpenLDAP目录。在/usr/local/etc/openldap/schema目录还提供了一些包含架构定义(属性类型和对象类)的文件。

2.配置指令

本节详述常用的配置指令。如需完整清单,请参阅slapd-config(5)帮助页面。本节将按自上而下的顺序排列配置指令,首先是全球性指令的cn=config项。每个指令将描述其默认值(如果有的话)和它的一个使用例子。

1.cn=config

此项目中所载的指令一般适用于把服务器作为一个整体。他们中的大多数是系统或面向连接的,而不是数据库相关的。此项目必须有olcGlobal对象。

1.olcIdleTimeout:

指定强行关闭闲置客户端连接等待的秒数。默认情况下,值为0,禁用此功能。

2.olcLogLevel:

该指令规定在哪一级的调试和运行统计报表应syslogged(目前记录到syslogd ( 8 ) LOG_LOCAL4设施)。您必须配置OpenLDAP -enable-debug(默认)为工作(除了这两个统计级别,是始终启用的)。日志级别可能会被指定为整数或关键字。可使用多重记录级别并且级别是可添加的。要显示哪些层次对应于什么样的调试,以 -D? 调用 slapd 或参考下表。可能的值有:

表5.1 调试级别

级别 关键字 描述
0 不调试
1 (0x1 trace) 跟踪函数调用
2 (0x2 packets) 调试包的处理
4 (0x4 args) 重度跟踪调试
8 (0x8 conns) 连接管理
16 (0x10 BER) 打印发送和接收的包
32 (0x20 filter) 搜索过滤器的处理
64 (0x40 config) 配置处理
128 (0x80 ACL) 访问控制列表处理
256 (0x100 stats) 连接/操作/结果的统计日志
512 (0x200 stats2) 发送的条目的统计日志
1024 (0x400 shell) 打印和shell后端的通信
2048 (0x800 parse) 打印条目解析调试
16384 (0x4000 sync) syncrepl消费者处理
32768 (0x8000 none) 只显示那些不受日志级别设置影响的消息

预期的日志级别可作为一个单一的整数输入,它结合了 (或运算) 预期级别(们), 包括十进制或十六进制符号, 作为一些整数的列表 (内部或运算), 或作为名字的列表,展示在括号里, 例如

olcLogLevel 129
olcLogLevel 0x81
olcLogLevel 128 1
olcLogLevel 0x80 0x1
olcLogLevel acl trace

是等效的。
例子:

olcLogLevel -1

这将导致很多很多的调试信息将被记录。

olcLogLevel conns filter

只需登录连接和搜索筛选器处理。

olcLogLevel none

这将忽略配置文件中日志等级的配置。当没有记录发生,它与将日志级别设置为0是不同的。至少None级别需要记录具有高优先级消息。

默认的配置:

olcLogLevel stats

日志记录会使用默认配置。然而,如果没有olcLogLevel被定义,没有记录发生(相当于设置为 Level 0)。

3.olcReferral

该指令规定了slapd找不到一个本地的数据库时,跳转到一个指定URI来处理请求。
例如:

olcReferral: ldap://root.openldap.org

这将指定非本地查询OpenLDAP项目的全局根LDAP服务器。在该服务器上的智能LDAP客户端会重新发起他们的查询,但是请注意,大多数客户只是要知道如何处理包含一个主机部分和可选的DN部分的简单的LDAP的URL。

4.示例条目
dn: cn=config
objectClass: olcGlobal
cn: config
olcIdleTimeout: 30
olcLogLevel: Stats
olcReferral: ldap://root.openldap.org

2.cn=module

如果在配置的slapd时被启用动态加载模块的支持,可以使用CN=模块条目指定集合的模块加载。模块条目必须有olcModuleLoad对象类。

1.olcModuleLoad:

指定一个可动态加载的模块名称。文件名可以是绝对路径名或一个简单的文件名。非绝对路径名称,会从olcModulePath指令指定的目录中搜索。

2.olcModulePath:

指定要搜索加载模块的目录列表。通常,所述路径是冒号分隔但这取决于操作系统。

3.示例条目
dn: cn=module{0},cn=config
objectClass: olcModuleList
cn: module{0}
olcModuleLoad: /usr/local/lib/smbk5pwd.la

dn: cn=module{1},cn=config
objectClass: olcModuleList
cn: module{1}
olcModulePath: /usr/local/lib:/usr/local/lib/slapd
olcModuleLoad: accesslog.la
olcModuleLoad: pcache.la

3.cn=schema

在cn=schema条目保存了slapd中所有的硬编码的模式定义。此项目中的值都是由slapd所产生,而不需要在配置文件中提供。但是条目仍然要被定义,以作为用户定义的模式。模式条目必须有olcSchemaConfig对象类。

1.olcAttributeTypes:

该指令定义的属性类型。请参阅有关如何使用该指令的信息模式规范章节。

2.olcObjectClasses:

该指令定义了一个对象类。请参阅有关如何使用该指令的信息模式规范章节。

3.示例条目
dn: cn=schema,cn=config
objectClass: olcSchemaConfig
cn: schema

dn: cn=test,cn=schema,cn=config
objectClass: olcSchemaConfig
cn: test
olcAttributeTypes: ( 1.1.1
  NAME 'testAttr'
  EQUALITY integerMatch
  SYNTAX 1.3.6.1.4.1.1466.115.121.1.27 )
olcAttributeTypes: ( 1.1.2 NAME 'testTwo' EQUALITY caseIgnoreMatch
  SUBSTR caseIgnoreSubstringsMatch SYNTAX 1.3.6.1.4.1.1466.115.121.1.44 )
olcObjectClasses: ( 1.1.3 NAME 'testObject'
  MAY ( testAttr $ testTwo ) AUXILIARY )

4.具体后端指令

后端指令应用于同一类型的所有数据库实例,并根据该指令,可以通过数据库指令覆盖。后端条目必须有olcBackendConfig对象类。

1.olcBackend:

该指令名是后端指令的配置条目。应是表5.2中所列的支持后端类型之一。

表5.2 数据库后端

类型 描述
bdb Berkeley DB的事务性后端
config slapd配置后端
dnssrv DNS SRV后端
hdb BDB后端的层次变种
ldap 轻量级目录访问协议(代理)后端
ldif 轻量级的数据交换格式后端
meta META目录后端
monitor Monito后端
passwd 提供只读访问的passwd(5)
perl Perl程序后端
shell shell(extern程序)后端
sql SQL程序后端

例如:

olcBackend: bdb

该条目没有定义其他指令。具体的后端类型可以为他们的特定用途定义附加属性,但至今都未曾经被定义。这样,这些指令通常不会出现在任何实际的配置中。

2.示例条目
dn: olcBackend=bdb,cn=config
objectClass: olcBackendConfig
olcBackend: bdb

5.具体数据库指令

本节的指令被每一种数据库支持。数据库条目必须有olcDatabaseConfig对象类。

1.olcDatabase: [{}]

该指令指定特定数据库实例。数字{}可以被提供来区分相同类型的多个数据库。一般的索引可以被省略,并且slapd会自动生成它。应在表5.2或前端类型列出的支持的后端类型之一。

前端是用于保存应适用于所有的其它数据库的数据库级别选项的一个特殊的数据库。随后的数据库定义也可以覆盖一些前端设置。

配置数据库也是特别的;两者的配置和前端数据库总是隐式地创建,即使它们没有明确地配置,以及它们的任何其他数据库之前被创建。

例如:

olcDatabase: bdb

这标志着新的BDB数据库实例的开始。

2.olcAccess: to [ by [] [] ]+

该指令授权访问(通过指定)到一组条目和/或属性(由指定)由一个或多个请求者(由指定)。请参阅本指南的基本用法的访问控制部分。

注意:如果没有olcAccess指令指定,默认的访问控制策略,允许所有用户(包括认证和匿名)读取权限。
注:在前端定义的访问控制是附加到所有其他数据库的控制。

3.olcReadonly { TRUE | FALSE }

这个指令将数据库设置为“只读”模式。修改数据库中的任何企图将返回“不愿意执行”的错误。

默认:

olcReadonly: FALSE
4.olcRootDN:

该指令规定了DN可以操作此数据库,而不受访问控制限制或管理限制。DN不必参考在此数据库或在目录中的条目。DN可以指向一个SASL标识。
基于条目的示例:

olcRootDN: "cn=Manager,dc=example,dc=com"

基于SASL的示例:

 olcRootDN: "uid=root,cn=example.com,cn=digest-md5,cn=auth"

请参阅本文有关SASL认证身份信息SASL验证部分。

5.olcRootPW:

该指令可以用于为rootdn的DN(当的rootdn在数据库内设置一个DN)指定一个密码。
例如:

olcRootPW: secret

它也允许在RFC2307的形式提供密码的哈希值。slappasswd(8)可以被用于生成密码散列。
例如:

olcRootPW: {SSHA}ZKKuqbEKJfKSXhUbHG3fG8MDn9j1v4QN

该hash是使用命令slappasswd -s secret 生成的。

6.olcSizeLimit:

该指令指定搜索返回的条目的最大数量。
默认:

olcSizeLimit: 500

请参阅本指南和slapd-config(5)了解更多详情的限制部分。

7.olcSuffix:

该指令指定了将传递给后端数据库的请求的DN的后缀。多个后缀线可以给定,且通常至少有一个必须为每个数据库定义。(有些后端类型,例如前端和监控使用硬编码的后缀,这可能不会在配置中覆盖。)

例如:

olcSuffix: "dc=example,dc=com"

查询以“dc=example,dc=com”结尾的DN将被传递给后端。

注意:当后端接收到一个被选中的查询时,slapd会顺序的在被配置的每一个数据库寻找该后缀值。因此,如果一个数据库后缀是另一个的前缀,它必须在该配置的后面出现。

8.olcSyncrepl
olcSyncrepl: rid=
    provider=ldap[s]://[:port]
    [type=refreshOnly|refreshAndPersist]
    [interval=dd:hh:mm:ss]
    [retry=[ <# of retries>]+]
    searchbase=
    [filter=]
    [scope=sub|one|base]
    [attrs=]
    [attrsonly]
    [sizelimit=]
    [timelimit=]
    [schemachecking=on|off]
    [bindmethod=simple|sasl]
    [binddn=]
    [saslmech=]
    [authcid=]
    [authzid=]
    [credentials=]
    [realm=]
    [secprops=]
    [starttls=yes|critical]
    [tls_cert=]
    [tls_key=]
    [tls_cacert=]
    [tls_cacertdir=]
    [tls_reqcert=never|allow|try|demand]
    [tls_ciphersuite=]
    [tls_crlcheck=none|peer|all]
    [logbase=]
    [logfilter=]
    [syncdata=default|accesslog|changelog]

该指令通过建立当前的slapd(8)运行的syncrepl复制引擎复制消费者网站指定当前数据库作为主内容的副本。主数据库位于由提供参数指定的复制提供站点。副本数据库随时保持最新与使用LDAP内容同步协议主内容。有关该协议的更多信息,请参见RFC4533。

在摆脱参数用于复制消费者服务器内的当前的syncrepl指令,其中唯一地标识由当前的syncrepl指令所述的syncrepl规范的鉴定。 是非负的,是长度不超过三个十进制的数字。

provider参数指定包含主内容作为一个LDAP URI复制提供者站点。提供者参数指定的方案中,主机和任选其中所述提供商的slapd实例可以发现一个端口。可用于是一个域名或IP地址。例如LDAP://provider.example.com:389或LDAPS://192.168.1.1:636。如果没有给出,则使用标准的LDAP端口号(389或636)。注意syncrepl使用消费者发起协议,因此它的规范位于消费者的网站,而复制品规范位于提供商的网站。的syncrepl和replica指令定义了两个独立的复制机制。它们并不代表彼此的复制体。

所述的syncrepl副本的内容是使用作为其结果集的搜索规范中定义。消费者的slapd将根据搜索规范发送搜索请求给提供的slapd。搜索规范包括searchbase,范围,过滤器,ATTRS,attrsonly,的sizeLimit和时限参数,在正常的搜索规范。该searchbase参数没有默认值,必须指定。范围默认为子,过滤器默认为(objectclass=),ATTRS默认为“,+”复制所有的用户和业务属性,attrsonly默认情况下未设置。双方的sizeLimit和时限默认为“无限制”,只有正整数或“无限制”可能被指定。

LDAP内容同步协议有两种操作类型:refreshOnly和refreshAndPersist。操作类型由类型参数指定。在refreshOnly操作,下一个同步搜索操作周期的间隔时间改期每次同步操作结束后。间隔由间隔参数指定。它被设置为一天默认。在refreshAndPersist操作,同步搜索仍然是供应商的slapd实例持久。进一步更新主副本将产生searchResultEntry消费者的slapd以持续同步搜索的搜索响应。

如果在复制过程中发生错误时,消费者将尝试根据重试参数这是<# of retries>对的列表重新连接。例如,重试=“60 10 300 3”让消费者重试每隔60秒的第10次,然后重试每300秒重试停先下一三次。+<# of retries>中指重试,直到成功的数目不定。

模式检查可以在LDAP同步消费者现场通过接通schemachecking参数来执行。如果它被接通时,每个复制条目将被检查其模式作为条目存储到副本的内容。在副本的每个条目应该包含的架构定义所需的属性。如果它被关闭,参赛作品将被保存而不检查模式的一致性。默认是关闭的。

在指定binddn参数给出了DN绑定作为搜索的syncrepl的提供者的slapd。它应是有读权限在master数据库中复制内容的DN。

该bindmethod是简单或SASL,取决于简单的基于密码的认证或SASL认证是否是连接时的提供者的slapd实例中使用。

简单认证不应该使用,除非有充分的数据完整性和机密性的保护措施(如TLS或IPsec)。简单认证需要指定binddn和credentials参数。

一般推荐SASL认证。 SASL认证需要使用saslmech参数的机制规范。根据不同的机制,认证身份和/或可使用authcid和证书,分别被指定的凭据。所述authzid参数可以被用来指定一个授权的身份。

realm参数指定了一定的验证机制中的身份的境界。该secprops参数指定赛勒斯SASL安全属性。

启动TLS参数指定使用扩展操作认证的供应商之前建立一个TLS会话启动TLS的。如果关键参数提供,如果启动TLS请求失败的会话将被中止。否则的syncrepl会话继续不使用TLS。该TLS_REQCERT设置默认为“需求”和其他TLS设置默认为相同的主slapd的TLS设置。

而不是复制整个项目,消费者可查询的数据修改日志。这种操作模式被称为增量的syncrepl。除了上述参数,logbase和logfilter参数必须被适当地为将要使用的日志设定。所述syncdata参数必须被设置为“ACCESSLOG”如果日志符合slapo-ACCESSLOG(5)日志格式,或“更改日志”如果日志符合过时更改日志格式。如果省略或设置为“默认”的syncdata参数则日志参数将被忽略。

该的syncrepl复制机制是由BDB和HDB后端支持。

请参见本指南的LDAP同步复制一章关于如何使用此指令的更多信息。

9.olcTimeLimit:

该指令指定slapd回答一个搜索请求将花费的最大秒数(实时)。如果一个请求不是在这个时间内结束时,将返回超时提示。
默认:

olcTimeLimit: 3600

请参阅本指南和slapd-config(5)了解更多详情的限制部分。

10.olcUpdateref:

该指令只适用于一个附属slapd。它指定的URL返回给客户端提交其在副本更新请求。如果指定了多次,每个URL都要提供。
例如:

olcUpdateref:   ldap://master.example.net
11.示例目录
dn: olcDatabase=frontend,cn=config
objectClass: olcDatabaseConfig
objectClass: olcFrontendConfig
olcDatabase: frontend
olcReadOnly: FALSE

dn: olcDatabase=config,cn=config
objectClass: olcDatabaseConfig
olcDatabase: config
olcRootDN: cn=Manager,dc=example,dc=com

6.BDB和HDB数据库指令

这一类指令同时适用于BDB和HDB数据库。它们除了有上面定义的通用数据库的指令外,还有一个olcDatabase条目。对于BDB/HDB配置指令的完整参考,请参阅slapd-bdb(5)。除了olcDatabaseConfig对象类,BDB和HDB数据库条目必须有olcBdbConfig和olcHdbConfig对象类。

1.olcDbDirectory:

该指令指定包含数据库的BDB文件和相关的索引所在的目录。
默认:

olcDbDirectory: /usr/local/var/openldap-data
2.olcDbCachesize:

该指令规定了由BDB后台数据库实例维护的内存缓存条目数。
默认:

olcDbCachesize: 1000
3.olcDbCheckpoint:

该指令指定BDB事务日志的检查点的时间。在检查点操作刷新数据库缓冲区写入磁盘,并在日志中写入一个检查点记录。如果数据已经写入会发生检查点或分钟自上次检查点通过。两个参数默认到零,在这种情况下,它们将被忽略。当参数不为零,内部任务运行的每个分钟执行检查点。详情请参见Berkeley DB的参考指南。
例如:

olcDbCheckpoint: 1024 10
4.olcDbConfig:

该属性指定放置在数据库目录中的DB_CONFIG文件中的配置指令。在服务器启动时,如果没有这样的文件存在然而,DB_CONFIG文件将被创建,并在该属性的设置将被写入其中。如果该文件存在,其内容将被读取并在此属性显示。该属性是多值的,以适应多重配置指令。没有默认设置,但有必要在这里使用适当的设置,以获得最佳的服务器的性能。

这个属性所做的任何更改将被写入到文件DB_CONFIG并会导致数据库环境中重新使更改立即生效。如果环境缓存大且最近尚未检查点,该复位操作可能需要很长的时间。这可能是最好使用LDAP修改修改这个属性之前,需要手动执行使用Berkeley DB的db_checkpoint实用单检查点。
例如:

olcDbConfig: set_cachesize 0 10485760 0
olcDbConfig: set_lg_bsize 2097512
olcDbConfig: set_lg_dir /var/tmp/bdb-log
olcDbConfig: set_flags DB_LOG_AUTOREMOVE

在这个例子中,BDB缓存设置为10MB,则BDB事务日志缓冲器大小设置为2MB,和事务日志文件将被存储在/ var / TMP / BDB-日志目录。还一个标志被设置为告诉BDB尽快删除事务日志文件作为其内容已被检查点和它们不再需要。如果没有此设置的事务日志文件会不断积累,直到其他清理过程中删除。详情请参阅关于该db_archive命令Berkeley DB的文档。对于Berkeley DB的标志的完整列表,请参阅 - http://www.oracle.com/technology/documentation/berkeley-db/db/api_c/env_set_flags.html

理想的是,BDB缓存必须至少一样大的数据库的工作集,日志缓冲区的大小应该足够大,以适应大多数交易没有溢出,并且日志目录必须从主数据库文件的单独的物理磁盘上。而且两者的数据库目录和日志目录应该从用于常规的系统活动,如根设备,引导或交换文件系​​统的磁盘分开。请参见常见问题解答-O-MATIC及更多细节Berkeley DB的文档。

5.olcDbNosync: { TRUE | FALSE }

此选项会导致磁盘上的数据库内容不会立即与时变存储器的变化同步。将此选项设置为TRUE可改善数据完整性的代价性能。该指令与使用下面的指令相同的效果:

olcDbConfig: set_flags DB_TXN_NOSYNC
6.olcDbIDLcacheSize:

指定内存索引高速缓存的大小,在索引时隙。默认值是零。较大的数值将加快索引条目频繁搜索。最佳尺寸将取决于该数据库的数据和搜索的特性,但使用数三次条目缓存大小是一个很好的起点。
例如:

olcDbIDLcacheSize: 3000
7.olcDbIndex: { | default} [pres,eq,approx,sub,none]

该指令规定了以保持给定的属性的指标。如果只有一个给出,默认索引得以保持。索引关键字对应于常见类型的匹配,可能在一个LDAP搜索过滤器使用。
例如:

olcDbIndex: default pres,eq
olcDbIndex: uid
olcDbIndex: cn,sn pres,eq,sub
olcDbIndex: objectClass eq

第一行设置的默认设置pres,eq。第二行设置默认(pres,eq)必须保持uid属性类型。第三行设置pres,eq,和子串必须保持cn和sn属性类型。第四行设置的objectClass属性类型为eq

有些不平等的匹配中没有索引关键字。通常这些匹配不使用索引。然而,某些属性不支持索引不平等匹配,而支持平等索引。

子串索引可以更明确地指定为subinitial,subany或subfinal,对应一个字符串匹配过滤的三种可能的组成部分。subinitial只索引子串的开始属性值。subfinal索引子串的结尾属性值,subany索引子串的任何地方。

请注意,在默认情况下,设置一个属性也影响该属性的每个子类型的索引。例如,在名称属性设置一个平等索引将导致CN,SN,和每一个从它的名字继承所有其他属性,被索引。

缺省情况下,索引得以维持。人们普遍注意,在极小的objectClass的平等指数进行维护。

olcDbindex: objectClass eq

附加索引应该对应于在数据库上使用的最常见的搜索进行配置。Presence索引不应被配置为一个属性,除非该属性在数据库中很少发生,并且正常使用的目录中的属性Presence搜索发生非常频繁。大多数应用程序不使用Presence搜索,所以通常Presence索引不是非常有用。

如果当slapd运行时此设置被改变,内部任务将运行产生改变的索引数据。所有服务器的操作都可以继续在索引器上正常工作。如果索引任务完成之前slapd停止,将不得不使用工具slapindex来手动完成索引工作。

8.olcDbLinearIndex: { TRUE | FALSE }

如果此设置为TRUE,slapindex将一次索引一个属性。默认设置为FALSE,这种情况下,条目的所有索引的属性同时被处理。为TRUE时,每个索引的属性被单独处理,在整个数据库中使用多遍。当数据库大小超过BDB缓存大小,此选项可提高性能。当BDB缓存足够大,则不需要此选项,否则会降低性能。此外,默认情况,slapadd执行全索引,因此不需要单独运行的slapindex。打开这个选项,slapadd将不会索引,必须使用slapindex命令来索引。

9.olcDbMode: { | }

该指令规定,新创建的数据库索引文件应有的文件保存模式。可能是0600或者rw----
默认:

olcDbMode: 0600
10.olcDbSearchStack:

指定用于搜索过滤器堆栈的深度。搜索过滤器在堆栈上进行评估,以适应嵌套AND / OR子句。一个单独的堆栈分配给每个服务器线程。堆栈的深度决定了复杂的过滤器可以无需任何附加的存储器分配进行评价。这比搜索堆栈深度嵌套更深的过滤器会导致单独的堆栈中分配给特定的搜索操作。这些独立的分配可以对服务器性能产生重大的负面影响,但指定太多堆栈也会消耗的内存很大。每个搜索使用每级512K字节的32位计算机上,或每级1024K字节的64位计算机上。默认堆栈深度为16,从而8MB或每个线程16MB分别用在32位和64位的机器。另外一个栈槽的512KB大小由编译时常如果需要,它可以改变设置;代码必须重新编译以使更改生效。
默认:

olcDbSearchStack: 16
11.olcDbShmKey:

指定共享内存BDB环境的关键。默认情况下,BDB环境使用内存映射文件。如果指定了一个非零值时,它将被用作密钥以确定将容纳环境的共享存储器区域。
例如:

olcDbShmKey: 42
12.示例目录
dn: olcDatabase=hdb,cn=config
objectClass: olcDatabaseConfig
objectClass: olcHdbConfig
olcDatabase: hdb
olcSuffix: "dc=example,dc=com"
olcDbDirectory: /usr/local/var/openldap-data
olcDbCacheSize: 1000
olcDbCheckpoint: 1024 10
olcDbConfig: set_cachesize 0 10485760 0
olcDbConfig: set_lg_bsize 2097152
olcDbConfig: set_lg_dir /var/tmp/bdb-log
olcDbConfig: set_flags DB_LOG_AUTOREMOVE
olcDbIDLcacheSize: 3000
olcDbIndex: objectClass eq

3.配置文件示例

下面是一个配置示例,说明文字会穿插其中。它定义了两个数据库来处理X.500树的不同部分;两者都是BDB数据库实例。显示行号仅作参考,不包含在实际的文件。首先,全局配置部分:

  1.    # example config file - global configuration entry
  2.    dn: cn=config
  3.    objectClass: olcGlobal
  4.    cn: config
  5.    olcReferral: ldap://root.openldap.org
  6.

第1行是一条注释。2-4行标识为全局配置条目。olcReferral:在第5行,意思为查询不是本地的定义的数据库,将被称为在主机root.openldap.org的标准端口(389)上运行的LDAP服务器。 第6行是一个空行,表示该条目结尾。

  7.    # internal schema
  8.    dn: cn=schema,cn=config
  9.    objectClass: olcSchemaConfig
 10.    cn: schema
 11.

第7行是一条注释。 8-10行标识为架构子树的根。在这个条目中的实际模式定义被硬编码到slapd,因此不需要额外的属性在这里指定。第11行是一个空行,表示该条目结尾。

 12.    # include the core schema
 13.    include: file:///usr/local/etc/openldap/schema/core.ldif
 14.

第12行是一条注释。 第13行是一个LDIF include指令访问LDIF格式的核心概要定义。第14行是一个空行。

接下来是数据库定义。第一个数据库是特定的前端数据库,其设置全局应用到所有的其他数据库。

 15.    # global database parameters
 16.    dn: olcDatabase=frontend,cn=config
 17.    objectClass: olcDatabaseConfig
 18.    olcDatabase: frontend
 19.    olcAccess: to * by * read
 20.

第15行是一条注释。16-18行标识该条目为全局数据库条目。19行是一个全局性的访问控制。它适用于所有条目(任何适用的特定数据库的访问控制后)。第20行是一个空行。

接下来的条目定义的配置后端。

 21.    # set a rootpw for the config database so we can bind.
 22.    # deny access to everyone else.
 23.    dn: olcDatabase=config,cn=config
 24.    objectClass: olcDatabaseConfig
 25.    olcDatabase: config
 26.    olcRootPW: {SSHA}XKYnrjvGT3wZFQrDD5040US592LxsdLy
 27.    olcAccess: to * by * none
 28.

第21-22行是注释。 23-25行标识该条目配置数据库条目。26行该数据库定义了超级用户密码。(DN将默认为“cn=config”。)27行拒绝所有访问该数据库,因此只有超级用户能够访问它。 (这是配置数据库的默认访问。它只是在这里列出的说明,并重申,除非用一种方法,以作为超级用户明确配置认证,配置数据库将无法访问。)

第28行是一个空行。

下一个条目定义了一个BDB后端将处理事情的查询在树的“dc=example,dc=com”部分。索引将被保持几个属性,而userPassword属性是被保护免受未授权的访问。

 29.    # BDB definition for example.com
 30.    dn: olcDatabase=bdb,cn=config
 31.    objectClass: olcDatabaseConfig
 32.    objectClass: olcBdbConfig
 33.    olcDatabase: bdb
 34.    olcSuffix: dc=example,dc=com
 35.    olcDbDirectory: /usr/local/var/openldap-data
 36.    olcRootDN: cn=Manager,dc=example,dc=com
 37.    olcRootPW: secret
 38.    olcDbIndex: uid pres,eq
 39.    olcDbIndex: cn,sn pres,eq,approx,sub
 40.    olcDbIndex: objectClass eq
 41.    olcAccess: to attrs=userPassword
 42.      by self write
 43.      by anonymous auth
 44.      by dn.base="cn=Admin,dc=example,dc=com" write
 45.      by * none
 46.    olcAccess: to *
 47.      by self write
 48.      by dn.base="cn=Admin,dc=example,dc=com" write
 49.      by * read
 50.

第29行是注释。30-33行标识该条目作为BDB数据库配置条目。34行指定DN后缀查询传递到该数据库。第35行指定了数据库文件将保存的目录。

36和37行标识数据库超级用户输入和相关联的密码。该条目不受访问控制,大小或时间限制的限制。

38至40行表示的索引,以保持各种属性。

41至49行指定在该数据库中的条目的访问控制。对于所有适用的条目,userPassword属性是该项本身以及由“管理员”条目写入。它可以用于认证/授权的目的,但在其他方面无法读取。所有其它属性都是由项和“管理员”项可写,但可能会被所有用户(认证与否)读取。

50行是一个空行,表示该条目结尾。

下一个条目定义了另一个BDB数据库。这一个处理涉及dc=example,dc=net子树查询,但由相同的实体作为第一数据库来管理。请注意,如果没有第60行,读访问将由于在第19行全局访问规则而被允许。

 51.    # BDB definition for example.net
 52.    dn: olcDatabase=bdb,cn=config
 53.    objectClass: olcDatabaseConfig
 54.    objectClass: olcBdbConfig
 55.    olcDatabase: bdb
 56.    olcSuffix: "dc=example,dc=net"
 57.    olcDbDirectory: /usr/local/var/openldap-data-net
 58.    olcRootDN: "cn=Manager,dc=example,dc=com"
 59.    olcDbIndex: objectClass eq
 60.    olcAccess: to * by users read

4.转换旧的slapd.conf(5)文件到cn=config格式

转换到cn=config格式之前,你应该确保配置后端在现有的配置文件中配置正确。虽然配置后端始终存在slapd里面,默认情况下它仅仅是由它的rootDN访问,除非你明确地配置来验证它的手段。没有默认凭据,这将是无法使用的。

如果你没有准备好一个数据库配置部分,添加这下面的部分在slapd.conf的最后

 database config
 rootpw VerySecret

注:由于配置后端可以用于任意代码加载到slapd进程,仔细防范任何用于访问它的凭据是非常重要的。因为简单的密码很容易受到口令猜测攻击,它通常是更好地忽略rootpw和只使用SASL认证为配置的rootdn。

现有的slapd.conf(5)文件可以被转换新格式使用slaptest(8)或任何其他的dlap工具:

slaptest -f /usr/local/etc/openldap/slapd.conf -F /usr/local/etc/openldap/slapd.d

你可以使用默认的rootDN及上面配置的rootpw来测试cn=config下条目:

ldapsearch -x -D cn=config -w VerySecret -b cn=config

然后,您可以丢弃旧的slapd.conf(5)文件。确保使用slapd(8)以及-F选项来指定配置目录,如果你不使用默认的目录路径。

注意:当从slapd.conf中格式转换为slapd.d格式,任何包含的文件也将被整合到所得配置的数据库中。

6.slapd配置文件

本章介绍通过的slapd.conf(5)配置文件配置slapd(8)。slapd.conf(5)已被弃用,如果您的网站后端需求尚未更新,更新slapd-config(5)使系统正常工作。通过在前面的章节中描述的slapd-Config(5)来配置slapd(8)。

slapd.conf(5)文件通常安装在/usr/local/etc/openldap目录。备用的配置文件位置可以通过slapd(8)的命令行选项来指定。

1.配置文件格式

slapd.conf(5)文件由三种类型的配置信息:全局的,特定后台和特定数据库的。全局信息被首先指定,接着用特定的后端类型,随后是与特定的数据库实例相关联的信息。全局指令可以在后端或数据库的指令覆盖,后端的指令可以通过数据库指令覆盖。

空行和以“#”字符开始的注释行将被忽略。如果某行以空格开始,它被认为是上一行的延续(即使前行是注释)。

slapd.conf中的一般格式如下:

# global configuration directives


# backend definition
backend 


# first database definition & config directives
database 


# second database definition & config directives
database 


# second database definition & config directives
database 


# subsequent backend & database definitions & config directives
...

配置指令可能需要多个参数。如果是这样,用空格将他们隔开。如果一个参数包含空格,参数应该用双引号“like this”。如果一个参数包含双引号或反斜杠字符’‘,这个字符前面应该有一个转义字符’'。

发行版包含一个安装在/usr/local/etc/openldap目录的示例配置文件。在/usr/local/etc/openldap/schema目录还提供了许多包含模式定义(属性类型和对象类)的文件。

2.配置文件指令

本节详细介绍了常用的配置指令。完整列表,请参阅slapd.conf(5)手册页。本节将分别介绍配置文件指令,全局的,后端特定的和数据类别的,描述每个指令及其默认值(如果有的话),并给予其使用的一个例子。

1.全局指令

在本节中描述的指令应用于所有的后台和数据库,除非在后台或者数据库的定义中被明确覆盖。应该被实际文本替换的参数显示在括号<>中。

1.access to [ by [] [] ]+

该指令授权访问(通过指定)到一组条目或属性(由指定)由一个或多个请求者(由指定)。请参阅本指南的基本用法的访问控制部分。

注:如果没有指定访问指令,默认的访问控制策略,允许所有注册和非匿名用户读取权限。

2.attributetype

该指令定义一个属性类型。请参阅有关如何使用该指令的信息模式规范章节。

3.idletimeout

指定超时时间来强制关闭空闲的客户端连接。默认超时时间为0,禁用此功能。

4.include

该指令指定,slapd应该在读取本文件的下一行之前,从给定文件中读取其他配置信息。所包含的文件应该是正常的slapd配置文件的格式。该文件通常是包含概要规范的文件。

注意:你应该小心使用该指令 - 该指令并没有嵌套include指令层数的限制,也没有环路检测。

5.loglevel

该指令指定了调试语句和操作统计输出到syslogged的级别(当前日志输出到syslogd(8)的LOG_LOCAL4中)。您必须通过OpenLDAP的–enable-debug(默认值)打开调试模式(除了两个统计级别,它们总是被启用)。日志级别可被指定为整数或关键字。多个日志级别可以使用,并且等级是附加的。要显示什么数字对应什么样的调试,运行slapd -d?或查询下面的表格。可能的值如下:

级别 关键字 描述
-1 any 打开所有调试
0 不调试
1 (0x1 trace) 跟踪函数调用
2 (0x2 packets) 调试包的处理
4 (0x4 args) 重度跟踪调试
8 (0x8 conns) 连接管理
16 (0x10 BER) 打印发送和接收的包
32 (0x20 filter) 搜索过滤器的处理
64 (0x40 config) 配置处理
128 (0x80 ACL) 访问控制列表处理
256 (0x100 stats) 连接/操作/结果的统计日志
512 (0x200 stats2) 发送的条目的统计日志
1024 (0x400 shell) 打印和shell后端的通信
2048 (0x800 parse) 打印条目解析调试
16384 (0x4000 sync) syncrepl消费者处理
32768 (0x8000 none) 只显示那些不受日志级别设置影响的消息

所需的日志级别可作为一条结合了(或运算)所需的级别的单一整数被输入,无论是十进制或十六进制的整数,作为整数的列表(在内部或运算),或者如上表所显示的列表括号中的名称,如下:

loglevel 129
loglevel 0x81
loglevel 128 1
loglevel 0x80 0x1
loglevel acl trace

是等价的。
例如:

loglevel -1

这将导致很多很多的调试信息被记录。

loglevel conns filter

只需登录连接和搜索筛选器处理。

loglevel none

这将忽略配置文件中日志等级的配置。当没有记录发生,它与将日志级别设置为0是不同的。至少None级别需要记录具有高优先级消息。

默认的配置:

olcLogLevel stats

日志记录会使用默认配置。然而,如果没有olcLogLevel被定义,没有记录发生(相当于设置为 Level 0)。

6.objectclass

该指令定义了一个对象类。请参阅有关如何使用该指令的信息模式规范章节。

7.referral

该指令规定了slapd找不到一个本地的数据库时,跳转到一个指定URI来处理请求。
例如:

referral: ldap://root.openldap.org

这将指定非本地查询OpenLDAP项目的全局根LDAP服务器。在该服务器上的智能LDAP客户端会重新发起他们的查询,但是请注意,大多数客户只是要知道如何处理包含一个主机部分和可选的DN部分的简单的LDAP的URL。

8.sizelimit

该指令指定搜索返回的条目的最大数量。
默认:

sizeLimit: 500

请参阅本指南和slapd.conf(5)了解更多详情的限制部分。

9.timelimit

该指令指定slapd回答一个搜索请求将花费的最大秒数(实时)。如果一个请求不是在这个时间内结束时,将返回超时提示。
默认:

timeLimit: 3600

请参阅本指南和slapd.conf(5)了解更多详情的限制部分。

2.通用后端指令

在本节的指令只应用于定义它们后端。它是由每一种类型的后端的支持。后端指令应用于同一类型的所有数据库实例,并且该指令,可以通过数据库指令覆盖。

1.backend

该指令名是后端指令的配置条目。应是表5.2中所列的支持后端类型之一。

表6.2 数据库后端

类型 描述
bdb Berkeley DB的事务性后端
config slapd配置后端
dnssrv DNS SRV后端
hdb BDB后端的层次变种
ldap 轻量级目录访问协议(代理)后端
ldif 轻量级的数据交换格式后端
meta META目录后端
monitor Monito后端
passwd 提供只读访问的passwd(5)
perl Perl程序后端
shell shell(extern程序)后端
sql SQL程序后端

例如:

backend: bdb

该条目没有定义其他指令。具体的后端类型可以为他们的特定用途定义附加属性,但至今都未曾经被定义。这样,这些指令通常不会出现在任何实际的配置中。

3.通用数据库指令

本节的指令只应用于定义它们的数据库。他们被每一种数据库支持。

1.database

该指令标志着数据库实例声明的开始。应是表6.2中所列的支持后端类型之一。
例如:

database bdb

这标志着一个新的BDB数据库实例声明的开始。

2.limits [ [...]]

根据谁发起的操作指定时间和大小限制。

请参阅本指南和slapd.conf(5)了解更多详情的限制部分。

3.readonly { on | off }

该指令将数据库设置为“只读”模式。修改数据库中的任何企图将返回“不愿意执行”的错误。

默认:

readonly off
4.rootdn

该指令规定了DN可以操作此数据库,而不受访问控制限制或管理限制。DN不必参考在此数据库或在目录中的条目。DN可以指向一个SASL标识。
基于条目的示例:

rootDN: "cn=Manager,dc=example,dc=com"

基于SASL的示例:

 rootDN: "uid=root,cn=example.com,cn=digest-md5,cn=auth"

请参阅本文有关SASL认证身份信息SASL验证部分。

5.rootpw:

该指令可以用于为rootdn的DN(当的rootdn在数据库内设置一个DN)指定一个密码。
例如:

rootpw: secret

它也允许在RFC2307的形式提供密码的哈希值。slappasswd(8)可以被用于生成密码散列。
例如:

rootpw: {SSHA}ZKKuqbEKJfKSXhUbHG3fG8MDn9j1v4QN

该hash是使用命令slappasswd -s secret 生成的。

6.suffix:

该指令指定了将传递给后端数据库的请求的DN的后缀。多个后缀线可以给定,且通常至少有一个必须为每个数据库定义。

例如:

suffix: "dc=example,dc=com"

查询以“dc=example,dc=com”结尾的DN将被传递给后端。

注意:当后端接收到一个被选中的查询时,slapd会顺序的在被配置的每一个数据库寻找该后缀值。因此,如果一个数据库后缀是另一个的前缀,它必须在该配置的后面出现。

7.syncrepl
olcSyncrepl: rid=
    provider=ldap[s]://[:port]
    [type=refreshOnly|refreshAndPersist]
    [interval=dd:hh:mm:ss]
    [retry=[ <# of retries>]+]
    searchbase=
    [filter=]
    [scope=sub|one|base]
    [attrs=]
    [attrsonly]
    [sizelimit=]
    [timelimit=]
    [schemachecking=on|off]
    [bindmethod=simple|sasl]
    [binddn=]
    [saslmech=]
    [authcid=]
    [authzid=]
    [credentials=]
    [realm=]
    [secprops=]
    [starttls=yes|critical]
    [tls_cert=]
    [tls_key=]
    [tls_cacert=]
    [tls_cacertdir=]
    [tls_reqcert=never|allow|try|demand]
    [tls_ciphersuite=]
    [tls_crlcheck=none|peer|all]
    [logbase=]
    [logfilter=]
    [syncdata=default|accesslog|changelog]

该指令通过建立当前的slapd(8)运行的syncrepl复制引擎复制消费者网站指定当前数据库作为主内容的副本。主数据库位于由提供参数指定的复制提供站点。副本数据库随时保持最新与使用LDAP内容同步协议主内容。有关该协议的更多信息,请参见RFC4533。

在摆脱参数用于复制消费者服务器内的当前的syncrepl指令,其中唯一地标识由当前的syncrepl指令所述的syncrepl规范的鉴定。 是非负的,是长度不超过三个十进制的数字。

provider参数指定包含主内容作为一个LDAP URI复制提供者站点。提供者参数指定的方案中,主机和任选其中所述提供商的slapd实例可以发现一个端口。可用于是一个域名或IP地址。例如LDAP://provider.example.com:389或LDAPS://192.168.1.1:636。如果没有给出,则使用标准的LDAP端口号(389或636)。注意syncrepl使用消费者发起协议,因此它的规范位于消费者的网站,而复制品规范位于提供商的网站。的syncrepl和replica指令定义了两个独立的复制机制。它们并不代表彼此的复制体。

所述的syncrepl副本的内容是使用作为其结果集的搜索规范中定义。消费者的slapd将根据搜索规范发送搜索请求给提供的slapd。搜索规范包括searchbase,范围,过滤器,ATTRS,attrsonly,的sizeLimit和时限参数,在正常的搜索规范。该searchbase参数没有默认值,必须指定。范围默认为子,过滤器默认为(objectclass=),ATTRS默认为“,+”复制所有的用户和业务属性,attrsonly默认情况下未设置。双方的sizeLimit和时限默认为“无限制”,只有正整数或“无限制”可能被指定。

LDAP内容同步协议有两种操作类型:refreshOnly和refreshAndPersist。操作类型由类型参数指定。在refreshOnly操作,下一个同步搜索操作周期的间隔时间改期每次同步操作结束后。间隔由间隔参数指定。它被设置为一天默认。在refreshAndPersist操作,同步搜索仍然是供应商的slapd实例持久。进一步更新主副本将产生searchResultEntry消费者的slapd以持续同步搜索的搜索响应。

如果在复制过程中发生错误时,消费者将尝试根据重试参数这是<# of retries>对的列表重新连接。例如,重试=“60 10 300 3”让消费者重试每隔60秒的第10次,然后重试每300秒重试停先下一三次。+<# of retries>中指重试,直到成功的数目不定。

模式检查可以在LDAP同步消费者现场通过接通schemachecking参数来执行。如果它被接通时,每个复制条目将被检查其模式作为条目存储到副本的内容。在副本的每个条目应该包含的架构定义所需的属性。如果它被关闭,参赛作品将被保存而不检查模式的一致性。默认是关闭的。

在指定binddn参数给出了DN绑定作为搜索的syncrepl的提供者的slapd。它应是有读权限在master数据库中复制内容的DN。

该bindmethod是简单或SASL,取决于简单的基于密码的认证或SASL认证是否是连接时的提供者的slapd实例中使用。

简单认证不应该使用,除非有充分的数据完整性和机密性的保护措施(如TLS或IPsec)。简单认证需要指定binddn和credentials参数。

一般推荐SASL认证。 SASL认证需要使用saslmech参数的机制规范。根据不同的机制,认证身份和/或可使用authcid和证书,分别被指定的凭据。所述authzid参数可以被用来指定一个授权的身份。

realm参数指定了一定的验证机制中的身份的境界。该secprops参数指定赛勒斯SASL安全属性。

启动TLS参数指定使用扩展操作认证的供应商之前建立一个TLS会话启动TLS的。如果关键参数提供,如果启动TLS请求失败的会话将被中止。否则的syncrepl会话继续不使用TLS。该TLS_REQCERT设置默认为“需求”和其他TLS设置默认为相同的主slapd的TLS设置。

而不是复制整个项目,消费者可查询的数据修改日志。这种操作模式被称为增量的syncrepl。除了上述参数,logbase和logfilter参数必须被适当地为将要使用的日志设定。所述syncdata参数必须被设置为“ACCESSLOG”如果日志符合slapo-ACCESSLOG(5)日志格式,或“更改日志”如果日志符合过时更改日志格式。如果省略或设置为“默认”的syncdata参数则日志参数将被忽略。

该的syncrepl复制机制是由BDB和HDB后端支持。

请参见本指南的LDAP同步复制一章关于如何使用此指令的更多信息。

8.updateref:

该指令只适用于一个附属的slapd。它指定的URL返回给客户端提交其在副本更新请求。如果指定了多次,每个URL都要提供。
例如:

updateref:   ldap://master.example.net

4.BDB和HDB数据库指令

类别中的指令仅适用于该BDB和HDB数据库。也就是说,他们必须在“database bdb”或“database hdb”行之后,在任何后续的“backend”或“database”行之前。对于BDB/ HDB配置指令的完整说明,请参阅slapd-bdb(5)。

1.directory:

该指令指定包含数据库的BDB文件和相关的索引所在的目录。
默认:

directory: /usr/local/var/openldap-data

3.配置文件示例

下面是一个示例配置文件,中间穿插了一些说明文字。它定义了两个数据库来处理X.500树的不同部分;两者都是BDB数据库实例。行号仅作参考,实际文件并不包含。首先,全局配置部分:

  1.    # example config file - global configuration section
  2.    include /usr/local/etc/schema/core.schema
  3.    referral ldap://root.openldap.org
  4.    access to * by * read

第1行是一条注释。第2行包含其他的核心模式定义的配置文件。第3行的referral指令意思为查询不是本地定义的数据库,将被称为在主机root.openldap.org的标准端口(389)上运行的LDAP服务器。

第4行是一个全局的访问控制。它适用于所有条目(任何适用的特定数据库的访问控制)。

配置文件的下一部分定义了一个在树“dc=example,dc=com”上处理事情查询的BDB后端。该数据库被复制到两个附属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.    # indexed attribute definitions
 12.    index uid pres,eq
 13.    index cn,sn pres,eq,approx,sub
 14.    index objectClass eq
 15.    # database access control definitions
 16.    access to attrs=userPassword
 17.        by self write
 18.        by anonymous auth
 19.        by dn.base="cn=Admin,dc=example,dc=com" write
 20.        by * none
 21.    access to *
 22.        by self write
 23.        by dn.base="cn=Admin,dc=example,dc=com" write
 24.        by * read

第5行是一条注释。第6行是由数据库关键字定义的数据库开始标志。第7行规定了查询该数据库的DN后缀。第8行指定该数据库文件所在的目录。

第9和10行标识数据库超级用户输入和相关联的密码。该条目不受访问控制,大小或时间限制的限制。

第12至14行表示保持对各种属性的索引。

第16至24行指定了数据库条目的访问控制。对于所有适用的条目,userPassword属性是该项本身以及由“admin”写入。它可以用于认证/授权,但在其他时候无法读取。所有其它属性都是由项和“admin”项写入,但可能会被所有用户(无论认证与否)读取。

该示例配置文件的下一部分定义了另一个BDB数据库。这一个处理涉及dc=example,dc=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

7.运行slapd

slapd(8)被设计为一个独立运行的服务。这使得服务器能够利用缓存,管理底层数据库的并发问题,并节省系统资源。从inetd(8)运行并不是一个可选项。

1.命令行选项

slapd(8)在手册中详细说明了一些命令行选项。本节详细介绍了一些常用的选项。

-f 

该选项指定slapd的备用配置文件。缺省通常是/usr/local/etc/openldap/slapd.conf。

 -F 

如果同时指定-f和-F,配置文件将被读取并转换到config目录格式并写入到指定的目录。如果没有指定选项,slapd的将尝试从默认config目录读取默认的配置文件。如果一个有效的config目录存在,则默认的配置文件将被忽略。所有的slap工具适用上面的规则。

-h 

该选项指定监听配置。默认值是LDAP:///,这意味着LDAP监听所有的TCP接口的LDAP端口389。您可以指定特定的“主机/端口”对,或其他协议方案(如LDAPS://或ldapi://)。

URL Protocol Transport
ldap:/// LDAP TCP port 389
ldaps:/// LDAP over SSL TCP port 636
ldapi:/// LDAP IPC(Unix-domain socker)

例如,-h "ldaps:// ldap://127.0.0.1:666"将创建两个监听器:一个用于(非标)ldaps:// 监听所有接口的ldaps://端口636,一个用于标准ldap://监听本地(环回)接口的666端口。Hosts指定使用主机名或IPv4或IPv6地址。端口值必须是数字。

对使用IPC的LDAP,Unix域套接字的路径名可以在URL编码。需要注意的是目录分隔符必须是URL编码,像URL的任何其他字符一样。因此,socket /usr/local/var/ldapi必须编码为

ldapi://%2Fusr%2Flocal%2Fvar%2Fldapi

ldapi:使用IPC机制的LDAP的详细使用请参阅[Chu-LDAPI]

注意,LDAP:///传输没有被广泛实施:非OpenLDAP的客户端可能无法使用它。

-n 

该选项指定用于记录及其他用途的服务名称。默认服务名称的slapd。

-l 

该选项指定本地用户的syslog(8)等级。值可以是LOCAL0,LOCAL1,LOCAL2,…,到LOCAL7。默认值是LOCAL4。此选项可能无法在所有系统上的支持。

-u user -g group

这些选项分别指定用户和组。用户可以是用户名或UID。组可以是组名称或GID。

-r directory

该选项指定运行时目录。slapd在开始监听之后,读取配置文件或初始化任何后端之前,将会chroot(2)该目录。

-d  | ?

该选项设置slapd的调试级别为。当级别是“?”字符,调试级别的帮助信息将会打印,并且不管你给它的任何其他选项,slapd将会退出。当前的调试级别有

表7.1 调试级别

级别 关键字 描述
0 不调试
1 (0x1 trace) 跟踪函数调用
2 (0x2 packets) 调试包的处理
4 (0x4 args) 重度跟踪调试
8 (0x8 conns) 连接管理
16 (0x10 BER) 打印发送和接收的包
32 (0x20 filter) 搜索过滤器的处理
64 (0x40 config) 配置处理
128 (0x80 ACL) 访问控制列表处理
256 (0x100 stats) 连接/操作/结果的统计日志
512 (0x200 stats2) 发送的条目的统计日志
1024 (0x400 shell) 打印和shell后端的通信
2048 (0x800 parse) 打印条目解析调试
16384 (0x4000 sync) syncrepl消费者处理
32768 (0x8000 none) 只显示那些不受日志级别设置影响的消息

你可以通过一次为每个需要的级别指定调试选项来启用多个级别。或者,因为调
试级别是累加的,你可以自己算一算。也就是说,如果要跟踪函数调用和查看被处理的配置文件,可以设置这两个等级的总和(在此情况下,-d65)。或者,你可以让slapd自己算,(如-d1-d64)。查看了解更多详情。

注:slapd必须在编译时使用–enable-debug选项,在两个状态等级上的调试信息为可用的(默认值)。

2.运行slapd

通常slapd像下面这样运行:

/usr/local/libexec/slapd [

/usr/local/libexec目录是由配置和上面的选项(或slapd(8))来确定的。除非你指定一个调试级别(包括级别0),slapd将自动从其控制终端fork并在后台运行。

3.停止slapd

安全的关闭slapd(8),你应该使用下面的命令:

kill -INT `cat /usr/local/var/slapd.pid`

/usr/local/var目录是由配置决定的。

通过更激烈的方法杀死的slapd可能造成信息丢失或数据库损坏。

8.访问控制

1.介绍

作为目录获取具有不同的灵敏度,控制各种授予目录访问的越来越多的数据填充变得越来越重要。例如,目录可能包含机密性质,你可能需要通过合同或法律来保护数据。或者,如果使用目录来控制访问其他服务,该目录不适当的访问可以创建导致对资产造成毁灭性的破坏攻击您的网站安全的途径。

访问到目录可以通过两种方法中,使用slapd配置文件和使用的slapd-config(5)格式(配置slapd)。

默认的访问控制策略是允许所有客户端读取。无论是什么定义访问控制策略,rootdn就总是允许充分的权利(即身份验证,搜索,比较,读,写)的一切,任何东西。

因此,它是无用的(并且在性能下降),明确列出了子句中的rootdn。

下面的章节将介绍访问控制列表更深入和遵循一些例子和建议。完整的细节,请参见slapd.access(5)。

2.静态配置访问控制

以实体和属性的访问是由访问配置文件指令的控制。接入线路的一般形式为:

 ::= access to 
    [by  [] [] ]+
 ::= * |
    [dn[.]= | dn.=]
    [filter=] [attrs=]
 ::= regex | exact
 ::= base | one | subtree | children
 ::=  [val[.]=] |  , 
 ::=  | entry | children
 ::= * | [anonymous | users | self
        | dn[.]= | dn.=]
    [dnattr=]
    [group[/[/][.]]=]
    [peername[.]=]
    [sockname[.]=]
    [domain[.]=]
    [sockurl[.]=]
    [set=]
    [aci=]
 ::= [self]{|}
 ::= none | disclose | auth | compare | search | read | write | manage
 ::= {=|+|-}{m|w|r|s|c|x|d|0}+
 ::= [stop | continue | break]

其中部分选择的条目或属性来访问适用的部分指定哪些实体授予访问权,而部分指定授予的访问权限。多个`` 三个部分的支持,这让很多实体授予同一组条目和属性的不同访问权限。不是所有的都在这里描述了这些访问控制选项;有关详细信息,请参见slapd.access(5)手册页。

1.用什么控制访问

访问规范的部分确定条目和属性的访问控制适用。通过DN和过滤:报名方式有两种常见的选择。下面通过预选赛DN选择条目:

to *
to dn[.]=
to dn.=

第一种形式是用于选择所有项。第二种形式可以用于通过匹配对目标条目的DN标准化正则表达式来选择条目。(第二种形式本文档中没有进一步讨论。)第三形式用于选择哪个是DN请求的范围之内的条目。在是专有名称的字符串表示,如RFC4514中描述。

范围可以是base,one,subtree,children。其中,base与配置DN的条目相匹配,one匹配的父亲是配置DN的条目,subtree的匹配所有根是配置DN的子树的条目,children匹配配置DN下的所有条目(但不包括配置DN)。

例如,如果目录包含条目命名为:

0: o=suffix
1: cn=Manager,o=suffix
2: ou=people,o=suffix
3: uid=kdz,ou=people,o=suffix
4: cn=addresses,uid=kdz,ou=people,o=suffix
5: uid=hyc,ou=people,o=suffix

这样的话:

dn.base="ou=people,o=suffix" match 2;
dn.one="ou=people,o=suffix" match 3, and 5;
dn.subtree="ou=people,o=suffix" match 2, 3, 4, and 5; and
dn.children="ou=people,o=suffix" match 3, 4, and 5.

条目还可以使用过滤器选择:

to filter=

其中,是LDAP搜索筛选器的字符串,如RFC4515。例如:

to filter=(objectClass=person)

注意,条目可以由DN选择和过滤器通过子句进行选择。

to dn.one="ou=people,o=suffix" filter=(objectClass=person)

条目的属性是从一个包括属性名称的由逗号分隔的选择器列表中选择的:

attrs=

属性的具体值是通过使用单一的属性名和值的选择器选择的:

attrs= val[.