AIX 中的 LDAP 配置管理和故障诊断

了解如何诊断 IBM Directory Server 的问题,以及如何识别解决这些问题需要些什么。本文是关于 AIX® 中 IBM Directory Server 配置管理的快速参考。

Ravi K. Kovvila (rkovvila@in.ibm.com), 团队技术负责人, IBM

Photo of Ravi KovvilaRavi K. Kovvila 是 IBM India Systems and Technology Lab 的 AIX and UNIX Product Testing 团队技术负责人。在过去的七年里,他一直为 IBM 工作。他目前的工作包括 AIX 系统测试交付内容、与客户沟通、测试设计方案、审核、检测和技术创新。他的专业技术领域包括 AIX 安全(LDAP 和 Kerberos)、NFS、NIS、以及 WebSphere®MQSeries 集成器。



Uma Chandolu (uchandol@in.ibm.com), 软件工程师, IBM

Photo of Uma ChandoluUma M. Chandolu 是 IBM 德克萨斯州 Austin 的 AIX Development Support Security 团队的一名软件工程师。他在 AIX 安全环境方面有两年的丰富实践经验,是 AIX 支持安全领域的焦点人物之一。他擅长于 AIX LDAP 客户端管理和其他子系统。他在与客户进行交流和处理关键的客户问题方面很有经验。


developerWorks 专家作者

2007 年 8 月 20 日

引言

用户管理是分布式计算环境中一个重要的部分。它为通用访问提供了所需的一致的身份验证和授权服务。许多客户使用 IBM Directory Server 以实现集中的安全管理,IBM Directory Server 是 AIX® 所支持的一种集中式安全机制。要对 IBM Directory Server 进行有效的配置并为使用做好准备,您需要深入了解轻量级目录访问协议 (LDAP) 的概念和配置管理。

本文对 LDAP 及其体系结构提供了概述。本文还介绍了 AIX 中的 LDAP 配置和管理。本文重点关注在配置 LDAP 服务器和客户端的过程中,如何对不同类型问题进行故障排除。对于 AIX 管理员、技术支持人员和开发团体,本文在故障排除部分中所提供的建议是很有帮助的。

LDAP 概述和体系结构

LDAP 是一种用于访问目录服务器的行业标准协议。需要对 IBM Directory Server 进行配置,以支持在 AIX 中使用 AIX 特定的模式和 RFC 2307 模式通过 LDAP 进行用户身份验证。

LDAP 在读取、浏览、搜索目录和专门存储有序信息的数据库等方面进行了优化。许多计算环境的目标是使得来自任何位置(如工作站、公共工作站和 Web)的用户都能够使用各种网络资源。可以使用 IBM Directory Server 进行用户管理,以实现这一目标。

图 1 显示了 LDAP 配置的概述。

图 1. LDAP 配置
LDAP 配置

LDAP 是一种标准化的协议,也是一种用于存储有序信息的专门数据库。当用户登录时,LDAP 客户端向 LDAP 服务器发送一个查询,以便从集中式的数据库中获取这个用户和组的信息。DB2® 是用于存储用户和组信息的数据库。LDAP 数据库以具有层次结构的条目为基础,存储和检索信息,其中每个条目都具有区别于其他条目的名称、类型和属性。属性用于为条目定义可接受的取值。LDAP 数据库能够为许多用户存储和维护他们的条目。

AIX Version 4.3 中创建了 LDAP 安全加载模块。通过 IBM SecureWay® Directory,这个加载模块提供了用户身份验证、集中式用户和组管理功能。可以对 LDAP 服务器中定义的用户进行配置,使其能够登录到 LDAP 客户端,即使该用户并没有在本地进行定义。AIX LDAP 加载模块与 AIX 操作系统完全集成。

配置 IBM Directory Server

可以使用以下三种方式中的一种来配置 AIX 上的 IBM Directory Server:

  • ldapcfg 命令行工具
  • ldapcfg 工具的图形化版本,称为 ldapxcfg
  • mksecldap 命令

以下是配置 IBM Directory Server 所需的文件集:

  • ldap.server 文件集
  • DB2 是 IBM Directory Server 所需的后端数据库软件

先决条件

  • 该系统应该运行于 64位内核模式。使用 bootinfo –K 命令以确定内核模式。
  • AIX 需要 64 位硬件。使用 bootinfo –y 命令以确定硬件。
  • 需要最少 512MB 内存。(要得到更好的性能,请使用 1GB 或者更大的内存。)
  • IBM Directory Server 需要文件系统中具有 80MB 空闲空间,该空间用以创建 DB2 数据库。
  • 如果您计划使用 InstallShield GUI 来进行安装,请确保在 /var 目录中至少有 100MB 的空闲空间,在 /tmp 目录中至少有 400MB 的空闲空间。

AIX 提供了 mksecldap 命令以设置 IBM Directory 服务器和客户端,以便充分利用这些服务器。

mksecldap 命令将为新服务器的设置执行下面的任务:

  1. 创建 ldapdb2 缺省 DB2 实例。
  2. 创建 ldapdb2 缺省 DB2 数据库。
  3. 创建 AIX 树 DN(后缀),AIX 用户和组存储于其中。
  4. 从本地主机的安全数据库文件中将用户和组导出到 LDAP 数据库。
  5. 设置 LDAP 服务器管理员 DN 和密码。
  6. 另外,可以将服务器设置为使用安全套接字层 (SSL) 通信。
  7. 安装 /usr/ccs/lib/libsecldapaudit,这是用于 LDAP 服务器的 AIX 审核插件。
  8. 在完成上述的工作后,启动 LDAP 服务器。
  9. 将 LDAP 服务器条目(slapd)添加到 /etc/inittab,以便在系统重新启动后自动重新启动该服务器。
mksecldap –s –a cn=admin –p passwd –S rfc2307aix

所有的设置信息都存储在 /etc/ibmslapd.conf 文件中。

为 IBM Directory Server 配置 AIX 客户端系统。

ldap.client 文件集中包含了 IBM Directory 客户端库文件、头文件和实用工具。您可以使用 mksecldap 命令针对 IBM Directory Server 配置 AIX 客户端,如下所示:

mksecldap -c -h <LDAP Server name> -a cn=admin -p adminpwd -S rfc2307aix

要配置 AIX 客户端,您必须拥有 IBM Directory Server 管理员 DN 和密码。在配置了 AIX 客户端之后,secldapclntd 守护进程开始运行。在针对 IBM Directory Server 配置了 AIX 客户端之后,将 /etc/security/user 文件中的 SYSTEM 属性更改为 LDAP OR compat 或者 compat or LDAP,以便对 AIX 客户端系统进行身份验证。

/usr/lib/security/methods.cfg 文件包含加载模块的定义。mksecldap 命令将添加下面的内容,以便在客户端设置的过程中启用 LDAP 加载模块。

 LDAP:
	program = /usr/lib/security/LDAP
	program_64 = /usr/lib/security/LDAP64

客户端计算机上的 /etc/security/ldap/ldap.cfg 文件中包含了用于 secldapclntd 客户端守护进程的配置信息。这个配置文件包含 IBM Directory Server 的名称、binddn 和密码信息。在设置 AIX 客户端的过程中,通过 mksecldap 命令可以自动地更新该文件。

/etc/security/ldap/ldap.cfg 文件中的 auth_type 属性指定了需要在何处对用户进行身份验证。如果 auth_type 属性是 UNIX_AUTH,那么在客户端系统对用户进行身份验证。如果该属性为 ldap_auth,那么在 IBM Directory Server 上对用户进行身份验证。

使用 SSL 配置 IBM Directory Server

可以使用 SSL 对 IBM Directory Server 和客户端进行配置。这样可以避免以明文的形式在网络中传输数据。它对信息进行加密,然后通过网络发送。IBM Directory Server 对用户的密码信息加密,然后在配置了 SSL 的情况下通过网络进行发送。

要启用服务器和客户端的加密支持,需要以下文件集:

  • ldap.max_crypto_server
  • ldap.max_crypto_client

对于初始服务器设置,可以运行下面的命令:

mksecldap –s –a cn=admin –p pwd –S rfc2307aix –k usr/ldap/etc/mykey.kdb –w keypwd

其中 mykey.kdb 是密钥数据库,并且 keypwd 是这个密钥数据库的密码。

对于经过配置并且正在运行的服务器,可以运行下面的命令:

mksecldap –s –a cn=admin –p pwd –S rfc2307aix –n NONE –k /usr/ldap/etc/mykey.kdb –w keypwd

对于初始客户端设置,可以运行下面的命令:

mksecldap –c –h <ldapserver name> –a cn=admin –p adminpwd –k /usr/ldap/key.kdb –w keypwd

下面的表 1 中列出了 AIX LDAP 客户端系统中经常使用的一些命令。

表 1. 经常使用的命令
/usr/sbin/start-secldapclntd启动 secldapclntd;它与从命令行直接进入 secldapclntd 相同。
/usr/sbin/stop-secldapclntd停止 secldapclntd 守护进程。
/usr/sbin/restart-secldapclntd停止当前正在运行的 secldapclntd 守护进程,并重新启动它。如果 secldapclntd 没有运行,这一操作与 start-secldapclntd 相同。
/usr/sbin/ls-secldapclntd列出 secldapclntd 守护进程的状态,包括与其进行对话的服务器、端口号、缓存状态等等。
/usr/sbin/flush-secldapclntd清空 secldapclntd 守护进程的缓存。
mkuser –R LDAP <username>从 LDAP 客户端创建用户。

故障排除信息

这个部分中包括几个典型的问题,随后给出了建议的解决方案。

问题:LDAP 服务器以“configuration only”模式启动……

当重新启动 LDAP 服务器或者在进行 LDAP 服务器配置时返回了下面的错误信息时,LDAP 服务器以“configuration only”模式启动:“Failed to initialize be_config.Error encountered.Server starting in configuration only mode.”

解决方案:

  1. 可以通过使用下面的命令或者在 /var/ldap/ibmslapd.log 文件中查看相关的信息,以确认服务器是否以“configuration only”方式启动。
    # ldapsearch -h teak01.upt -b "" -s base objectclass=* | grep config
    ibm-slapdisconfigurationmode=TRUE
  2. 有些时候,没有正确地注册 DB2 许可证密钥。这是该问题的主要原因之一。要解决这个问题,必须注册许可证密钥,可以执行下面的步骤:
    1. 以具有 root 权限的用户身份登录。
    2. 注册 DB2 产品许可证密钥:
    #/usr/opt/db2_08_01/adm /db2licm -a /usr/ldap/etc/ldap-custom-db2ese.lic
    #/usr/opt/db2_08_01/adm /db2licm -a /usr/ldap/etc/db2wsue.lic
  3. 如果以上的步骤不能解决这个问题,在再次配置 LDAP 服务器之前,可以清除 LDAP 服务器配置并导出 LDAP_DBG=1。/var/ldap/dbg.out、/var/ldap/dbg.log 和 /var/ldap/ibmslapd.log 文件中包含了进一步调试这个问题所需的诊断信息。

问题:无法使用 LDAP 用户登录系统……

在成功配置 Directory Server 后,无法使用 LDAP 用户登录系统。

解决方案:
确保在下列方面没有错误,这可能导致存在特殊 LDAP 用户的错觉。

  1. 在客户端配置过程中,使用 mksecldap -u <userlist> 指定一个用逗号分隔的用户名列表或者 ALL,以便在客户端启用所有的用户。这意味着将这些用户的 SYSTEM 和注册属性设置为 LDAP。
    mksecldap -c -h monster -a cn=admin -p adminpwd -u user1,user2

    -u 标志可以确保 user1user2 用户能够在客户端计算机上用作 LDAP 用户,但是这个标志并不在 LDAP 服务器数据库中添加任何用户。如果已使用 mkuser –R LDAP <user name> 或者在配置服务器的过程中将用户添加到了 LDAP,那么这些用户可以成功登录,如下所示:

    mksecldap -s -a cn=admin -p adminpwd -S rfc2307aix

    在这个示例中,将所有的本地用户添加到 LDAP。因为 user1user2 都是本地用户,所以它们将自动添加到 LDAP 数据库中。

  2. 验证 Directory Server 已启动并正在运行。ibmdiradmibmslapd 进程应该正在运行:
    # ps -eaf |grep ibm
        ldap 278760      1   0   Jan 14      -  0:08 /usr/ldap//bin/ibmdiradm -l
        ldap 434392      1   2   Jan 14      - 339:44 ibmslapd -f/etc/ibmslapd.conf
  3. 验证 LDAP 客户端是否已启动并正在运行。secldapclntd 进程应该正在运行:
    # ps -eaf |grep -i secldap
        root 393408      1   0   Jan 14      -  0:15 /usr/sbin/secldapclntd
        root 725062 692358   0 03:20:38  pts/0  0:00 grep -i secldap
  4. 验证服务器中是否存在这个用户:
    # lsuser -R LDAP usr_3112
    usr_3112 id=3112 pgrp=gp_3112 groups=gp_3112,gp_3118,gp_3124 
    home=/tmp shell=/usr/bin/ksh login=true su=true rlogin=true daemon=true 
    admin=false sugroups=ALL admgroups=    tpath=nosak 
    ttys=ALL expires=0 auth1=SYSTEM auth2=NONE umask=22 registry=LDAP 
    SYSTEM=KRB5LDAP OR compat logintimes= loginretries=0 pwdwarntime=0 
    account_locked=false minage=0 maxage=0 maxexpired=-1 minalpha=0 minother=0 
    mindiff=0 maxrepeats=8 minlen=0 histexpire=0 histsize=0 pwdchecks= 
    dictionlist= fsize=-1 
    cpu=-1 data=262144 stack=65536 core=2097151 rss=65536 nofiles=2000 roles=
  5. 验证用户的注册信息和 SYSTEM 属性。这两项内容都应该设置为 LDAP。
    lsuser –a registry SYSTEM username
  6. 验证是否将 LDAP 节添加到了 /usr/lib/security/methods.cfg 中:
    # grep -p LDAP /usr/lib/security/methods.cfg
    LDAP:
            program = /usr/lib/security/LDAP
            program_64 =/usr/lib/security/LDAP64

问题:要将所有的 AIX 用户迁移作为 LDAP 中经过身份验证的用户,需要完成哪些操作呢?

要将所有的 AIX 用户迁移作为 LDAP 中经过身份验证的用户,需要完成哪些操作呢?在配置服务器的过程中,mksecldap 允许用户迁移特定的一组 AIX 用户吗?

解决方案:
不允许。缺省情况下,在配置服务器的过程中,mksecldap 将所有的 AIX 用户迁移作为 LDAP 中经过身份验证的用户。

如果您 希望将所有 AIX 用户迁移作为 LDAP 用户,可以运行 mksecldap 命令,并加上 –u NONE

#mksecldap -s –a cn=admin –p adminpwd –s rfc2307aix –u NONE

问题:mkuser 可能返回一个错误消息

mkuser 命令可能返回下面的错误消息:

  # mkuser -R LDAP test
3004-686 Group "staff" does not exist.
3004-703 Check "/usr/lib/security/mkuser.default" file.

解决方案:
如果 LDAP 客户端和 NIS 客户端配置于同一台计算机上,那么用户将无法从 AIX LDAP 客户端创建新用户。他们将得到以上的错误消息。您可以通过安装 APAR IY90556 来解决这个问题。

问题:mksecldap 允许用户迁移特定的一组 AIX 用户吗?

在配置服务器过程中,mksecldap 允许用户迁移特定的一组 AIX 用户吗?

解决方案:
不允许。在配置服务器的过程中,mksecldap 不支持将特定的一组用户迁移作为 LDAP 用户。要处理这一需要,可以运行 mksecldap 命令,这样不会迁移任何 AIX 用户,而稍后再使用 mkuser –R LDAP 创建所需的用户。

值得注意的是,在配置服务器的过程中,–u 标志是非常重要的,它仅接受 NONE 作为参数,并忽略任何其他参数。

mksecldap -s -a cn=admin -p adminpwd -S rfc2307aix –u user1,user2

在这个示例中,导出了所有本地用户。

问题:如果使用 –u NONE 对服务器进行配置,那么客户端配置将出现问题

可以将其分解成三个问题。

解决方案

问题 1:

/usr/sbin/mksecldap -c -h batonrouge05.upt.austin.ibm.com  -a cn=admin -p passw0rd

“Cannot find user from all base DN
client setup failed.”

客户端设置基本上是使用 ldapsearch 查看是否已经将任何用户添加到了 LDAP 服务器中。如果在 LDAP 中找不到任何用户,那么配置将会失败。要解决这个问题,至少应该添加一个用户到 LDAP。

应该使用 ldapadd 命令将下面的 ldif 文件添加到 LDAP DIT。

dn: ou=People,cn=admin
ou: People
objectClass: organizationalUnit

dn: uid=testuser,ou=People,cn=admin
uid: testuser
objectClass: aixauxaccount
objectClass: shadowaccount
objectClass: posixaccount
objectClass: account
objectClass: ibm-securityidentities
objectclass: top
cn: testuser
passwordchar: *
uidnumber: 203
gidnumber: 203
homedirectory: /home/testuser
loginshell: /usr/bin/ksh
isadministrator: false

问题 2:

mksecldap -c -h batonrouge05.upt.austin.ibm.com -a cn=admin -p passw0rd

“Cannot find the group base DN from the LDAP server.
Client setup failed.”

在配置客户端之前,该组的基本 DN 应该出现在 LDAP DIT 中。产生上述失败是由于该组的基本 DN 不存在。要解决这个问题,需要添加一个组。

应该使用 ldapadd 命令将下面的 ldif 文件添加到 LDAP DIT。

dn: ou=Groups,cn=admin
ou: Groups
objectClass: organizationalUnit

dn: cn=testgrp,ou=Groups,cn=admin
cn: testgrp
objectclass: aixauxgroup
objectclass: posixgroup
objectclass: top
gidnumber: 203
memberuid: testuser
isadministrator: false

问题 3:
当使用 –u NONE 配置服务器并且成功地配置了客户端时,可以使用 mkuser 来创建一个用户。

# mkuser -R LDAP id=1000 pgrp=grp_2000 groups="grp_2006,grp_2012" usr_1000
Group "staff" does not exist.
Check "/usr/lib/security/mkuser.default" file.

mkuser 命令有一种遗留的行为,即首先检查缺省值,即使它并不使用这些缺省值。它出现了失败,是因为称为 staff 的组并不存在。

如果您将下面的 ldif 文件添加到 LDAP,那么可以一次性解决这部分中的所有问题。

dn: ou=Groups,cn=admin
ou: Groups
objectClass: organizationalUnit

dn: cn=staff,ou=Groups,cn=admin
cn: staff
objectclass: aixauxgroup
objectclass: posixgroup
objectclass: top
gidnumber: 203
memberuid: testuser
isadministrator: false

dn: ou=People,cn=admin
ou: People
objectClass: organizationalUnit

dn: uid=testuser,ou=People,cn=admin
uid: testuser
objectClass: aixauxaccount
objectClass: shadowaccount
objectClass: posixaccount
objectClass: account
objectClass: ibm-securityidentities
objectclass: top
cn: testuser
passwordchar: *
uidnumber: 203
gidnumber: 203
homedirectory: /home/testuser
loginshell: /usr/bin/ksh
isadministrator: false

可以将 ldif 文件添加到 LDAP 服务器,如下所示:

#/usr/bin/ldapadd -D $ADMIN_DN -w $ADMIN_DN_PASSWD -f <ldif file>

在 ldif 文件中,必须使用已配置的 LDAP 服务器的基本 DN。否则,将无法成功地添加这个 ldif 文件。

参考资料

学习

获得产品和技术

  • IBM 试用软件:从 developerWorks 可直接下载这些试用软件,您可以利用它们开发您的下一个项目。

讨论

条评论

developerWorks: 登录

标有星(*)号的字段是必填字段。


需要一个 IBM ID?
忘记 IBM ID?


忘记密码?
更改您的密码

单击提交则表示您同意developerWorks 的条款和条件。 查看条款和条件

 


在您首次登录 developerWorks 时,会为您创建一份个人概要。您的个人概要中的信息(您的姓名、国家/地区,以及公司名称)是公开显示的,而且会随着您发布的任何内容一起显示,除非您选择隐藏您的公司名称。您可以随时更新您的 IBM 帐户。

所有提交的信息确保安全。

选择您的昵称



当您初次登录到 developerWorks 时,将会为您创建一份概要信息,您需要指定一个昵称。您的昵称将和您在 developerWorks 发布的内容显示在一起。

昵称长度在 3 至 31 个字符之间。 您的昵称在 developerWorks 社区中必须是唯一的,并且出于隐私保护的原因,不能是您的电子邮件地址。

标有星(*)号的字段是必填字段。

(昵称长度在 3 至 31 个字符之间)

单击提交则表示您同意developerWorks 的条款和条件。 查看条款和条件.

 


所有提交的信息确保安全。


static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=10
Zone=AIX and UNIX
ArticleID=249233
ArticleTitle=AIX 中的 LDAP 配置管理和故障诊断
publish-date=08202007