展会信息港展会大全

CentOS 6.2 使用 OpenLDAP
来源:互联网   发布日期:2015-08-20 19:29:21   浏览:1796次  

导读: 由于工作需要,最近简单研究了一下 RedHat ( CentOS )上的 OpenLDAP ,发现6.2的配置和以前的版本,特别是5.*的很不一样。 简介 Linux 发行版中提供的 OpenLDAP 软件按照一个客户机/服务器模型实现了轻量级目录访问协议( LDAP )。 LDAP 的设计目的是提供一...

由于工作需要,最近简单研究了一下RedHat(CentOS)上的OpenLDAP,发现6.2的配置和以前的版本,特别是5.*的很不一样。

简介

Linux 发行版中提供的 OpenLDAP 软件按照一个客户机/服务器模型实现了轻量级目录访问协议(LDAP)。LDAP 的设计目的是提供一种有效的方法来查找和管理信息。OpenLDAP 软件和包提供了创建目录信息树(一个主要进行读操作的数据库)的工具。本文向您展示如何存储用户的帐号信息,并修改身份验证服务来使用 LDAP 获取所需要的信息。内部细节并不重要,因为这些工具可以将数据库的内容以文本格式(LDAP 数据交换格式,LDIF)呈现在您的面前。

LDAP 信息被组织成属性和值的组合,称为 条目(entry)。条目可能会具有必须的属性或可选属性。一个条目的属性必须要遵循 /etc/openldap/schema/ 模式文件中定义的规则。规则包含在条目的 objectclass 属性中。看一下下面的关系,我们可以看出posixAccount objectclass 中包含了密码文件条目的信息(posixAccount userPassword 是文件条目的 base64 编码)。

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

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

LDAP 为作为容器使用的特殊条目提供了将这些条目组织成树结构的功能。在这个例子中,我们将使用一个容器 People 保存用户帐号信息,使用另外一个容器 Groups 保存组帐号信息。所生成的目录信息树如图 2 所示。

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

用户帐号信息使用的目录信息树

让我们来看一下如何配置 OpenLDAP 服务器,如何将信息从系统文件迁移到 LDAP 目录中,如何配置 OpenLDAP 客户机通过 LDAP 对用户进行身份验证。在使用一个集中的身份验证数据库时,应该通过使用复制技术采用第二个 LDAP 服务器提供高可用性,这样在主服务器出现问题时,就可以使用第二个 LDAP 服务器响应客户机的请求。由于诸如密码之类的身份验证数据会通过网络进行传输,因此希望使用 TSL 协议建立加密通信连接。

配置 LDAP 服务器

我使用 CentOS 6.2 上的包来构建服务器:

openldap-clients-2.4.23-20.el6.x86_64

openldap-2.4.23-20.el6.x86_64

openldap-servers-2.4.23-20.el6.x86_64

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

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

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

OpenLDAP 包在服务器上安装了很多程序:

守护进程:

slapd:主 LDAP 服务器

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

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

ldapadd:打开一个到 LDAP 服务器的连接,绑定、修改或增加条目

dapsearch:打开一个到 LDAP 服务器的连接,绑定并使用指定的参数进行搜索

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

slapadd:将以LDAP目录交换格式(LDIF)指定的条目添加到 LDAP 数据库中slapcat:打开 LDAP 数据库,并将对应的条目输出为 LDIF 格式

对于RH5.*来说,OpenLDAP的主要服务器配置文件是 /etc/openldap/slapd.conf。slapd.conf 文件中包括一系列全局配置选项。但是至少CentOS6.2的配置文件已经换地方了,找了很久才找到这篇《Directory Servers》,我们可以转换以前的slapd.conf为最新的格式:

~]# slaptest -f /etc/openldap/slapd.conf -F /etc/openldap/slapd.d/

CentOS (RedHat) 6.2 使用 OpenLDAP 管理用户帐号

具体设置可以参考《Directory Servers》。如果只是简单的测试,其实需要更改的也很少:

CentOS (RedHat) 6.2 使用 OpenLDAP 管理用户帐号

至于设置启动运行级别及启动ldap服务,比较简单,此处略去不讲。

迁移密码和 shadow 信息

我的安装包里貌似没有MigrationTools,也懒得去装,因此以下LDIF 全部为手工编写:

base.ldif 条目:

[root@OpenLDAP-Server slapd.d]# cat base.ldif

dn: dc=vnxldap, dc=com dc: vnxldap

description: LDAP Admin

objectClass: dcobject

objectClass: organizationalUnit

ou: rootobject

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

objectClass: top objectClass: organizationalUnit

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

objectClass: top objectClass: organizationalUnit

迁移 ldapuser 信息:

[root@OpenLDAP-Server slapd.d]# grep ldapuser /etc/passwd

ldapuser:x:500:500::/home/ldapuser:/bin/bash

[root@OpenLDAP-Server slapd.d]# cat passwd.ldif

dn: uid=ldapuser,ou=People,dc=vnxldap,dc=com uid: ldapuser

cn: ldapuser

objectClass: account

objectClass: posixAccount

objectClass: top objectClass: shadowAccount

userPassword: {SSHA}oVzczxYaRDM6RrPNZhScAII6RH2Y7333

shadowLastChange: 13048 shadowMax: 99999 shadowWarning: 7 loginshell: /bin/bash

uidNumber: 500 gidNumber: 500 homeDirectory: /home/ldapuser

gecos: ldapuser

迁移 ldapuser 组:

[root@OpenLDAP-Server slapd.d]# grep ldapuser /etc/group

ldapuser:x:500: [root@OpenLDAP-Server slapd.d]# cat group.ldif

dn: cn=ldapuser, ou=Group,dc=vnxldap,dc=com objectClass:posixGroup

objectClass:top cn: ldapuser

userpassword: {crypt}x

gidNumber:500

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

[root@OpenLDAP-Server slapd.d]# ldapadd -x -D cn=Manager,dc=vnxldap,dc=com -w 123456 -f base.ldif [root@OpenLDAP-Server slapd.d]# ldapadd -x -D cn=Manager,dc=vnxldap,dc=com -w 123456 -f group.ldif [root@OpenLDAP-Server slapd.d]# ldapadd -x -D cn=Manager,dc=vnxldap,dc=com -w 123456 -f passwd.ldif

配置 LDAP 客户机

用来设置客户机包括:

nss_ldap-226-6:包括两个 LDAP 访问客户机:nss_ldap 和 pam_ldap

nss_ldap 是一组 C 库扩展,它允许 LDAP 目录服务器用作一个用户和组信息的主源

pam_ldap 是一个 Linux-PAM 模块,它支持身份验证功能

LDAP 身份验证要想正确地工作,需要配置两个服务:系统命名服务和身份验证服务。

系统命名服务(NSS)需要配置为使用 LDAP 来解析诸如用户和组帐号之类的资源。例如,在运行命令 ls -l 时,如果某个文件 inode 给出文件的所有者是 “user 501”,那么命名服务就需要将 “uid 501” 解析成用户名,并在 ls 命令输出结果中输出。通常来说,这是通过查找 /etc/passwd 文件中的所有用户帐号实现的。由于用户现在都存储在 LDAP 目录中,因此系统需要配置成同时对 passwd 文件和 LDAP 目录中的帐号进行解析。这种功能是通过 /usr/lib/libnss_ldap.so 库提供的。

身份验证服务是实际向 LDAP 验证用户身份的服务。可插入身份验证模块(PAM)提供了本地 Linux 身份验证服务。下面我们将配置 PAM 先对本地的 /etc/passwd 文件检查用户帐号,然后再对 LDAP 服务器进行检查。PAM LDAP 模块可以用来将身份验证重定向到 LDAP 目录上。/lib/security/pam_ldap.so PAM 模块提供了 LDAP 身份验证功能。

身份验证本身是由 PAM 程序执行的,它从身份验证候选机制中获取用户名,将其绑定到 OpenLDAP 服务器上,检索与这个 uid 条目(用户名条目)相关的 DN;从身份验证候选机制中获取密码,然后使用这个 DN 和密码试图将其绑定到 OpenLDAP 服务器上。如果绑定成功,PAM 会报告说这个用户已经成功通过了 pam_ldap.so 提供的身份验证测试。根据 PAM 的配置不同,在用户看到命令行提示符之前可能会执行其他测试。

我们可以采用两种方法来配置LDAP客户机。一种快速而简单的方法是运行/usr/sbin/authconfig-gtk,并在两个屏幕中输入信息。另外一种方法是通过编辑客户机 LDAP配置文件/etc/ldap.conf,然后修改 /etc/nsswitch.conf、/etc/sysconfig/authconfig 和 /etc/pam.d/system-auth。

首先让我们来看一下如何运行 authconfig-gtk:

发现 Redhat 5 和CentOS 6 又不一样,以下是Redhat 5的界面:

CentOS (RedHat) 6.2 使用 OpenLDAP 管理用户帐号

CentOS (RedHat) 6.2 使用 OpenLDAP 管理用户帐号

RedHat 5测试通过:

CentOS (RedHat) 6.2 使用 OpenLDAP 管理用户帐号

以下是CentOS 6界面:《参考Redhat 官网》

Launching the Authentication Configuration Tool UI

To open the Authentication Configuration Tool:

Open the System.

Select the Administration menu.

Select the Authentication item.

CentOS (RedHat) 6.2 使用 OpenLDAP 管理用户帐号

Alternatively, run the system-config-authentication command。

CentOS (RedHat) 6.2 使用 OpenLDAP 管理用户帐号

上来先来个红色警告,一定要强行使用TLS验证或HTTS:

CentOS (RedHat) 6.2 使用 OpenLDAP 管理用户帐号

那就选择TLS验证好了,下面也选择LDAP 密码(即简单密码),又报错:

CentOS (RedHat) 6.2 使用 OpenLDAP 管理用户帐号

命令行也不行:

[root@OpenLDAP-Client security]# authconfig --enableldap --enableldapauth --ldapserver=10.32.106.127 --ldapbasedn= dc=vnxldap,dc=com --update

authconfig: Authentication module /lib64/security/pam_ldap.so is missing. Authentication process might not work correctly.

那就安装pam_ldap,此处略去几十个字。

继续往后走,还是登陆不了,《LDAP Authentication On Red Hat Enterprise 6》指出还得启动nslcd及安装nss-pam-ldapd。The nss-pam-ldapd package allows LDAP directory servers to be used as a primary source of name service information. (Name service information typically includes users, hosts, groups, and other such data historically stored in flat files or NIS.)

好,那就再安装nss-pam-ldapd:

[root@OpenLDAP-Client ~]# service nslcd status

nslcd (pid 2451) is running...

Authentication Configuration Tool UI高级设置:

CentOS (RedHat) 6.2 使用 OpenLDAP 管理用户帐号

尝试LDAP登陆又报错:

[root@OpenLDAP-Client ~]# tail -f /var/log/messages

May 13 20:01:01 OpenLDAP-Client nslcd[2451]: [8e1f29] ldap_start_tls_s() failed: Protocol error (uri= ldap://10.32.106.127/ ) May 13 20:01:01 OpenLDAP-Client nslcd[2451]: [8e1f29] failed to bind to LDAP server ldap://10.32.106.127/: Protocol error

May 13 20:01:01 OpenLDAP-Client nslcd[2451]: [8e1f29] no available LDAP server found

几番测试死活不行,遂直接改成第二张方案,即编辑客户机文件

LDAP 配置文件 /etc/openldap/ldap.conf

/etc/nsswitch.conf

/etc/sysconfig/authconfig

/etc/pam.d/system-auth

1. /etc/openldap/ldap.conf:

PAM 和 NSS 模块使用的基本配置文件是 /etc/openldap/ldap.conf。host 选项指定 LDAP 服务器,base 选项指定这个目录使用的 DN。

-bash-3.2$$ cat /etc/openldap/ldap.conf

URI ldap://10.32.106.127/ BASE dc=vnxldap,dc=com

TLS_CACERTDIR /etc/openldap/cacerts

2. /etc/nsswitch.conf

要让 NSS 服务使用 OpenLDAP 服务器,需要将 “ldap” 添加到 /etc/nsswitch.conf 文件的 passwd、shadow 和 group 行中,如下所示:

passwd: files ldap

shadow: files ldap

group: files ldap

3. /etc/sysconfig/authconfig

用来跟踪特定身份验证机制是否已经启用的文件是 /etc/sysconfig/authconfig。我们可以希望以下条目的值都是 “yes”:

-bash-3.2$$ cat /etc/sysconfig/authconfig

USELDAP=yes

USELDAPAUTH=yes

USEMD5=yes

USESHADOW=yes

USELOCAUTHORIZE=yes

4. /etc/pam.d/system-auth

要让 PAM 身份验证服务使用 OpenLDAP 服务器,请将 pam_ldap 行加入到 /etc/pam.d/system-auth 中,位置在对应的标准 pam_unix.so 条目之后:

session required pam_unix.so session optional pam_ldap.so

可还是不行,总是不能使用Red Hat 5.0的明文密码方式,放狗搜索了一下,唯一的解决方法就是在/etc/sysconfig/authconfig 把FORCELEGACY=YES ,我试了下还是不行。总是强行要求使用TLS验证或HTTS。研究了一两个小时,TLS验证或HTTS也不行,算是正式放弃了。网上也有不少人遇到和我同样的问题,没有那么多时间去折腾,6.2的改动实在太大了。

2012-05-17更新:

今天找了个RH的工程师帮我看了下,很快就找到了原因,真是各种囧啊!其实只需要把ssl start_tls在nslcd.conf中注释掉就可以:CentOS (RedHat) 6.2 使用 OpenLDAP 管理用户帐号CentOS (RedHat) 6.2 使用 OpenLDAP 管理用户帐号

最后

如果一切顺利的话(目前在RH 5.0的Client测试通过),用户帐号信息可以从客户机系统中删除并从 LDAP 目录中进行获取了。当用户试图登录客户机系统时,PAM 身份验证服务就会从用户那里获取用户名,在我们的例子中是 ldapuser。PAM 会从 LDAP 服务器中检索识别名(DN)条目 dn: uid=ldapuser, ou=People, dc=vnxldap, dc=com.。PAM 然后会从用户那里获取密码。然后 PAM 试图使用这个 DN 和密码与 LDAP 服务器进行绑定。DN 和密码都以正文文本的格式发送给 LDAP 服务器。在对密码进行散列操作之后,如果服务器可以让用户登录,就会向 PAM 报告说已经成功进行了绑定。成功绑定可以完全满足 PAM 对 pam_ldap 模块汇报成功的标准,如果所有其他 PAM 标准都已经满足了,那么就允许用户登录到系统中。

当 LDAP 服务器对身份验证进行处理时,需要解决另外两个问题才能满足提供可靠安全的身份验证的目标。现在,任何客户机系统不能成功地与 LDAP 服务器进行通信都会阻止用户登录客户机系统。在下一节中我们将看到如何消除这种单点故障,这将显示客户机如何从备份服务器上访问 LDAP 目录。由于用户密码是在网络上以正文文本格式传输的,因此这并不能满足安全身份验证的需求。配置 TLS 安全性 将解决这个问题。

赞助本站

人工智能实验室

相关热词: CentOS 使用 OpenLDAP 由于

AiLab云推荐
推荐内容
展开

热门栏目HotCates

Copyright © 2010-2024 AiLab Team. 人工智能实验室 版权所有    关于我们 | 联系我们 | 广告服务 | 公司动态 | 免责声明 | 隐私条款 | 工作机会 | 展会港