slapd配置文件详述
slapd配置文件详述
Slapd运行配置主要是通过slapd.conf文件。通常,该文件安装在/usr/local/etc/openldap目录下。也可以使用slapd或者slurpd的命令行参数指定其他的配置文件。本章描述了配置文件的格式,并且描述了常用的配置指令。
1. 配置文件格式
slapd.conf文件由3个部分的配置信息组成:全局的,特定后台的,和特定数据库的。全局信息首先被指明,后面是特定后台的信息,在后面是特定数据库实例的信息。全局信息可以被特定后台和特定数据库的信息覆盖。特定后台的信息可以被特定数据库的信息覆盖。
空白行和以“#”开始的注释行被忽略。如果一行以空格开始,它被认为是上一行的继续。常用的slapd.conf的格式如下所示: # global configuration directives <global config directives>
# backend definition backend <typeA> <backend-specific directives>
# first database definition & config directives database <typeA> <database-specific directives>
# second database definition & config directives database <typeB> <database-specific directives>
# second database definition & config directives database <typeA> <database-specific directives>
# subsequent backend & database definitions & config directives 配置指令可以包含参数。如果包含参数,它们以空格分隔。如果一个参数包含空格,参数应该用双引号因起来,比如“like this”。如果一个参数包含双引号或者一个反斜线“\”,它们因该用一个“\”开始。软件包含了一个示例配置文件,安装在/usr/local/etc/openldap目录下。软件还提供了许多包含模式定义(属性类型attribute types和对象类inject classes)文件,它们在/usr/local/etc/openldap/schema目录下。
2. 配置文件指令
本部分详细描述了经常使用的配置指令。要得到完整的列表,请参阅slapd.conf(5)的手册页。本部分将配置文件指令划分为全局的,特定后台的和特定数据的类别,描述了每一个指令和它的默认值,并且给出了使用示例。
2.1 全局指令
本部分描述的指令应用于所有的后台和数据库,除非在后台或者数据库的定义中被明确覆盖。应该被实际文本替换的参数放在尖括号<>中。
2.1.1 access to <what> [ by <who> <accesslevel> <control> ]+
此指令将访问一组由<what>描述的条目或者属性,并且具有由<accesslevel>指明的存取控制权限,赋予一个或者多个由<who>描述的请求者。参考本章的“存取控制”部分获得基本的使用信息。
2.1.2 attributetype <RFC2252 Attribute Type Description>
此指令定义了一个属性类型。请参考“模式说明”一章获取如何使用此指令的更详细的信息
2.1.3 defaultaccess { none | compare | search | read | write }
此指令说明了当没有存取控制指令说明的时候,默认的存取权限。任何给定的存取级别隐含了更低的级别。比如,读权限隐含了搜索和比较的权限,但是,不包含写权限。
注意:推荐使用access指令来设置存取控制。有关access指令的详细信息,参阅本章的“存取控制”部分。缺省值: defaultaccess read
2.1.4 idletimeout <integer>
此指令说明强制关闭一个非活动状态的客户连接之前等待的秒数。默认情况下,该时间等于0,禁止该特性。
2.1.5 include <filename>
此指令说明slapd在继续当前文件的下一行之前,应该从指定的文件读取附加的配置信息。被包含的文件应该符合正常的slapd配置文件的格式。该文件通常被用来包含模式说明。
注意:在使用该指令的时候应该小心。因为对于嵌套的引入指令的最小数量没有限制,并且,没有循环引用的检测。 2.1.6 loglevel <integer>
该指令说明了调试语句和操作统计的日志级别。(当前,日志记录到syslogd(8){EX:LOG_LOCAL4})应用程序)。在此选项工作之前,必须使用—enable-debug选项配置了OpenLDAP。(除了两个统计级别,它们总是被使用)。日志级别是附加的。要显示那一个数字和什么级别的调试相关联,使用-?运行slapd或者参考下面的表格。可能的<integer>数值包括:
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 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
2.1.7 objectclass <RFC2252 Object Class Description>
该指令定义了一个对象类。请参考“模式说明”一章获得如何使用该指令的更多信息。
2.1.8 referral <URI>
该指令说明了当slapd处理请求时,如果不能在本地数据库中找到信息,将返回的引用。
示例: referral ldap://root.openldap.org 这将引用一个非本地的请求到OpenLDAP项目的全局根LDAP服务器。具有智能的LDAP客户端可以向该服务器重新提交请求。但是请注意,大多数客户端只是知道如何处理简单的包含一个主机部分和一个DN(distinguished name)部分的LDAP URL。
2.1.9 sizelimit <integer>
该指令说明了一个搜索操作所能返回的最大条目的数量。
缺省值: sizelimit 500
2.1.10 timelimit <integer>
该指令说明了slapd应答搜索请求的时候花费的最长秒数。如果一个请求在该时间内没有结束,会返回一个表示超时的结果。
缺省值: timelimit 3600
2.2 通用后端指令
本部分说明的指令只应用于定义它们的后端。它们被所有类型的后端所支持。后端指令应用于所有相同类型的数据库实例,并且,根据不同的指令,可以被数据库指令覆盖。
2.2.1 backend <type>
该指令表示一个后端声明的开始。<type>应该是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后端声明的开始。
2.3 通用数据库指令
本部分说明的指令只应用于定义它们的数据库。它们被每一种类型的数据库所支持。
2.3.1 database <type>
此指令表示一个数据库实例声明的开始。<type>可以是bdb或者是其他受支持的后端类型中的一种。这些类型在表5.2种列出。
示例: database bdb 这说明了一个新的数据库实例声明的开始。
2.3.2 readonly { on | off }
此指令将数据库设置为“只读”状态。任何试图修改数据库的操作将返回“unwilling to perform”错误。
缺省值: readonly off
2.3.3 replica replica host=<hostname>[:<port>]
[bindmethod={ simple | kerberos | sasl }] ["binddn=<DN>"] [mech=<mech>] [authcid=<identity>] [authzid=<identity>] [credentials=<password>] [srvtab=<filename>]
此指令说明了一个该数据库的一个复制站点。host=参数说明了一个主机和一个可选的端口,此主机上运行了一个附属slapd实例。对于<hostname>可以指定域名或者IP地址。如果没有指定<port>,使用标准的LDAP端口(389)。 binddn=参数给出了更新附属slapd时绑定的DN。该DN应该具有对附属slapd数据库的读/写权限,通常给定一个在附属slapd的配置文件中指定的rootdn。它必须和附属slapd的配置文件中指出的updatedn相匹配。因为DN很可能会包含空格,因此,整个”binddn=<DN>“字符串应该包含在双引号中。 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进行复制”一章来获得使用此指令的更多信息。
2.3.4 replogfile <filename>
该指令说明了slapd用来记录改变的复制日志文件。复制日志文件通常被slapd写入,并且由slurpd读出。通常情况下,该指令只有在使用slurpd复制数据库的时候才会使用。但是,即使slurpd没有运行,您也可以使用它来产生一个事务记录。在这种情况下,您需要定时截断该文件,否则,它将会持续增长。
请参阅“使用SLURPD进行复制”一章来获得使用此指令的更多信息。 2.3.5 rootdn <dn>
该指令说明了对于该数据库的操作不受限于存取控制或者管理限制的DN。该DN不应该指向目录中的任何条目。该DN可以指向一个SLSL证书。
基于条目的示例: rootdn “cn=Manager,dc=example,dc=com” 基于SASL的示例: rootdn “uid=root@EXAMPLE.COM”
2.3.6 rootpw <password>
该指令说明了上面的指令中总是能够工作的DN的口令,无论指定的DN条目是否存在,或者,是否具有一个口令。该指令和基于SASL的认证相比是不推荐的。
示例: rootpw secret
2.3.7 suffix <dn suffix>
该指令指明了一个传递给后台数据库的查询的DN后缀。可以给出多个后缀行,并且对于每一个数据库定义,至少需要一个。
示例: suffix “dc=example,dc=com” 以指定后缀”dc=example,dc=com”结尾的查询将被传递给后台数据库。注意:当选择了一个传递给后端的查询时,slapd在每一个数据库定义中,按照它们在文件中出现的顺序查找后缀行。因此,如果一个数据库后缀是另外一个的前缀,它在配置文件中,必须出现在另外一个的后面。 2.3.8 updatedn <dn>
该指令只有在附属slapd中才会使用。它说明了允许对复本进行改变的DN的名称。这可能是slurpd(8)在对复本做改变的时候绑定的DN,或者是和一个SASL证书相关联的DN。
基于条目的示例: updatedn “cn=Update Daemon,dc=example,dc=com” 基于SASL的示例: updatedn “uid=slurpd@EXAMPLE.COM” 请参阅“使用SLURPD进行复制”一章来获得使用此指令的更多信息。
2.3.9 updateref <URL>
该指令只有在附属slapd中才会使用。它说明了当客户端对复本提交更新请求时返回给客户端的URL。如果说明了多次,每一个URL都将被返回。
updateref ldap://master.example.net
2.4 BDB数据库指令
该类别的指令只是适用于一个BDB数据库。也就是说,它们必须出现在一个“database bdb”行之后,并且在任何后续的“backend”或者“database”行之前。
2.4.1 directory <directory>
该指令说明了包含BDB数据库文件和相关联的索引的目录。
缺省值: directory /usr/local/var/openldap-data