红联Linux门户
Linux帮助

使用IBM目录服务进行 Linux 用户验证

发布时间:2006-06-25 19:26:07来源:红联作者:yy123
简介

轻量级目录访问协议 (Lightweight Directory Access Protocol,LDAP) 是一个轻量级的客户机-服务器协议,用于访问目录服务,尤其是那些基于 X.500 的服务。IBM Directory Server 是一个实现 LDAP 协议的成熟产品。近来流行的 Linux 提供了一些系统用户验证方法,包括本地文件、NIS、LDAP 和 PAM 机制。Linux 可以为不同的服务使用不同的验证方法。

本文介绍了如何使用 IBM Directory Server 进行 Linux 用户验证。我没有在文中介绍相关的概念; 参考资料 中有相关的背景资料。

我要管理的 Linux 系统为 RedHat Linux 7.3,LDAP 服务器是 IBM Directory Server 5.1。如果需要,请参考 RedHat 和 IBM 的网站提供的 Linux 和 Directory Server 5.1 安装说明。




配置 Directory Server 5.1 服务器

在使用 Directory Server 来存储您的 Linux 系统用户信息之前,您需要先计划您的系统用户结构。例如,我将 Directory Server 5.1 服务器安装在一个单独的 Windows 2000 服务器上,计划了如下的系统用户结构:

o=ibm,c=cn
|-ou=csdl,o=ibm,c=cn
|-ou=gcl,ou=csdl,o=ibm,c=cn
|-uid=user1,ou=gcl,ou=csdl,o=ibm,c=cn
|-uid=user2,ou=gcl,ou=csdl,o=ibm,c=cn




使用以下步骤来构建这个结构:

添加后缀。停止 Directory Server 服务器,然后使用 ldapxcfg 添加一个新的后缀: o=ibm,c=cn ,参见 图 1
图 1. 添加一个新后缀




导入 LDAP Data Interchange Format (LDIF) 文件,以及基本结构。编辑 LDIF 文件,它定义了根专有名称 (distinguished name,DN) 和基本结构 DN,如下所示。 version: 1

dn: o=IBM,c=CN
objectclass: top
objectclass: organization
o: ibm

dn: ou=CSDL,o=ibm,c=cn
ou: CSDL
objectclass: organizationalUnit
objectclass: top
description: China Software Development Lab
businessCategory: R&D

dn: ou=GCL,ou=CSDL,o=ibm,c=cn
ou: GCL
objectclass: organizationalUnit
objectclass: top
description: Globalization Certification Lab




使用 ldapxcfg 导入 LDIF,参见 图 2。




使用 Web 工具 ldif2db 来添加用户。创建一个新用户条目有两种不同的方法:
Web 工具
Directory Server 5.1 提供了一个 Web 应用程序,可以部署到特定的应用程序服务器上。它默认使用 WebSphere Application Server 5.0 express。这个工具为用户提供了一个友好的界面来帮您管理 LDAP 信息。
命令行工具
使用 ldif2db 来导入条目。例如,
ldif2db -i oneEntry.ldif
下面的这个例子介绍了如何使用命令工具来添加一个新用户。

#oneEntry.ldif

dn: uid=user1,ou=GCL,ou=CSDL,o=ibm,c=cn
loginShell: /bin/bash
memberUid: 900
gidNumber: 800
objectclass: posixGroup
objectclass: top
objectclass: posixAccount
objectclass: shadowAccount
uid: user1
uidNumber: 900
cn: user1
description: One user of system
homeDirectory: /home/user1
userpassword: password
ownerpropagate: TRUE
entryowner: access-id:UID=USER1,OU=GCL,OU=CSDL,O=IBM,C=CN




对于 Linux 用户信息,对象类应该是 posixAccount 。将本条目的 entryowner 设置为用户“自己”,这样用户就可以修改密码。要了解更多关于 Directory Server ACL 的信息,请阅读 Directory Server 文档。

添加用户完成后,启动 Directory Server 服务器来开始为 Linux 用户验证服务。




Linux 上的配置

在 RedHat Linux 7.3 上,以 root 身份登录,确保已经安装了以下两个软件包:

openldap-2.0.23-4
nss_ldap-185-1
使用 #rpm -qa|grep ldap 命令来检查已安装的 RPM。如果没有安装这两个软件包,那么挂载 RedHat 安装映像并执行以下命令:
#rpm -ivh /openldap-2.0.23-4.rpm
#rpm -ivh /nss_ldap-185-1.rpm

两个软件包安装完成后,打开 /etc/ldap.conf 文件来做一些配置。下面是一些用于配置的关键指令。 host 指定 LDAP 服务器 IP/主机名
base 指定 LDAP 客户机搜索起点
port 指定 LDAP 服务器端口
pam_filter 指定 LDAP 客户机搜索过滤器
pam_login_attribute 指定一个用户条目的登录属性
pam_password 指定客户机密码哈希方法


下面的例子是 ldap.conf 文件的部分内容。尤其注意那些 加粗的指令。


# @(#)$Id: ldap.conf,v 1.24 2001/09/20 14:12:26 lukeh Exp $
#
# This is the configuration file for the LDAP nameservice
# switch library and the LDAP PAM module.
#
# PADL Software
# http://www.padl.com
#
# Your LDAP server. Must be resolvable without using LDAP.
#host 127.0.0.1

host 192.168.0.188

# The distinguished name of the search base.
#base dc=example,dc=com

base o=IBM,c=CN

# Another way to specify your LDAP server is to provide an
# uri with the server name. This allows to use
# Unix Domain Sockets to connect to a local LDAP Server.
#uri ldap://127.0.0.1/
#uri ldaps://127.0.0.1/
#uri ldapi://%2fvar%2frun%2fldapi_sock/
# Note: %2f encodes the '/' used as directory separator
# The LDAP version to use (defaults to 3
# if supported by client library)
#ldap_version 3

# The distinguished name to bind to the server with.
# Optional: default is to bind anonymously.
#binddn cn=proxyuser,dc=example,dc=com

# The credentials to bind with.
# Optional: default is no credential.

# The distinguished name to bind to the server with
# if the effective user ID is root. Password is
# stored in /etc/ldap.secret (mode 600)
#rootbinddn cn=manager,dc=example,dc=com

# The port.
# Optional: default is 389.

port 389

# The search scope.
#scope sub
#scope one
#scope base
# Search timelimit
#timelimit 30
# Bind timelimit
#bind_timelimit 30
# Idle timelimit; client will close connections
# (nss_ldap only) if the server has not been contacted
# for the number of seconds specified below.
#idle_timelimit 3600

# Filter to AND with uid=%s

pam_filter objectclass=posixAccount

# The user ID attribute (defaults to uid)

pam_login_attribute uid

# Search the root DSE for the password policy (works
# with Netscape Directory Server)
#pam_lookup_policy yes
# Check the 'host' attribute for access control
# Default is no; if set to yes, and user has no
# value for the host attribute, and pam_ldap is
# configured for account management (authorization)
# then the user will not be allowed to login.
#pam_check_host_attr yes
# Group to enforce membership of
#pam_groupdn cn=PAM,ou=Groups,dc=example,dc=com
# Group member attribute
#pam_member_attribute uniquemember
# Specify a minium or maximum UID number allowed
#pam_min_uid 0
#pam_max_uid 0
# Template login attribute, default template user
# (can be overriden by value of former attribute
# in user's entry)
#pam_login_attribute userPrincipalName
#pam_template_login_attribute uid
#pam_template_login nobody
# HEADS UP: the pam_crypt, pam_nds_passwd,
# and pam_ad_passwd options are no
# longer supported.

# Do not hash the password at all; presume
# the directory server will do it, if
# necessary. This is the default.
#pam_password md5

pam_password clear
ssl no
...
...





保存所作的修改,然后使用 authconfig 来启用 LDAP 验证,即执行 #authconfig 。

在 User Information Configuration 面板中,参见 图 3,选中 Cache Information和 Use LDAP。


图 3. User Information Configuration




在 Authentication Configuration 面板中,选中 Use LDAP Authentication,参见 图 4。


图 4. Authentication Configuration




然后输入 Ok。Linux 系统将开始启用 LDAP 验证。
这个工具将会把指令 pam_password 的值设置为 md5。为了让用户可以成功地修改密码,您需要手工将这个指令值设置为“clear”。

现在我们可以作为信息存储在 Directory Server 服务器上的用户来登录了。例如,以 user1 的身份登录:




因为没有 user1 的主目录,所以登录 shell 自动将目录切换到“/”。为方便起见我们可以手工添加用户主目录:
#mkdir /home/user1
#cp /etc/skel/.* /home/user1
#chown -R user1:user1 /home/user1





现在再次以 user1 身份登录,不再出现警告:




OK,好极了! 我们已经实现了一个基本的配置,可以利用 Directory Server 来对 Linux 系统用户进行验证。因为 Linux 和 Directory Server 都支持 Secure Sockets Layer (SSL),所以我们可以做更深入的配置以提高系统的安全性。关于 SSL 配置的更多信息,请参阅 参考资料。
文章评论

共有 1 条评论

  1. rainer_823 于 2006-07-08 15:46:08发表:

    高手

    就是我看不动
    郁闷