使用 OpenLDAP 集中管理用户帐号.docx

上传人:b****5 文档编号:7652369 上传时间:2023-01-25 格式:DOCX 页数:25 大小:267.33KB
下载 相关 举报
使用 OpenLDAP 集中管理用户帐号.docx_第1页
第1页 / 共25页
使用 OpenLDAP 集中管理用户帐号.docx_第2页
第2页 / 共25页
使用 OpenLDAP 集中管理用户帐号.docx_第3页
第3页 / 共25页
使用 OpenLDAP 集中管理用户帐号.docx_第4页
第4页 / 共25页
使用 OpenLDAP 集中管理用户帐号.docx_第5页
第5页 / 共25页
点击查看更多>>
下载资源
资源描述

使用 OpenLDAP 集中管理用户帐号.docx

《使用 OpenLDAP 集中管理用户帐号.docx》由会员分享,可在线阅读,更多相关《使用 OpenLDAP 集中管理用户帐号.docx(25页珍藏版)》请在冰豆网上搜索。

使用 OpenLDAP 集中管理用户帐号.docx

使用OpenLDAP集中管理用户帐号

使用轻量级目录访问协议(LDAP)构建集中的身份验证系统可以减少管理成本,增强安全性,避免数据复制的问题,并提高数据的一致性。

随着Linux®的不断成熟,已经出现了很多工具用来简化用户帐号信息到LDAP目录的迁移。

还开发了一些工具用来在客户机和目录服务器之间启用加密通信配置,并通过复制提供容错性。

本文将向您展示如何配置服务器和客户机在RedHatLinux上使用OpenLDAP。

简介

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

LDAP的设计目的是提供一种有效的方法来查找和管理信息。

OpenLDAP软件和包提供了创建目录信息树(一个主要进行读操作的数据库)的工具。

本文向您展示如何存储用户的帐号信息,并修改身份验证服务来使用LDAP获取所需要的信息。

内部细节并不重要,因为这些工具可以将数据库的内容以文本格式(LDAP数据交换格式,LDIF)呈现在您的面前。

LDAP信息被组织成属性和值的组合,称为条目(entry)。

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

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

规则包含在条目的objectclass属性中。

看一下下面的关系,我们可以看出posixAccountobjectclass中包含了密码文件条目的信息(posixAccountuserPassword是文件条目的base64编码)。

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

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

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

attributetype(1.3.6.1.1.1.1.0NAME'uidNumber'

DESC'Anintegeruniquelyidentifyingauserinanadministrativedomain'

EQUALITYintegerMatch

SYNTAX1.3.6.1.4.1.1466.115.121.1.27SINGLE-VALUE)

所有的属性类型都已经定义了,它们被收集到posixAccountobjectclass中。

例如:

objectclass(1.3.6.1.1.1.2.0NAME'posixAccount'SUPtopAUXILIARY

DESC'AbstractionofanaccountwithPOSIXattributes'

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服务器和客户机都是虚拟机,上面运行的是RedHatEnterpriseLinuxASrelease4(NahantUpdate1)。

在我们的例子中使用了表1所列出的系统。

如果想模仿这些例子,请使用适合您自己的设置。

表1.系统网络信息

角色

主机名

IP地址

OpenLDAP主服务器

dhcp64-

9.47.64.233

OpenLDAP从服务器

dhcp64-

9.47.64.253

OpenLDAP客户机

dhcp64-

9.47.64.251

回页首

配置LDAP服务器

我们使用RedHatEnterpriseLinuxrelease4Update1上的包来构建服务器:

∙openldap-2.2.13-2:

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

∙openldap-servers-2.2.13-2:

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

∙openldap-clients-2.2.13-2:

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

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

∙守护进程:

oslapd:

主LDAP服务器

oslurpd:

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

∙对网络上的目录进行操作的客户机程序。

下面这两个程序是一对儿:

oldapadd:

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

oldapsearch:

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

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

oslapadd:

将以LDAP目录交换格式(LDIF)指定的条目添加到LDAP数据库中

oslapcat:

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

OpenLDAP的主要服务器配置文件是/etc/openldap/slapd.conf。

本例所使用的完整slapd.conf文件如清单18所示。

slapd.conf文件中包括一系列全局配置选项,它们作为一个整体应用到slapd上面,后面是包含数据库特有信息的数据库后端定义。

如果一行内容是以空格开始的,就认为它是上一行的延续。

空行和以“#”字符开头的注释行都会被忽略。

如果您正把本文当作练习来做,那就可以按照下面指定的方式进行修改,从而启动LDAP服务器。

一旦确认服务器正常工作之后,就可以添加复制功能,然后再添加安全性支持。

首先是全局配置信息段的设置。

其中每个选项的值都是我们想要的。

正如上面介绍的一样,信息被组织成属性和值的组合,称为条目。

条目属性必须遵循的规则是使用objectclass专用属性进行组织的,这可以在/etc/openldap/schema/模式文件中找到。

对于身份验证来说,需要使用在nis.schema中定义的posixAccount和shadowAccountobjectclasses:

include/etc/openldap/schema/nis.schema

loglevel行设置的是日志选项。

可以将其设置为这样的级别:

调试语句和操作统计信息都会被记录到/var/log/slapd.log中。

日志级别是累加的:

296=256日志连接/操作/结果+32搜索过滤器处理+8连接管理:

loglevel296

日志信息会被记录到syslogdLOG_LOCAL4机制中。

还需要将下面的内容添加到/etc/syslog.conf中,并让syslogd重新读取自己的配置文件:

local4.debug/var/log/slapd.log

access行定义了谁可以访问目录中的内容。

我们希望用户可以修改自己的密码,并更新自己的shadow信息来反映密码的变化。

希望身份验证程序能够检索用户的密码。

还希望用户能够读取所有其他条目。

注意密码条目是不可读的,shadow属性的惟一用处就是管理密码的过期问题。

accesstoattrs=shadowLastChange,userPassword

byselfwrite

by*auth

accessto*

by*read

接下来,在database部分,要定义下面的内容。

使用新的bdb后端数据库:

databasebdb

指定后端数据库需要响应的查询的DN前缀。

为了确保惟一性,根前缀应该从自己的网络域名构建出来。

在本例的情况中,它是.dc=svc,dc=beaverton,dc=ibm,dc=com.,但是在下面的例子中我们对其进行了简化:

suffix"dc=ibm,dc=com"

指定管理DN,它不用于访问控制或限制数据库的操作。

也不需要在目录中为这个DN指定一个条目。

为具有rootpw密码的管理员使用DN可以跳过ACL规则中的所有访问控制:

rootdn"cn=Manager,dc=ibm,dc=com"

rootpw{MD5}ijFYNcSNctBYg

这就是我们现在想要设置的选项。

稍后将返回slapd.conf文件来配置复制,然后在配置安全性。

现在,我们希望将数据添加到目录中,并确认可以访问这些信息。

要实现这种功能,需要配置服务器来使用ldap客户机工具,例如ldapadd和ldapsearch。

ldap客户机工具的配置文件是/etc/openldap/ldap.conf。

我们使用的这个文件的完整列表如本文末尾的清单19所示。

要在ldap服务器上运行这些工具,只需要将该行修改成下面的内容:

BASEdc=ibm,dc=com

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

清单1.设置启动运行级别

#chkconfig--levels235ldapon

从命令行中启动服务:

清单2.启动服务

#serviceldapstart

Startingslapd:

[OK]

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

清单3.检查服务正在运行

#ps-ef|grepslap

ldap1352110Oct24?

00:

00:

00/usr/sbin/slapd-uldap-hldap:

///ldaps:

///

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

回页首

迁移密码和shadow信息

RedHat所提供的openldap-servers包包含PADLSoftwarePtyLtd.公司的MigrationTools工具。

我们将使用这些工具将数据从Linux系统文件(例如/etc/group和/etc/password)转换成LDAPLDIF格式,这是数据库信息的一种文本格式的表示。

这种格式是行界定、冒号分隔的属性-值对。

有一组Perl脚本被安装到/usr/share/openldap/migration/中执行迁移。

这些Perl脚本的配置信息包含在migrate_common.ph文件的开头。

对于我们的目的来说,只需要修改命名前缀的变量来使用条目的识别名就足够了,如下所示:

$DEFAULT_BASE="dc=ibm,dc=com"

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

清单4.运行migrate_base.pl

#migrate_base.pl>base.ldif

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

清单5.base.ldif条目

#catbase.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"cn=Manager,dc=ibm,dc=com"-W-fbase.ldif

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

清单7.迁移ldapuser组

#grepldapuser/etc/group>group.in

#./migrate_group.plgroup.in>group.ldif

#catgroup.ldif

dn:

cn=ldapuser,ou=Group,dc=ibm,dc=com

objectClass:

posixGroup

objectClass:

top

cn:

ldapuser

userPassword:

{crypt}x

gidNumber:

500

#ldapadd-x-D"cn=Manager,dc=ibm,dc=com"-W-fgroup.ldif

最后,从/etc/passwd和/etc/shadow中迁移ldapuser的信息:

清单8.迁移ldapuser信息

#grepldapuser/etc/passwd>passwd.in

#./migrate_passwd.plpasswd.in>passwd.ldif

#catpasswd.ldif

dn:

uid=ldapuser,ou=People,dc=ibm,dc=com

uid:

ldapuser

cn:

ldapuser

objectClass:

account

objectClass:

posixAccount

objectClass:

top

objectClass:

shadowAccount

userPassword:

{crypt$1$TeOlOcMc$cpQaa0WpLSFRC1HIHW5bt1

shadowLastChange:

13048

shadowMax:

99999

shadowWarning:

7

loginShell:

/bin/bash

uidNumber:

500

gidNumber:

500

homeDirectory:

/home/ldapuser

gecos:

ldapuser

#ldapadd-x-D"cn=Manager,dc=ibm,dc=com"-W-fpasswd.ldif

现在检查已经添加到数据库中的信息。

清单9给出了全部输出结果:

清单9.以LDIF格式填充的OpenLDAP数据库

#ldapsearch-x

#extendedLDIF

#

#LDAPv3

#base<>withscopesub

#filter:

(objectclass=*)

#requesting:

ALL

#

#

dn:

dc=ibm,dc=com

dc:

ibm

objectClass:

top

objectClass:

domain

#People,

dn:

ou=People,dc=ibm,dc=com

ou:

People

objectClass:

top

objectClass:

organizationalUnit

#Group,

dn:

ou=Group,dc=ibm,dc=com

ou:

Group

objectClass:

top

objectClass:

organizationalUnit

#ldapuser,Group,

dn:

cn=ldapuser,ou=Group,dc=ibm,dc=com

objectClass:

posixGroup

objectClass:

top

cn:

ldapuser

gidNumber:

500

#ldapuser,People,

dn:

uid=ldapuser,ou=People,dc=ibm,dc=com

uid:

ldapuser

cn:

ldapuser

objectClass:

account

objectClass:

posixAccount

objectClass:

top

objectClass:

shadowAccount

shadowMax:

99999

shadowWarning:

7

loginShell:

/bin/bash

uidNumber:

500

gidNumber:

500

homeDirectory:

/home/ldapuser

gecos:

test2

#searchresult

search:

2

result:

0Success

#numResponses:

6

#numEntries:

5

回页首

配置LDAP客户机

用来设置客户机的RedHatEnterpriseLinuxrelease4Update1包包括:

∙nss_ldap-226-6:

包括两个LDAP访问客户机:

nss_ldap和pam_ldap

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

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

LDAP身份验证要想正确地工作,需要配置两个服务:

系统命名服务和身份验证服务。

系统命名服务(NSS)需要配置为使用LDAP来解析诸如用户和组帐号之类的资源。

例如,在运行命令ls-l时,如果某个文件inode给出文件的所有者是“user501”,那么命名服务就需要将“uid501”解析成用户名,并在ls命令输出结果中输出。

通常来说,这是通过查找/etc/passwd文件中的所有用户帐号实现的。

由于用户现在都存储在LDAP目录中,因此系统需要配置成同时对passwd文件和LDAP目录中的帐号进行解析。

这种功能是通过/usr/lib/libnss_ldap.so库提供的。

身份验证服务是实际向LDAP验证用户身份的服务。

可插入身份验证模块(PAM)提供了本地Linux身份验证服务。

下面我们将配置PAM先对本地的/etc/passwd文件检查用户帐号,然后再对LDAP服务器进行检查。

PAMLDAP模块可以用来将身份验证重定向到LDAP目录上。

/lib/security/pam_ldap.soPAM模块提供了LDAP身份验证功能。

身份验证本身是由PAM程序执行的,它从身份验证候选机制中获取用户名,将其绑定到OpenLDAP服务器上,检索与这个uid条目(用户名条目)相关的DN;从身份验证候选机制中获取密码,然后使用这个DN和密码试图将其绑定到OpenLDAP服务器上。

如果绑定成功,PAM会报告说这个用户已经成功通过了pam_ldap.so提供的身份验证测试。

根据PAM的配置不同,在用户看到命令行提示符之前可能会执行其他测试。

我们可以采用两种方法来配置LDAP客户机。

一种快速而简单的方法是运行/usr/sbin/authconfig,并在两个屏幕中输入信息。

另外一种方法是通过编辑客户机LDAP配置文件/etc/ldap.conf,然后修改/etc/nsswitch.conf、/etc/sysconfig/authconfig和/etc/pam.d/system-auth。

首先让我们来看一下如何运行authconfig。

如图3所示进行选择,然后点击Next。

图3.执行authconfig命令的第一个页面

在如图4所示的第二个屏幕中输入对应的信息,然后点击OK。

图4.执行authconfig命令的第二个页面

要手工配置OpenLDAP客户机,请遵循下面的步骤。

用来跟踪特定身份验证机制是否已经启用的文件是/etc/sysconfig/。

我们可以希望以下条目的值都是“yes”:

USELDAP=yes

USELDAPAUTH=yes

USEMD5=yes

USESHADOW=yes

USELOCAUTHORIZE=yes

PAM和NSS模块使用的基本配置文件是/etc/ldap.conf。

host选项指定LDAP服务器,base选项指定这个目录使用的DN,最初我们希望关闭加密功能:

hostdhcp64-

basedc=ibm,dc=com

ssloff

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

passwd:

filesldap

shadow:

filesldap

group:

filesldap

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

尽管其他设置也可以实现相同的结果,但是我使用下面的文件设置:

authrequired/lib/security/$ISA/pam_env.so

authsufficient/lib/security/$ISA/pam_unix.solikeauthnullok

authsufficient/lib/security/$ISA/pam_ldap.souse_first_pass

authre

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 农林牧渔 > 林学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1