2024年4月2日发(作者:)

简介

Linux 发行版中提供的 OpenLDAP 软件按照一个客户机/服务器模型实现了轻量级目录访问协议

(LDAP)。LDAP 的设计目的是提供一种有效的方法来查找和管理信息。OpenLDAP 软件和包提供了创

建目录信息树(一个主要进行读操作的数据库)的工具。本文向您展示如何存储用户的帐号信息,并

修改身份验证服务来使用 LDAP 获取所需要的信息。内部细节并不重要,因为这些工具可以将数据库

的内容以文本格式(LDAP 数据交换格式,LDIF)呈现在您的面前。

LDAP 信息被组织成属性和值的组合,称为

条目(entry)

。条目可能会具有必须的属性或可选属性。

一个条目的属性必须要遵循 /etc/openldap/schema/ 模式文件中定义的规则。规则包含在条目的

objectclass

属性中。看一下下面的关系,我们可以看出 posixAccount objectclass 中包含了密码

文件条目的信息(posixAccount userPassword 是文件条目的 base64 编码)。

图 1. LDAP 目录条目和 Linux 密码文件之间的关系

文件 /etc/openldap/schema/ 为 posixAccount 对象类中的条目定义了所有的属性和

objectclass。例如,下面是对 uidNumber 属性的描述:

attributetype ( 1.3.6.1.1.1.1.0 NAME 'uidNumber'

DESC 'An integer uniquely identifying a user in an administrative domain'

EQUALITY integerMatch

SYNTAX 1.3.6.1.4.1.1466.115.121.1.27 SINGLE-VALUE )

所有的属性类型都已经定义了,它们被收集到 posixAccount objectclass 中。例如:

objectclass ( 1.3.6.1.1.1.2.0 NAME 'posixAccount' SUP top AUXILIARY

DESC 'Abstraction of an account with POSIX attributes'

MUST ( cn $ uid $ uidNumber $ gidNumber $ homeDirectory )

MAY ( userPassword $ loginShell $ gecos $ description ) )

ldapuser 条目具有一个识别名属性 dn,它用作用户名,并与 userPassword 一起用来在 LDAP 目录

中记录信息,或与 LDAP 目录绑定在一起使用。

LDAP 为作为容器使用的特殊条目提供了将这些条目组织成树结构的功能。在这个例子中,我们将使用

一个容器 People 保存用户帐号信息,使用另外一个容器 Groups 保存组帐号信息。所生成的目录信

息树如图 2 所示。

图 2. 用户帐号信息使用的目录信息树

让我们来看一下如何配置 OpenLDAP 服务器,如何将信息从系统文件迁移到 LDAP 目录中,如何配置

OpenLDAP 客户机通过 LDAP 对用户进行身份验证。在使用一个集中的身份验证数据库时,应该通过使

用复制技术采用第二个 LDAP 服务器提供高可用性,这样在主服务器出现问题时,就可以使用第二个

LDAP 服务器响应客户机的请求。由于诸如密码之类的身份验证数据会通过网络进行传输,因此希望使

用 TSL 协议建立加密通信连接。

我们的 OpenLDAP 服务器和客户机都是虚拟机,上面运行的是 Red Hat Enterprise Linux AS release

4(Nahant Update 1)。在我们的例子中使用了 表 1 所列出的系统。如果想模仿这些例子,请使用

适合您自己的设置。

表 1. 系统网络信息

角色

OpenLDAP 主服务器

OpenLDAP 从服务器

OpenLDAP 客户机

主机名

IP 地址

9.47.64.233

9.47.64.253

9.47.64.251

配置 LDAP 服务器

我们使用 Red Hat Enterprise Linux release 4 Update 1 上的包来构建服务器:

openldap-2.2.13-2:包含 OpenLDAP 配置文件、库和文档

openldap-servers-2.2.13-2:包含 slapd 和 slurpd 服务器、迁移脚本和相关文件

openldap-clients-2.2.13-2:包含客户机程序,用来访问和修改 OpenLDAP 目录