OpenLDAP数据库搭建与数据填充全指南
立即解锁
发布时间: 2025-08-25 00:09:17 阅读量: 2 订阅数: 8 


CentOS Linux基础:企业级Linux的低成本解决方案
# OpenLDAP 数据库搭建与数据填充全指南
## 1. OpenLDAP 模块加载
OpenLDAP 的 `moduleload` 指令可用于指定要使用的模块文件。这些模块文件包含额外的代码,能够为 `slapd` 增添功能并改变其运行方式。不过,这些模块必须位于 `modulepath` 指令所声明的目录中才可访问。
`moduleload` 指令的语法如下:
```plaintext
moduleload target_module
```
其中,`target_module` 是你想要加载的模块名称。例如,加载 SQL 后端的示例代码如下:
```plaintext
moduleload back_sql.la
```
目前,这些条目处于注释状态,OpenLDAP 默认使用的后端库是 `bdb` 格式。若你希望在数据库中使用更高级的后端库,后续可以进行更改。
## 2. LDAP 模式(Schemas)
### 2.1 模式概述
创建 OpenLDAP 服务器的目录,类似于依据一组属性创建对象。例如,以你所穿的衬衫为例,它有尺寸、品牌、颜色和材质等属性。若要为这个衬衫对象创建结构,其方式与创建 LDAP 目录结构并无太大差异。LDAP 目录通过模式使用预定义的属性。
### 2.2 对象类
LDAP 模式包含可用于定义目录结构的属性,这些属性被归类到对象类中。你可以将对象类视为属性的“超类型”。例如,硬件设备的所有者属性为 `owner`,使用说明属性为 `description`,它们都属于 `device` 对象类。
部分对象类在用于创建数据库结构和条目之前,要求你使用特定的属性。这些属性在对象类定义中会用 `MUST` 关键字标记。例如,若要使用 `device` 对象类,就必须使用 `cn`(通用名称)属性,否则 LDAP 服务器会报错并停止数据库操作。
### 2.3 对象类分类
对象类根据其存储数据的方式可分为以下三类:
- **抽象对象类**:作为创建对象类的模板类。`top` 对象类就是一个抽象对象类,所有结构对象类都继承自该类,但并非所有辅助对象类都源自 `top` 对象类。
- **结构对象类**:具有可用于定义数据库结构的属性。你可以使用结构对象类的属性创建可用于目录数据库的条目,例如 `person` 对象类。
- **辅助对象类**:其属性仅用于为正在创建的结构提供补充细节。若你需要在数据库中维护可选的安全证书信息,可以使用 `certificationAuthority` 辅助对象类。
### 2.4 常用模式加载
若要创建目录,可使用 `include` 指令加载可用的对象类和属性。以下是默认加载的常用模式:
```plaintext
include /etc/openldap/schema/core.schema
include /etc/openldap/schema/cosine.schema
include /etc/openldap/schema/inetorgperson.schema
include /etc/openldap/schema/nis.schema
```
若要了解更多可用属性及其对象类,可查看 `/etc/openldap` 目录。
## 3. 创建第一个数据库
### 3.1 数据库配置指令
安装过程中包含的 `slapd.conf` 文件已配置了一个练习数据库,相关配置如下:
```plaintext
database bdb
suffix "dc=my-domain,dc=com"
rootdn "cn=Manager,dc=my-domain,dc=com"
```
OpenLDAP 使用 `database`、`suffix` 和 `rootdn` 这三个指令在服务器上创建数据库。你可以根据组织的需求,使用这三个指令创建额外的数据库。
### 3.2 指令详细说明
- **database 指令**:用于声明 `slapd` 将使用的数据库定义的开始,它以后端类型作为参数,后端是 `slapd` 用于存储数据库数据的存储格式。常见的后端类型包括 `bdb`、`hdb` 和 `sql`。
- `bdb` 类型:使用 Berkeley 数据库。
- `hdb` 类型:使用分层数据库,它是 `bdb` 的改进版本,允许 `slapd` 在数据库内进行子树重命名。
- `sql` 类型:允许 `slapd` 将 LDAP 信息作为子树发送到关系数据库管理系统(RDBMS)。若要了解更多可用的后端类型,可查看 `slapd.conf` 的手册页或访问 [相关文档](http://www.openldap.org/doc/admin24/backends.html)。
- **suffix 指令**:用于指定将传递给该数据库后端的查询的专有名称(DNs),可将其视为数据库的名称。正确的命名方式是使用模式文件中对象类的 LDAP 属性。数据库的命名方式类似于域名,这样可以确保数据库的唯一性,同时也便于根据域名关联目录内容。例如,第一个数据库的名称 `my-domain.com` 由两个部分组成,使用了两个 `domainComponent` 属性(`dc`)来赋值。
- **rootdn 指令**:用于告知 OpenLDAP 该数据库中不受访问命令或限制影响的专有名称,此名称标识了该数据库的超级用户,即目录管理员。与关系数据库管理系统(如 PostgreSQL)中的超级用户账户类似,这里使用的 DN 可以对该数据库进行任何操作。`rootdn` 指令使用三个属性:两个 `dc` 属性和一个 `cn` 属性,其中 `cn` 属性保存该数据库超级用户的用户名。
### 3.3 设置目录管理员密码
由于 OpenLDAP 需要安全措施来保护其数据库,你可以通过为 `rootpw` 指令输入值来为目录管理员提供密码。配置文件中已有该条目,但处于注释状态。找到以下行:
```plaintext
# rootpw secret
```
移除 `#` 符号和其后的空格,即可使用 `secret` 作为该数据库目录管理员的密码。若不移除空格,OpenLDAP 将无法正确识别 `rootpw` 指令。
### 3.4 数据库文件存储
数据库文件将根据 `directory` 指令指定的值进行物理存储。这些文件用于 OpenLDAP 引用使用所选后端(`bdb`)编码的 `my-domain.com` 数据库。由于我们使用的是 `bdb` 后端,务必将 `/etc/openldap/DB_CONFIG.example` 文件复制到数据库目录中,并命名为 `DB_CONFIG`:
```bash
cp /etc/openldap/DB_CONFIG.example /var/lib/ldap/DB_CONFIG
```
该文件包含 `bdb` 或 `hdb` 后端进行数据库快速查找所需的常量。若没有该文件,OpenLDAP 会报错并显示以下消息:
```plaintext
bdb_db_o
```
0
0
复制全文
相关推荐







