25.3. 使用 slapd.conf 配置服务器

已安装系统的 /etc/openldap/slapd.conf 中包含 LDAP 服务器的完整配置文件。在此简述了其中的各个项并说明了必要的调整。以符号 (#) 为前缀的项处于非活动状态。必须取消这个注释字符才能激活这些项。

25.3.1. slapd.conf 中的全局指令

例 25.2. slapd.conf:用于方案的 Include 指令

include         /etc/openldap/schema/core.schema
include         /etc/openldap/schema/cosine.schema
include         /etc/openldap/schema/inetorgperson.schema
include         /etc/openldap/schema/rfc2307bis.schema
include         /etc/openldap/schema/yast.schema

这是 slapd.conf 中的第一个指令(如 例 25.2 “slapd.conf:用于方案的 Include 指令” 所示),用于指定组织 LDAP 目录所依据的方案。core.schema 是必需项。所需的其余方案会追加到此指令中。相关信息可参见随附的 OpenLDAP 文档。

例 25.3. slapd.conf:pidfile 和 argsfile

pidfile /var/run/slapd/slapd.pid
argsfile /var/run/slapd/slapd.args

这两个文件包含启动 slapd 进程所用的 PID(进程 ID)和一些参数。在此没必要进行修改。

例 25.4. slapd.conf:访问控制

# Sample Access Control
#       Allow read access of root DSE
# Allow self write access
#       Allow authenticated users read access
#       Allow anonymous users to authenticate
# access to dn="" by * read
  access to * by self write
              by users read
              by anonymous auth
#
# if no access controls are present, the default is:
#       Allow read by all
#
# rootdn can always write!

例 25.4 “slapd.conf:访问控制” 节选自 slapd.conf,涉及如何管理服务器上的 LDAP 目录的访问权限。只要在数据库特定部分没有声明任何自定义访问规则,slapd.conf 的全局部分中的设置将始终有效。这些自定义声明会覆盖全局声明。如本例所示,所有用户都可以读取目录,但只有管理员 (rootdn) 才能写入此目录。LDAP 中的访问控制管理是一个非常复杂的过程。以下提示会有所帮助:

  • 每条访问规则都具有如下结构:

    access to <what> by <who> <access>
  • what 是一个占位符,表示授权访问的对象或特性。可以使用单独的规则来明确保护各个目录分支。还可以使用正则表达式通过一条规则处理目录树的各个区域。slapd 按照各条规则列在配置文件中的先后顺序依次评估它们。较抽象的规则应列在较具体的规则之后 - 在评估 slapd 认为有效的第一条规则之后,随后的所有项都将被忽略。

  • who 确定应该授权谁来访问 what 确定的区域。可以使用正则表达式。slapd 同样会在评估第一条有效规则之后中止对随后的 who 的评估,所以应将较具体的规则列在较抽象的规则之前。可以使用 表 25.2 “用户组及其访问授权” 所示的项。

    表 25.2. 用户组及其访问授权

    标签

    作用域

    *

    所有用户,无一例外

    anonymous

    未鉴定(“匿名”)用户

    user

    已鉴定用户

    self

    与目标对象连接的用户

    dn.regex=<regex>

    与正则表达式匹配的所有用户

  • access 指定访问类型。请使用 表 25.3 “访问类型” 所列的选项。

    表 25.3. 访问类型

    标签

    访问范围

    无访问权

    auth

    用于联系服务器

    compare

    授予要进行比较访问的对象

    search

    用于应用搜索过滤器

    read

    读权限

    write

    写权限

    slapd 会将客户机请求的访问权限与 slapd.conf 中授予的权限进行对比。如果规则允许的权限比请求的权限高或是相同,就可以授予客户机权限。如果客户机请求的权限高于规则中声明的权限,便会拒绝授予权限。

例 25.5 “slapd.conf:访问控制示例” 显示了一个简单示例,使用正则表达式可以随意指定这样的简单访问控制。

例 25.5. slapd.conf:访问控制示例

access to  dn.regex="ou=([^,]+),dc=suse,dc=de" 
by dn.regex="cn=administrator,ou=$1,dc=suse,dc=de" write  
by user read 
by * none

此规则声明只有各个 ou 项的管理员才有权写入他/她所管理的项。其它所有通过鉴定的用户只有读权限,其余人没有任何权限。

[Tip]建立访问规则

如果没有 access to 规则或匹配的 by 指令,则拒绝访问。只有经过显式声明才能授予访问权限。如果根本没有声明任何规则,默认规则是管理员具有写权限,其它所有用户都具有读权限。

有关 LDAP 访问权限的详细信息和示例配置,请参见所安装的 openldap2 软件包中的联机文档。

除了可以使用中央服务器配置文件 (slapd.conf) 管理访问权限之外,还可以使用访问控制信息 (ACI)。ACI 允许储存 LDAP 树中各个对象的访问信息。这种访问控制尚未普及,开发人员认为它目前仍处于试用阶段。相关信息请参见 http://www.openldap.org/faq/data/cache/758.html

25.3.2. slapd.conf 中的数据库特定指令

例 25.6. slapd.conf:数据库特定指令

database bdb 
checkpoint      1024    5
cachesize       10000
suffix "dc=suse,dc=de" 
rootdn "cn=admin,dc=suse,dc=de" 
# Cleartext passwords, especially for the rootdn, should 
# be avoided.  See slappasswd(8) and slapd.conf(5) for details. 
# Use of strong authentication encouraged.
rootpw secret 
# The database directory MUST exist prior to running slapd AND 
# should only be accessible by the slapd/tools. Mode 700 recommended. 
directory /var/lib/ldap 
# Indices to maintain 
index   objectClass     eq

数据库的类型(在此情况下为 Berkeley 数据库)由此段的第一行确定(请参见 例 25.6 “slapd.conf:数据库特定指令”)。checkpoint 确定数据写入实际数据库之前事务日志中保留的数据量(以 kb 为单位)和两次写入操作之间的时间(以分钟为单位)。cachesize 设置数据库的超速缓存中保留的对象数。suffix 确定此服务器应负责的 LDAP 树的部分。接下来的 rootdn 确定谁对此服务器拥有管理员权限。在此声明的用户不必拥有 LDAP 项,也不必是普通用户。管理员口令用 rootpw 来设置。在此不必使用 secret,可以输入 slappasswd 创建的管理员口令的哈希值。directory 指令表明数据库目录储存在服务器的哪个目录中(在文件系统中)。最后一个指令 index objectClass eq 指示对所有对象类的索引进行维护。可以在此根据经验添加用户最常搜索的特性。在此为数据库自定义的 Access 规则将取代全局 Access 规则。

25.3.3. 启动和停止服务器

在根据 第 25.4 节 “LDAP 目录中的数据处理” 所述的模式对 LDAP 服务器进行全面配置并且设置全部所需项之后,可通过输入 rcldap startroot 身份启动 LDAP 服务器。要手工停止服务器,请输入命令 rcldap stop。使用 rcldap status 可请求运行中的 LDAP 服务器的状态。

可以使用 第 8.2.3 节 “使用 YaST 配置系统服务(运行级别)” 所述的 YaST 运行级别编辑器,在引导和暂停系统时相应地自动启动和停止服务器。还可以如第 8.2.2 节 “Init 脚本”所述,在命令提示中使用 insserv 命令创建指向启动脚本和停止脚本的相应链接。