dn: cn=ldapuser,ou=Group,dc=ibm,dc=com objectClass: posixGroup objectClass: top cn: ldapuser userPassword: {crypt}x gidNumber: 500 # ldapadd -x -D \
最后,从 /etc/passwd 和 /etc/shadow 中迁移 ldapuser 的信息:
清单 8. 迁移 ldapuser 信息
# grep ldapuser /etc/passwd > passwd.in
# ./migrate_passwd.pl passwd.in > passwd.ldif
# cat passwd.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 \
现在检查已经添加到数据库中的信息。清单 9 给出了全部输出结果:
清单 9. 以 LDIF 格式填充的 OpenLDAP 数据库 # ldapsearch -x # extended LDIF #
# LDAPv3
# base <> with scope sub # filter: (objectclass=*) # requesting: ALL #
# ibm.com
dn: dc=ibm,dc=com dc: ibm
objectClass: top objectClass: domain
# People, ibm.com
dn: ou=People,dc=ibm,dc=com ou: People objectClass: top
objectClass: organizationalUnit
# Group, ibm.com
dn: ou=Group,dc=ibm,dc=com ou: Group
objectClass: top
objectClass: organizationalUnit
# ldapuser, Group, ibm.com
dn: cn=ldapuser,ou=Group,dc=ibm,dc=com objectClass: posixGroup objectClass: top cn: ldapuser gidNumber: 500
# ldapuser, People, ibm.com
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 # search result search: 2 result: 0 Success # numResponses: 6 # numEntries: 5
配置 LDAP 客户机
用来设置客户机的 Red Hat Enterprise Linux release 4 Update 1 包包括:
?
nss_ldap-226-6:包括两个 LDAP 访问客户机:nss_ldap 和 pam_ldap
o nss_ldap 是一组 C 库扩展,它允许 LDAP 目录服务器用作一个用户和组
信息的主源
o 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,并在两个屏幕中输入信息。另外一种方法是通过编辑客户机 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,最初我们希望关闭加密功能: host dhcp64-233.ibm.com
base dc=ibm,dc=com ssl off
要让 NSS 服务使用 OpenLDAP 服务器,需要将 “ldap” 添加到 /etc/nsswitch.conf 文件的 passwd、shadow 和 group 行中,如下所示: passwd: files ldap shadow: files ldap
group: files ldap
要让 PAM 身份验证服务使用 OpenLDAP 服务器,请将 pam_ldap 行加入到 /etc/pam.d/system-auth 中,位置在对应的标准 pam_unix.so 条目之后。尽管其他设置也可以实现相同的结果,但是我使用下面的文件设置: auth required /lib/security/$ISA/pam_env.so
auth sufficient /lib/security/$ISA/pam_unix.so likeauth nullok auth sufficient /lib/security/$ISA/pam_ldap.so use_first_pass auth required /lib/security/$ISA/pam_deny.so
account required /lib/security/$ISA/pam_unix.so broken_shadow account sufficient /lib/security/$ISA/pam_localuser.so
account sufficient /lib/security/$ISA/pam_succeed_if.so uid %lt; 100 quiet
account [default=bad success=ok user_unknown=ignore] /lib/security/$ISA/pam_ldap.so account required /lib/security/$ISA/pam_permit.so
password requisite /lib/security/$ISA/pam_cracklib.so retry=3
password sufficient /lib/security/$ISA/pam_unix.so nullok use_authtok md5 shadow password sufficient /lib/security/$ISA/pam_ldap.so use_authtok password required /lib/security/$ISA/pam_deny.so
session required /lib/security/$ISA/pam_limits.so
session required /lib/security/$ISA/pam_unix.so session optional /lib/security/$ISA/pam_ldap.so
现在,用户帐号信息可以从客户机系统中删除并从 LDAP 目录中进行获取了。当用户试图登录客户机系统时,PAM 身份验证服务就会从用户那里获取用户名,在我们的例子中是 ldapuser。PAM 会从 LDAP 服务器中检索识别名(DN)条目 .dn: uid=ldapuser, ou=People, dc=ibm, dc=com.。PAM 然后会从用户那里获取密码。然后 PAM 试图使用这个 DN 和密码与 LDAP 服务器进行绑定。DN 和密码都以正文文本的格式发送给 LDAP 服务器。在