ldap安装配置.docx
《ldap安装配置.docx》由会员分享,可在线阅读,更多相关《ldap安装配置.docx(23页珍藏版)》请在冰豆网上搜索。
ldap安装配置
简介
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
authrequired/lib/security/$ISA/pam_deny.so
accountrequired/lib/security/$ISA/pam_unix.sobroken_shadow
accountsufficient/lib/security/$ISA/pam_localuser.so
accountsufficient/lib/security/$ISA/pam_succeed_if.souid%lt;100quiet
account[default=badsuccess=okuser_unknown=ignore]/lib/s