使用 OpenLDAP 集中管理用户帐号

2019-01-03 15:51

使用轻量级目录访问协议(LDAP)构建集中的身份验证系统可以减少管理成本,增强安全性,避免数据复制的问题,并提高数据的一致性。随着 Linux? 的不断成熟,已经出现了很多工具用来简化用户帐号信息到 LDAP 目录的迁移。还开发了一些工具用来在客户机和目录服务器之间启用加密通信配置,并通过复制提供容错性。本文将向您展示如何配置服务器和客户机在 Red Hat Linux 上使用 OpenLDAP。

简介

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/nis.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 客户机

配置 LDAP 服务器

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

? ?

主机名

dhcp64-233.ibm.com dhcp64-253.ibm.com dhcp64-251.ibm.com

IP 地址 9.47.64.233 9.47.64.253 9.47.64.251

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

openldap-servers-2.2.13-2:包含 slapd 和 slurpd 服务器、迁移脚本和相关文件 ? openldap-clients-2.2.13-2:包含客户机程序,用来访问和修改 OpenLDAP 目录 OpenLDAP 包在服务器上安装了很多程序:

? 守护进程:

o slapd:主 LDAP 服务器

o slurpd:负责与复制 LDAP 服务器保持同步的服务器

?

对网络上的目录进行操作的客户机程序。下面这两个程序是一对儿:

o ldapadd:打开一个到 LDAP 服务器的连接,绑定、修改或增加条目 o ldapsearch:打开一个到 LDAP 服务器的连接,绑定并使用指定的参数进

?

行搜索

对本地系统上的数据库进行操作的几个程序:

o slapadd:将以 LDAP 目录交换格式(LDIF)指定的条目添加到 LDAP 数

据库中

o slapcat:打开 LDAP 数据库,并将对应的条目输出为 LDIF 格式

OpenLDAP 的主要服务器配置文件是 /etc/openldap/slapd.conf。本例所使用的完整 slapd.conf 文件如 清单 18 所示。slapd.conf 文件中包括一系列全局配置选项,它们作为一个整体应用到 slapd 上面,后面是包含数据库特有信息的数据库后端定义。如果一行内容是以空格开始的,就认为它是上一行的延续。空行和以 “#” 字符开头的注释行都会被忽略。 如果您正把本文当作练习来做,那就可以按照下面指定的方式进行修改,从而启动 LDAP 服务器。一旦确认服务器正常工作之后,就可以添加复制功能,然后再添加安全性支持。首先是全局配置信息段的设置。其中每个选项的值都是我们想要的。

正如上面介绍的一样,信息被组织成属性和值的组合,称为条目。条目属性必须遵循的规则是使用 objectclass 专用属性进行组织的,这可以在 /etc/openldap/schema/ 模式文件中找到。对于身份验证来说,需要使用在 nis.schema 中定义的 posixAccount 和 shadowAccount objectclasses:

include /etc/openldap/schema/nis.schema

loglevel 行设置的是日志选项。可以将其设置为这样的级别:调试语句和操作统计信息都会被记录到 /var/log/slapd.log 中。日志级别是累加的:296 = 256 日志连接/操作/结果 + 32 搜索过滤器处理 + 8 连接管理:

loglevel 296

日志信息会被记录到 syslogd LOG_LOCAL4 机制中。还需要将下面的内容添加到 /etc/syslog.conf 中,并让 syslogd 重新读取自己的配置文件:

local4.debug /var/log/slapd.log

access 行定义了谁可以访问目录中的内容。我们希望用户可以修改自己的密码,并更新自己的 shadow 信息来反映密码的变化。希望身份验证程序能够检索用户的密码。还希望用户能够读取所有其他条目。注意密码条目是不可读的,shadow 属性的惟一用处就是管理密码的过期问题。

access to attrs=shadowLastChange,userPassword by self write by * auth

access to *

by * read

接下来,在 database 部分,要定义下面的内容。 使用新的 bdb 后端数据库:

database bdb

指定后端数据库需要响应的查询的 DN 前缀。为了确保惟一性,根前缀应该从自己的网络域名构建出来。在本例的情况中,它是 .dc=svc,dc=beaverton,dc=ibm,dc=com.,但是在下面的例子中我们对其进行了简化: suffix \

指定管理 DN,它不用于访问控制或限制数据库的操作。也不需要在目录中为这个 DN 指定一个条目。为具有 rootpw 密码的管理员使用 DN 可以跳过 ACL 规则中的所有访问控制:

rootdn \ rootpw {MD5}ijFYNcSNctBYg

这就是我们现在想要设置的选项。稍后将返回 slapd.conf 文件来配置复制,然后在配置安全性。

现在,我们希望将数据添加到目录中,并确认可以访问这些信息。要实现这种功能,需要配置服务器来使用 ldap 客户机工具,例如 ldapadd 和 ldapsearch。ldap 客户机工具的配置文件是 /etc/openldap/ldap.conf。我们使用的这个文件的完整列表如本文末尾的 清单 19 所示。要在 ldap 服务器上运行这些工具,只需要将该行修改成下面的内容: BASE dc=ibm,dc=com

设置启动脚本在级别 2、3 和 5 时启动 LDAP:

清单 1. 设置启动运行级别 # chkconfig --levels 235 ldap on

从命令行中启动服务:

清单 2. 启动服务 # service ldap start Starting slapd: [ OK ]

OpenLDAP 守护进程 slapd 应该已经运行了:

清单 3. 检查服务正在运行 # ps -ef | grep slap ldap 13521 1 0 Oct24 ? 00:00:00 /usr/sbin/slapd -u ldap -h ldap:/// ldaps:///

ldapsearch -x 命令应该可以成功完成,但不会返回任何数据。

迁移密码和 shadow 信息

Red Hat 所提供的 openldap-servers 包包含 PADL Software Pty Ltd. 公司的 MigrationTools 工具。我们将使用这些工具将数据从 Linux 系统文件(例如 /etc/group 和 /etc/password)转换成 LDAP LDIF 格式,这是数据库信息的一种文本格式的表示。这种格式是行界定、冒号分隔的属性-值对。

有一组 Perl 脚本被安装到 /usr/share/openldap/migration/ 中执行迁移。这些 Perl 脚本的配置信息包含在 migrate_common.ph 文件的开头。对于我们的目的来说,只需要修改命名前缀的变量来使用条目的识别名就足够了,如下所示:

$DEFAULT_BASE = \

在进行这些修改之后,请运行脚本 migrate_base.pl,它会创建根项,并为 Hosts、Networks、Group 和 People 等创建低一级的组织单元:

清单 4. 运行 migrate_base.pl # migrate_base.pl > base.ldif

编辑 base.ldif,删除除下面之外的所有条目:

清单 5. base.ldif 条目

# cat base.ldif

dn: dc=ibm,dc=com dc: ibm

objectClass: top objectClass: domain

dn: ou=People,dc=ibm,dc=com ou: People

objectClass: top

objectClass: organizationalUnit

dn: ou=Group,dc=ibm,dc=com ou: Group

objectClass: top

objectClass: organizationalUnit

在 LDAP 服务器上,使用 OpenLDAP 客户机工具 ldapadd 将以下条目插入到数据库中。简单身份验证必须要使用 -x 选项指定。在 slapd.conf 中定义的 rootdn 身份验证识别名是 “cn=Manager,dc=ibm,dc=com”。对于简单身份验证来说,必须使用密码。选项 -W 强制提示输入密码。这个密码就是在 slapd.conf 文件中指定的 rootpw 参数的值。包含这些条目的 LDIF 文件是使用 -f 选项指定的:

清单 6. 使用 ldapadd 插入条目 # ldapadd -x -D \

接下来,从 /etc/group 中迁移 ldapuser 组:

清单 7. 迁移 ldapuser 组 # grep ldapuser /etc/group > group.in # ./migrate_group.pl group.in > group.ldif # cat group.ldif


使用 OpenLDAP 集中管理用户帐号.doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:中国水晶装饰品行业市场专项调查与投资前景预测分析报告2016-202

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: