2.2. 目录服务器实例特定文件和目录

要分隔在同一主机上运行的多个实例,某些文件和目录包含实例的名称。您在 Directory 服务器设置过程中设置实例名称。默认情况下,这是没有域名的主机名。例如,如果您的完全限定的域名是 server.example.com,则默认实例名称为 server

以下是 Directory 服务器特定实例的默认文件和目录位置:

类型位置

备份文件

/var/lib/dirsrv/slapd-instance_name/bak/

配置文件

/etc/dirsrv/slapd-instance_name/

证书和密钥数据库

/etc/dirsrv/slapd-instance_name/

数据库文件

/var/lib/dirsrv/slapd-instance_name/db/

LDIF 文件

/var/lib/dirsrv/slapd-instance/ldif/

锁定文件

/var/lock/dirsrv/slapd-instance_name/

日志文件

/var/log/dirsrv/slapd-instance_name/

PID 文件

/var/run/dirsrv/instance_name.pid

systemd 单元文件

/etc/systemd/system/dirsrv.target.wants/dirsrv@instance_name.service

2.2.1. 配置文件

每个目录服务器实例将其配置文件存储在 /etc/dirsrv/slapd-实例 目录中。

Red Hat Directory Server 的配置信息作为 LDAP 条目存储在目录本身中。因此,必须通过使用服务器本身而非直接编辑配置文件来实施对服务器配置的更改。这种配置存储方法的主要优点是,它允许目录管理员在仍在运行时使用 LDAP 重新配置服务器,从而避免需要关闭服务器以多数配置更改。

2.2.1.1. Directory 服务器配置概述

当设置 Directory 服务器时,其配置会作为目录中的一系列 LDAP 条目存储在 subtree cn=config 下。当服务器启动时,cn=config 子树的内容会从文件读取(dse.ldif)(采用 LDIF 格式)。此 dse.ldif 文件包含所有服务器配置信息。此文件的最新版本名为 dse.ldif,上次修改前的版本名为 dse.ldif.bak,以及服务器成功启动的最新文件名为 dse.ldif.startOK

目录服务器的许多特性是设计为插入到核心服务器中的离散模块。每个插件的内部配置详情包括在 cn=plugins,cn=config 下的独立条目中。例如,Telarmphone 语法插件的配置包含在该条目中:

cn=Telephone Syntax,cn=plugins,cn=config

同样,特定于数据库的配置存储在 下

cn=ldbm database,cn=plugins,cn=config for local databases, cn=chaining database,cn=plugins,cn=config for database links.

下图说明了配置数据如何适合 cn=config 目录信息树。

图 2.1. 目录信息树显示配置数据

cfgdit1
2.2.1.1.1. LDIF 和 Schema 配置文件

目录服务器配置数据存储在 /etc/dirsrv/slapd-实例 目录中的 LDIF 文件中。因此,如果服务器标识符是电话笔记本电脑,则配置 LDIF 文件将存储在 /etc/dirsrv/slapd- phonebook 中。

该目录还包含其他特定于服务器实例的配置文件。

模式配置也以 LDIF 格式存储,这些文件则位于 /etc/dirsrv/schema 目录中。

下表列出了与 Directory 服务器提供的所有配置文件,包括用于其他兼容服务器的模式。每个文件的前面都有一个数字,指明应加载它们的顺序(按数字,然后按字母顺序排列)。

表 2.1. 目录服务器 LDIF 配置文件

配置文件名称用途

dse.ldif

包含由服务器启动时由 目录创建的前端目录 Entries。这包括 Root DSE("")和 cn=configcn=monitor 的内容。

00core.ldif

仅包含那些使用裸机功能启动服务器(无用户 schema,任何非核心功能)所需的模式定义。用户、特性和应用的其他架构在 01common.ldif 和其他架构文件中找到。不要修改此文件。

01common.ldif

包含 LDAPv3 标准操作模式,如 subschemaSubentry、LDAPv3 标准用户和在 RFC 2256 中定义的用户和机构 schema(基于 X.520/X.521)、InetOrgPerson 和其他广泛使用的属性,以及 Directory Server 配置中使用的操作属性。修改此文件会导致互操作性问题。用户定义的属性应该通过 Directory Server 控制台添加。

05rfc2247.ldif

RFC 2247 和相关试验模式的模式,从"在 LDAP/X500 Distinguished Name 中使用域"

05rfc2927.ldif

RFC 2927 的 schema,"LDAP 架构的MIME 目录配置文件"。 包含在 subschema 子条目中显示属性所需的 ldapSchemas 操作属性。

10presence.ldif

传统.用于即时消息的 schema(在线)信息;文件列出了默认对象类,其属性必须添加到用户条目中,以便使即时信息可供该用户使用。

10rfc2307.ldif

RFC 2307 的 schema,"使用 LDAP 作为网络信息服务的方法"。 当该模式可用时,可以使用 10rfc2307bis (新版本的 rfc2307 )替换它。

20subscriber.ldif

包含新的 schema 元素和 Nortel 订阅者互操作性规格。还包含 adminRolememberOf 属性和 inetAdmin 对象类,之前存储在 50ns-delegated-admin.ldif 文件中。

25java-object.ldif

RFC 2713 的 schema,"在 LDAP 目录中代表 Java® 对象的架构"。

28pilot.ldif

包含 RFC 1274 的 pilot 目录 schema,这已不再用于新部署。将来的 RFC 1274 可以成功弃用一些或所有 28pilot.ldif 属性类型和类。

30ns-common.ldif

架构中包含与 Directory Server 控制台框架通用的对象类和属性。

50ns-admin.ldif

红帽管理服务器使用的模式.

50ns-certificate.ldif

红帽证书管理系统的模式.

50ns-directory.ldif

包含 Directory Server 4.12 及更早的版本使用的其他配置模式,它不再适用于 Directory Server 的当前版本。在 Directory Server 4.12 和当前版本之间复制这个 schema。

50ns-mail.ldif

Netscape Messaging Server 用来定义邮件用户和邮件组的架构。

50ns-value.ldif

服务器值项属性的 schema。

50ns-web.ldif

Netscape Web 服务器的模式。

60pam-plugin.ldif

保留以供将来使用。

99user.ldif

由目录服务器复制消费者维护的用户定义架构,其中包含来自供应商的属性和对象类。

2.2.1.1.2. 服务器配置机构如何组织

dse.ldif 文件包含所有配置信息,包括在服务器启动时由目录创建的目录特定条目,如与数据库相关的条目。该文件包含 root Directory Server 条目(或 DSE,名为 ""),以及 cn=configcn=monitor 的内容。

当服务器生成 dse.ldif 文件时,它会按照 cn=config 下的目录中显示的顺序列出条目,通常是与 LDAP 搜索 base cn=config 的子树范围相同的顺序。

DSE.ldif 还包含 cn=monitor 条目,该条目基本上是只读的,但可在其上设置 ACI。

注意

dse.ldif 文件不包含 cn=config 中的每个属性。如果管理员未设置 属性并且具有默认值,服务器将不会将其写入 dse.ldif。要查看 cn=config 中的每个属性,请使用 ldapsearch

配置属性

在配置条目中,每个属性都以属性名称表示。属性的值与属性的配置对应。

以下代码示例是 Directory 服务器的 dse.ldif 文件的一部分。示例中显示,模式检查已被启用;这由 nsslapd-schemacheck 属性表示,该值取了 上的 值。

dn: cn=config
objectclass: top
objectclass: extensibleObject
objectclass: nsslapdConfig
nsslapd-accesslog-logging-enabled: on
nsslapd-enquote-sup-oc: off
nsslapd-localhost: phonebook.example.com
nsslapd-schemacheck: on
nsslapd-port: 389
nsslapd-localuser: dirsrv
...

配置插件功能

Directory Server 插件功能的每个部分的配置都有自己的单独的条目,以及子树 cn=plugins,cn=config 下的属性集合。以下代码示例是示例插件(Telefphone 语法插件)的配置条目示例。

dn: cn=Telephone Syntax,cn=plugins,cn=config
objectclass: top
objectclass: nsSlapdPlugin
objectclass: extensibleObject
cn: Telephone Syntax
nsslapd-pluginType: syntax
nsslapd-pluginEnabled: on

其中一些属性适用于所有插件,某些属性可能特定于特定的插件。通过在 cn=config 子树中执行 ldapsearch,检查给定插件目前正在使用哪些属性。

有关 Directory Server 支持的插件列表、通用插件配置信息、插件配置属性参考和需要重启配置更改的插件列表,请参阅 第 4 章 插件实现的服务器功能参考

配置数据库

数据库插件条目下的 cn=UserRoot 子树包含包含设置过程中创建的默认后缀的数据库的配置数据。

这些条目和子项具有许多属性,用于配置不同的数据库设置,如缓存大小、索引文件的路径和事务日志、用于监控和统计信息的条目和属性;以及数据库索引。

配置索引

索引的配置信息作为条目存储在以下 information-tree 节点的 Directory Server 中:

  • cn=index,cn=UserRoot,cn=ldbm database,cn=plugins,cn=config
  • cn=default indexes,cn=config,cn=ldbm database,cn=plugins,cn=config

有关一般索引的更多信息,请参阅 Red Hat Directory Server Administration Guide。有关索引配置属性的详情,请参考 第 4.4.1 节 “database Attributes in cn=config,cn=ldbm database,cn=plugins,cn=config”

2.2.1.2. 访问和修改服务器配置

本节讨论配置条目的访问控制,并描述了服务器配置可以查看和修改的各种方法。它还涵盖了对需要重新启动服务器重启的属性而进行和讨论的修改类型的限制,以使更改生效。

2.2.1.2.1. 配置条目的访问控制

安装 Directory Server 时,会为 cn=config 下的所有条目实施默认的访问控制指令(ACIs)。以下代码示例是这些默认 ACI 的示例。

aci: (targetattr = "*")(version 3.0; acl "Local Directory Administrators Group"; allow (all)
     groupdn = "ldap:///ou=Directory Administrators,dc=example,dc=com";)

这些默认 ACI 允许以下用户在所有配置属性中执行所有 LDAP 操作:

  • Configuration Administrators 组的成员。
  • 作为管理员的用户,在设置时配置的 admin 帐户。默认情况下,这与登录到控制台的用户帐户相同。
  • 本地目录管理员组成员。
  • SIE(服务器实例条目)组,通常使用 Set Access Permissions 进程主控制台进行分配。

有关访问控制的更多信息,请参阅 Red Hat Directory Server 管理指南

2.2.1.2.2. 更改配置属性

可以通过三种方式查看和更改服务器属性:通过目录服务器控制台、执行 ldapsearchldapmodify 命令,或者通过手动编辑 dse.ldif 文件来查看和更改。

注意

在编辑 dse.ldif 文件前,必须停止 服务器;否则,更改将会丢失。建议只对无法动态更改的属性更改 dse.ldif 文件。如需更多信息,请参阅 配置更改 Requiring Server Restart

以下小节介绍了如何使用 LDAP 修改条目(使用 Directory 服务器控制台和使用命令行),用于修改条目的限制、适用于修改属性的限制以及需要重启的配置更改。

使用 LDAP 修改配置条目

可使用 LDAP 使用 Directory 服务器控制台搜索和修改目录中的配置条目,或者执行 ldapsearchldapmodify 操作的方式与其他目录条目相同。使用 LDAP 修改条目的优点是可在服务器运行时进行更改。

如需更多信息,请参阅 Red Hat Directory Server 管理指南 中的"创建目录条目"一章。但是,某些更改需要在服务器考虑前重启它们。如需更多信息,请参阅 配置更改 Requiring Server Restart

注意

与任何一组配置文件一样,在更改或删除 cn=config 子树中的节点时应小心,因为这会影响 Directory 服务器功能的风险。

通过在 cn=config 子树中执行 ldapsearch 操作,包括始终使用默认值的属性来查看:

# ldapsearch -D "cn=Directory Manager" -W -p 389 -h server.example.com -b "cn=config" -s sub -x "(objectclass=*)"
  • bindDN 是安装服务器时为 Directory Manager 选择的 DN(默认为cn=Directory Manager )。
  • password 是为 Directory Manager 选择的密码。

要禁用插件,请使用 ldapmodify 编辑 nsslapd-pluginEnabled 属性:

# ldapmodify -D "cn=Directory Manager" -W -p 389 -h server.example.com -x
dn: cn=Telephone Syntax,cn=plugins,cn=config
changetype: modify
replace: nsslapd-pluginEnabled
nsslapd-pluginEnabled: off

修改配置条目和属性的限制

修改服务器条目和属性时会应用某些限制:

  • cn=monitor 条目及其子条目为只读且不可修改,但管理 ACI 除外。
  • 如果某一属性添加到 cn=config,则服务器会忽略它。
  • 如果为属性输入无效值,服务器会忽略它。
  • 由于 ldapdelete 被用来删除整个条目,因此请使用 ldapmodify 从条目中删除属性。

配置更改 Requiring Server Restart

在服务器运行时无法更改一些配置属性。在这些情况下,为了使更改生效,需要关闭并重新启动服务器。修改应通过 Directory 服务器控制台或通过手动编辑 dse.ldif 文件进行。下面列出了需要服务器重启的一些属性以使任何更改生效。此列表不详细;查看完整的列表,请运行 ldapsearch,再搜索 nsslapd-requiresrestart 属性。例如:

# ldapsearch -D "cn=Directory Manager" -W -p 389 -h server.example.com -b "cn=config" -s sub -x "(objectclass=*)" | grep nsslapd-requiresrestart

nsslapd-cachesize

nsslapd-certdir

nsslapd-dbcachesize

nsslapd-dbncache

nsslapd-plugin

nsslapd-changelogdir

nsslapd-changelogmaxage

nsslapd-changelogmaxentries

nsslapd-port

nsslapd-schemadir

nsslapd-saslpath

nsslapd-secureport

nsslapd-tmpdir

nsSSLclientauth

nsSSLSessionTimeout

nsslapd-conntablesize

nsslapd-lockdir

nsslapd-maxdescriptors

nsslapd-reservedescriptors

nsslapd-listenhost

nsslapd-schema-ignore-trailing-spaces

nsslapd-securelistenhost

nsslapd-workingdir

nsslapd-return-exact-case

nsslapd-maxbersize [a]

 
[a] 虽然此属性需要重启,但它不会在搜索中返回。

删除配置属性

所有核心配置属性都不存在,即使没有在 /etc/dirsrv/slapd-instance-name/dse.ldif 文件中写入,因为它们都具有服务器使用的默认值。

有关删除无法删除的核心配置属性和无法删除的属性列表的详情,请参考 Red Hat Directory Server Administration Guide 中的对应部分。

2.2.2. 数据库文件

每个目录服务器实例都包含用于存储所有 数据库文件的 /var/lib/dirsrv/slapd-实例/db 目录。以下是 /var/lib/dirsrv/slapd-实例/db 目录内容的示例列表。

例 2.1. 数据库目录内容

db.001 db.002  __db.003  DBVERSION  log.0000000001  userroot/
  • db.00x 文件 - 由数据库在内部使用,不应以任何方式移动、删除或修改。
  • log.xxxxxxxxxx files - 用来存储每个数据库的事务日志。
  • DBVERSION - 用于存储数据库的版本。
  • userroot - 存储在设置中创建的用户定义的后缀(用户定义的数据库),例如: dc=example,dc=com
注意

如果创建新数据库(例如 testRoot)将目录树存储在新后缀下,则名为 testRoot 的目录也会出现在 /var/lib/dirsrv/slapd-实例/db 目录中。

以下是 用户Root 目录的内容的示例列表。

例 2.2. userroot 数据库目录内容

ancestorid.db
DBVERSION
entryrdn.db
id2entry.db
nsuniqueid.db
numsubordinates.db
objectclass.db
parentid.db

userroot 子目录包含以下文件:

  • ancestorid.db - 包含一个 ID 列表,以查找条目级的 ID。
  • entrydn.db - 包含用于查找任何 ID 的完整 DN 列表。
  • id2entry.db - 包含实际的目录数据库条目。如果需要,可以从此重新创建所有其他数据库文件。
  • nsuniqueid.db - 包含用来找到任何 ID 的唯一 ID 列表。
  • numsubordinates.db - 包含子条目的 ID。
  • objectClass.db - 包含具有特定对象类的 ID 列表。
  • parentid.db - 包含用于查找父 ID 的 ID 列表。

2.2.3. LDIF 文件

LDIF 文件示例存储在 /var/lib/dirsrv/slapd-实例/ldif 目录中以存储 LDIF 相关文件中。例 2.3 “LDIF 目录内容” 列出 /ldif 目录的内容。

例 2.3. LDIF 目录内容

European.ldif
Example.ldif
Example-roles.ldif
Example-views.ldif
  • 欧洲.ldif - 包含欧洲字符样本.
  • example.ldif - 示例 LDIF 文件。
  • example-roles.ldif - 是类似于 Example.ldif 的示例 LDIF 文件,但它使用角色和服务类服务而不是组来为目录管理员设置访问控制和资源限制。
注意

db2ldifdb2ldif.pl 脚本在实例目录中导出的 LDIF 文件存储在 /var/lib/dirsrv/slapd-实例/ldif 中。

2.2.4. 锁定文件

每个目录服务器实例都包含用于存储锁定相关文件的 /var/lock/dirsrv/slapd-实例 目录。以下是 锁定 目录内容的示例列表。

例 2.4. 锁定目录内容

exports/ imports/ server/

锁定机制控制目录服务器进程可在其中运行多少个副本。例如,如果有一个导入作业,则会将锁定放置在 导入/ 目录中,以防止任何其他 ns-slapd (normal)、ldif2db (另一个导入)或 db2ldif (export)操作运行。如果服务器以正常方式运行,则在 server/ 目录中有一个锁定,这会阻止导入操作(但不导出操作),而导出操作为导出操作,但 exports/ 目录中的锁定允许普通服务器操作,但可防止导入操作。

可用锁定数量可能会影响整个 Directory 服务器性能。锁定数量在 nsslapd-db-locks 属性中设置。调整该值该值会在 性能调优指南中描述

2.2.5. 日志文件

每个目录服务器实例包含一个用于存储日志文件的 /var/log/dirsrv/slapd-实例 目录。以下是 /logs 目录的内容的示例列表。

例 2.5. 日志目录内容

access                  access.20200228-171925  errors
access.20200221-162824  access.rotationinfo     errors.20200221-162824
access.20200223-171949  audit                   errors.rotationinfo
access.20200227-171818  audit.rotationinfo	slapd.stats
  • 访问审计 和错误 日志文件的内容取决于日志配置。
  • slapd.stats 文件是一个内存映射的文件,不能被编辑器读取。它包含 Directory Server SNMP 数据收集组件收集的数据。此数据由 SNMP 子代理读取,以响应 SNMP 属性查询,并告知负责处理 Directory Server SNMP 请求的 SNMP 主代理。

第 7 章 日志文件参考 包含访问、错误和审核日志文件格式及其信息的可靠概述。

2.2.6. PID 文件

当服务器启动并运行时,llaapd-serverID.pidslapd-serverID.startpid 文件会在 /var/run/dirsrv 目录中创建。两个文件都存储服务器的进程 ID。

2.2.7. 备份文件

每个目录服务器实例都包含以下目录和文件来存储与备份相关的文件:

  • /var/lib/dirsrv/slapd-实例/bak - 包含一个带有 实例、时间和日期的目录,如实例 -2020_05_02_16_56_05/,后者又保存数据库备份副本。
  • /etc/dirsrv/slapd-实例/dse_original.ldif - 这是安装时 dse.ldif 配置文件的一个备份副本。