第 2 章 配置目录数据库

目录由数据库组成,目录树分布在数据库中。本章论述了如何创建 后缀、目录树的分支点,以及如何创建与每个后缀关联的数据库。本章还介绍了如何创建数据库链接来引用远程服务器上的数据库链接,以及如何使用引用将客户端指向目录数据的外部来源。

2.1. 创建和维护后缀

目录树的不同部分可以存储在不同的数据库中,然后这些数据库可以分布到多个服务器上。目录树包含名为节点的分支点。这些节点可以与数据库关联。后缀是与特定数据库关联的目录树的节点。以下是一个简单的目录树:

图 2.1. 具有一个根后缀的目录树

具有一个根后缀的目录树
ou=body 后缀以及它下面的所有条目和节点可能存储在一个数据库中,而 ou=groups 后缀在另一个数据库中,而 ou=contractors 后缀也位于另一个数据库中。

2.1.1. 创建后缀

root 后缀 是子修复的父项。它可以是为目录服务器设计的一个更大的树的一部分。sub-suffix 是根后缀下的分支。root 和 sub-suffixes 用于组织目录树的内容。root 和 sub-suffixes 的数据存储在数据库中。

2.1.1.1. 创建根后缀

目录可以包含多个根后缀。例如,一个托管多个网站的互联网服务提供商,一个用于 example.com,另一个用于 redhat.com。在这种情况下,需要两个 root 后缀。与 dc=example,dc=com 命名上下文对应,另一个对应于 dc=redhat,dc=com 命名上下文,如下图所示:

图 2.2. 具有两个根后缀的目录

具有两个根后缀的目录
也可以创建根后缀,从搜索操作中排除目录树的部分。例如,如果示例公司希望从一般 Example 公司目录的搜索中排除其办公室办公室。要实现此操作,目录需要两个 root 后缀。一个根后缀对应于常规示例公司目录树 dc=example,dc=com,一个根后缀对应于其目录树的关联分支 ou=europe,dc=example,dc=com。从客户端应用程序的角度来看,目录树如下所示:

图 2.3. 具有根后缀离线限制的目录搜索操作

具有根后缀离线限制的目录搜索操作
由目录的 dc=example,dc=com 分支上的客户端应用程序执行的搜索不会返回来自目录的 ou=europe,dc=example,dc=com 分支中的条目,因为它是一个单独的根后缀。
2.1.1.1.1. 使用命令行创建根后缀
使用 dsconf backend create 命令创建一个新的 root 后缀:
  1. 可选:识别已在使用的后缀和后端数据库:
    # dsconf -D "cn=Directory Manager" ldap://server.example.com backend suffix list
    dc=example,dc=com (userroot)
    括号中的名称是存储对应后缀数据的后端数据库。在下一步中创建 root 后缀时,您无法使用现有数据库名称。
  2. example 后端数据库中创建 dc=example,dc=net root 后缀:
    # dsconf -D "cn=Directory Manager" ldap://server.example.com backend create \
         --suffix="dc=example,dc=net" --be-name="example"
2.1.1.1.2. 使用 Web 控制台创建根后缀
使用 Web 控制台创建新的 root 后缀:
  1. 在 web 控制台中打开 Directory Server 用户界面。请参阅 第 1.4 节 “使用 Web 控制台登录到目录服务器”
  2. 选择实例。
  3. 打开 Database 菜单。
  4. Create Suffix
  5. 输入后缀 DN 和后端名称。例如:
  6. 选择 Create The Top Suffix Entry
  7. Create Suffix

2.1.1.2. 创建子修复

在某些情况下,管理员希望将目录树的分支存储在单独的数据库中。例如,如果管理员创建 ou=europe,dc=example,dc=com 条目,则此后缀存储在单独的数据库中。同时,dc=example,com root 后缀及其所有子条目(除 ou=europe、dc=example、dc=com 和 subentries 除外)也存储在单独的数据库中。

图 2.4. 带有子后缀的目录树

带有子后缀的目录树
2.1.1.2.1. 使用命令行创建子修复
使用 dsconf backend create 命令创建一个新的子修复。例如,在 dc=example,dc=com root 后缀下的一个新的、名为 people 的数据库中创建 ou=People,dc=example,dc=com 子后缀:
  1. 可选:识别已在使用的后缀和后端数据库:
    # dsconf -D "cn=Directory Manager" ldap://server.example.com backend suffix list
    dc=example,dc=com (userroot)
    括号中的名称是存储对应后缀数据的后端数据库。在下一步中创建子命令时,您无法使用现有数据库名称。
  2. 创建子命令。例如,要创建 ou=People,dc=example,dc=com 子组件 以及示例 后端数据库,请输入:
    # dsconf -D "cn=Directory Manager" ldap://server.example.com backend create \
         --suffix="ou=People,dc=example,dc=com" --be-name="example" \
         --parent-suffix="dc=example,dc=com"
2.1.1.2.2. 使用 Web 控制台创建子修复
使用 Web 控制台创建新的子修复:
  1. 在 web 控制台中打开 Directory Server 用户界面。请参阅 第 1.4 节 “使用 Web 控制台登录到目录服务器”
  2. 选择实例。
  3. 打开 Database 菜单。
  4. 选择您要创建子跟踪的后缀,单击 Suffix Tasks,然后选择 Create Sub-Suffix
  5. 输入子修复 DN 和后端名称。例如:
  6. 选择 Create The Top Sub-Suffix Entry
  7. Create Sub-Suffix

2.1.2. 维护后缀

2.1.2.1. 查看默认命名上下文

命名上下文与后缀类似,它是命名目录条目的 root 结构。根据目录和数据结构,可以有多个命名上下文。例如,标准目录服务器配置具有用户后缀,如 dc=example,dc=com,以及 cn=config 中的配置后缀。
许多目录树有多个命名上下文,用于不同类型的条目或逻辑数据划分。访问目录服务器的客户端可能不知道他们需要使用哪些命名上下文。目录服务器有一个服务器配置属性,如果客户端没有其他命名上下文配置,则向客户端发送默认命名上下文。
默认命名上下文在 cn=config 中的 nsslapd-defaultnamingcontext 属性中设置。这个值被传播到 root DSE (Directory Server Agent Service Entry),可通过检查根 DSE 中的 默认的namingcontext 属性来匿名查询客户端:
# ldapsearch -p 389 -h server.example.com -x -b "" -s base | egrep namingcontext
namingContexts: dc=example,dc=com
namingContexts: dc=example,dc=net
namingContexts: dc=redhat,dc=com
defaultnamingcontext: dc=example,dc=com
重要
为保持配置一致性,请不要从 nsslapd-allowed-to-delete-attrs 列表中删除 nsslapd-defaultnamingcontext 属性。
默认情况下,nsslapd-defaultnamingcontext 属性包含在可以被删除的属性列表中,在 nsslapd-allowed-to-delete-attrs 属性中。这允许删除当前的默认后缀,然后相应地更新服务器配置。
如果出于某种原因,nsslapd-defaultnamingcontext 属性会从可以删除的配置属性列表中删除,则不会保留对该属性的更改。如果删除了默认后缀,则该更改无法传播到服务器配置。这意味着 nsslapd-defaultnamingcontext 属性保留旧信息,而不是为空(removed),这是正确的和当前的配置。

2.1.2.2. 禁用后缀

在某些情况下,需要禁用目录中的后缀。如果禁用后缀,客户端无法再访问与后缀相关的数据库内容。
2.1.2.2.1. 使用命令行禁用后缀
要使用命令行禁用后缀,请将后端数据库名称传递给 dsconf 后端后缀 set --disable 命令。例如,禁用 o=test 后缀:
  1. 显示后缀及其对应的后端:
    # dsconf -D "cn=Directory Manager" ldap://server.example.com backend suffix list
    dc=example,dc=com (userroot)
    o=test (test_database)
    这个命令显示每个后缀旁的后端数据库名称。下一步需要后缀的数据库名称。
  2. 禁用后缀:
    # dsconf -D "cn=Directory Manager" ldap://server.example.com backend \
         suffix set --disable "test_database"

2.1.2.3. 删除后缀

如果不再需要后缀,管理员可以将其从数据库中删除。
警告
删除后缀也会删除与该后缀关联的所有数据库条目和复制信息。
2.1.2.3.1. 使用命令行删除后缀
要使用命令行删除后缀,请使用 dsconf backend delete 命令。例如,要删除 o=test 后缀:
  1. 显示后缀及其对应的后端:
    # dsconf -D "cn=Directory Manager" ldap://server.example.com backend suffix list
    dc=example,dc=com (userroot)
    o=test (test_database)
    这个命令显示每个后缀旁的后端数据库名称。下一步需要后缀的数据库名称。
  2. 删除后端数据库和对应的后缀:
    # dsconf -D "cn=Directory Manager" ldap://server.example.com backend delete test_database
    Deleting Backend cn=test_database,cn=ldbm database,cn=plugins,cn=config :
    Type 'Yes I am sure' to continue: Yes I am sure
    The database, and any sub-suffixes, were successfully deleted
2.1.2.3.2. 使用 Web 控制台删除后缀
使用 Web 控制台删除后缀:
  1. 在 web 控制台中打开 Directory Server 用户界面。请参阅 第 1.4 节 “使用 Web 控制台登录到目录服务器”
  2. 选择实例。
  3. 打开 Database 菜单。
  4. 选择后缀,单击 后缀任务,然后选择 Delete Suffix。
  5. 单击 Yes 以确认。