AIX 7 中的 LDAP 客户端增强

轻量级目录访问协议 (LDAP) 是 x.500 目录访问协议的子集。LDAP 维护各种对象的信息,并将它们表示为用户名、组名、文件名,等等。LDAP 协议允许在 LDAP 服务器与 LDAP 客户端之间交换信息。应用程序可以使用 LDAP 客户端与 LDAP 服务器进行交互,从而获取所请求的信息。可以将本文用作理解 AIX® 6.1 和 7.1 版本中的 LDAP 客户端特性的快速参考。

Uma Chandolu, 软件工程师, IBM

http://www.ibm.com/developerworks/i/p-uchandolu.jpgUma M. Chandolu 是一名 AIX 上的开发支持专家,拥有 6 年多在 AIX 环境中工作的大量实践经验,擅长 AIX 系统管理和其他子系统。他拥有与客户合作和处理客户关键型情景的经验。他曾是 “IBM developerWorks 投稿作者”。


developerWorks 投稿作者

Jyoti B. Tenginakai, 软件工程师, IBM

http://www.ibm.com/developerworks/i/p-jtenginakai.jpgJyoti Tenginakai 是 IBM 印度软件实验室的一名高级软件工程师。Jyoti 拥有 7 年的软件行业的从业经验,已在 IBM 工作了 5 年多。在刚开始效力 IBM 的几年中,她主要从事 OpenSource 组件(如 OpenSSH 和 LSOF)的开发工作。她还开发了 Trusted Execution 和 EFS 特性。她从 Visweshwaraiah Technology University 获得电子和通信专业的学士学位。



2012 年 3 月 01 日

简介

从 AIX 4.3 版本开始,AIX 就将 LDAP 作为一个加载模块来提供。LDAP 是一个运行在 TCP/IP 之上的面向连接的协议。该模块可以针对 AIX 系统上的用户和组管理进行配置。通过集成 AIX 本机命令,可以支持 LDAP 功能。AIX LDAP 客户端守护程序 secldapclntd 向 LDAP 服务器发送请求并根据应用程序或 LDAP 服务器的命令请求取回详细信息。本文内容将涵盖 AIX 6.1 Tl06 和 AIX 7.1 版本中提供的 AIX LDAP 客户端环境的增强。AIX 6.1 Tl06 提供的 LDAP 客户端增强包括:

  • LDAP 区分大小写
  • LDAP 别名支持
  • LDAP 缓存增强
  • LDAP 负(negative)缓存增强
  • 集成 Domain RBAC 与 LDAP

LDAP 区分大小写

LDAP 服务器上的用户和组都是大小写不敏感的。LDAP 认为用户 foo、Foo 和 FOO 是同一个用户。UNIX® 支持区分大小写,因此所有这些用户都是不同的用户。因此,在 AIX 环境中对这些用户中的任意用户进行授权或限制时,会应用于 LDAP 服务器上的所有用户。这种情况有时会造成安全违背。

AIX LDAP 客户端进行了相应增强,可以处理这种区分大小写问题。AIX LDAP 客户端配置文件 /etc/security/ldap/ldap.cfg 中引入了一个新的配置参数 “caseExactAccountName”。在将该参数设置为 “yes” 时,LDAP 客户端会在 LDAP 服务器返回的结果中查找与所输入用户名精确匹配的名称。默认情况下,该选项被设置为 “no”。每次对 LDAP 客户端配置文件进行修改后,要使修改生效,则必须重启 LDAP 客户端守护程序。

运行以下命令可以重启 LDAP 客户端守护程序:

#/usr/sbin/restart-secldapclntd

如果将 caseExactAccountName 参数设置为 “yes”,并且 LDAP 用户 foo 存在于 LDAP 服务器之上,那名当管理员或特权用户尝试创建另一个用户 Foo 时,mkuser 命令会显示以下消息:

#mkuser -R LDAP Foo       
3004-698 Error committing changes to "Foo".

类似地,通过使用 lsuser 命令,可以显示以下消息:

# lsuser -R LDAP Foo
3004-687 User "Foo” does not exist.

LDAP 别名支持

LDAP 采用目录信息树 (DIT) 的形式存储信息并管理用户和组。有时,用户通过多个用户名或主用户的别名进行调用。

LDAP 使用以下目录树格式存储用户信息:

dn:uid=foo,ou=people,cn=aixdata
uid:foo
uid:foo1
objectclass: posixaccount
…

dn: uid=foo,ou=people,cn=aixdata 被应用为用户的可识别名称 (DN)。用户的相对识别名 (RDN) 为 uid: foo, uid : foo1。AIX 本机命令,如 lsuser,将通过使用 foofoo1 从 LDAP 服务器获取用户属性。然而,AIX 登录使用识别名(DN)作为用户。因此,以 foo 身份可以成功登录,但是以 foo1 登录将失败。AIX LDAP 客户端进行了增强,可以在用户登录期间支持 LDAP 别名机制。


LDAP 缓存增强

AIX LDAP 客户端守护程序 secldapclntd 在 LDAP 客户端缓存中存储从 LDAP 服务器获得的用户和组条目。用户属性存储于用户缓存中,而组属性存储于组缓存中。每个缓存条目都有一个时间戳。缓存超时后(可进行配置),缓存条目将失效,用户查询将生成一个对 LDAP 服务器的 LDAP 查询。来自 LDAP 服务器的新结果将再次缓存,以满足 LDAP 客户端上的应用和命令的后续请求。

缓存机制当前存在一个局限。当用户帐户被修改或更新后,如果用户仍然缓存的是旧值,那么 AIX 系统可能无法看到更新。一个例子就是密码修改。在缓存超时窗口内,用户可能仍然被允许使用旧密码登录到系统中,其中用户缓存条目仍然有效,即使密码通过另一个系统进行了修改。同理,如果旧密码仍然在缓存中且是有效的,那么使用新密码登录后一个系统将失败。

AIX LDAP 客户端通过扩展缓存机制解决了这个限制。新属性 TO_BE_CACHED 现在添加到 LDAP 用户和组映射文件中。默认情况下,该属性的值是 “yes”,这表示用户和组属性全部被缓存。对于不需要缓存的用户和组属性,可以将其设置为 “no”。当传入一个用户请求时,LDAP 客户端将读取缓存,看看是否可以从缓存中获取该请求。在此之前,它将扫描用户和组映射文件,查看是否有任何属性的 TO_BE_CACHED 属性设置为 “no”。如果是的话,它就不会读取缓存,而是发送请求以从 LDAP 服务器获取值。


LDAP 负缓存增强

AIX LDAP secldapclntd 守护程序的另一个增强是它可以缓存从 LDAP 服务器中检索用户和组条目。如果传入一个针对用户或组信息的请求,并且 LDAP 服务器上不存在该条目,那么服务器会将相应的非现有 (non-existing) 信息发送给客户端,并缓存这些信息。如果用户请求获得这些非现有信息,而不是访问服务器,那么可以在缓存信息中找到这些信息,并将这些信息显示给用户。如果对这些非现有用户或组信息进行查询,那么这样做可以提高性能。此概念在 AIX LDAP 客户端中被描述为负缓存机制。


将 Domain RBAC 集成到 LDAP 中

在 AIX 6.1 Tl07 和 AIX 7.1 Tl02 版本中,LDAP 客户端进行了增强,可以支持 Domain RBAC 与 LDAP 服务器的集成。LDAP 客户端从 LDAP 服务器获取 Domain RBAC 信息并将它下载到 AIX 内核,从而获得系统资源的控制权。Domain RBAC 命令和 LDAP 客户端命令都获得了相应增强,可以支持 Domain RBAC 功能与 LDAP 服务器的集成。

要在 LDAP 服务器上配置 Domain RBAC 数据库,请执行下面的步骤:

  1. 使用 ldapadd 命令将 Domain RBAC 模式加载到 LDAP 服务器。Domain RBAC 模式由 AIX 6.1 Tl07 和 AIX 7.1 Tl02 服务器附带提供。Tivoli Directory Server 的模式文件为 /etc/security/ldap/sec.ldif。Domain RBAC 数据库也可以在 Microsoft® Windows AD 服务器上进行配置。

    如果 LDAP 服务器为 Microsoft Windows AD 服务器,则使用 /etc/security/ldap/aixSchemaForAD.ldif 文件。语法如下所示:

        ldapadd –h <ldap servername> -D <bindn> -w <bind password> -i
        <schema file> -c –v

    该命令将 Domain RBAC 模式加载到 LDAP 服务器。

  2. 将 Domain RBAC 数据库转换为 LDIF 格式。现有的 rbactoldif 命令进行了增强,可以将 Domain RBAC 数据库转换为 LDIF 格式。

    以下命令可以将 Domain RBAC 数据库转换为 LDIF 格式,并将它导出到 /tmp/domain.ldif 文件。

        rbactoldif -d <basedn> -s eo  >> /tmp/domain.ldif
  3. 使用 ldapadd 命令将 domain RBAC 数据库 LDIF 文件导出到 LDAP 服务器:
    ldapadd -h <ldapservername> -D <binddn> -w <bind password > -i
        /tmp/domain.ldif -v
  4. 使用 mksecldap 命令重新配置 LDAP 客户端,将 Domain RBAC 树条目填充到 LDAP 客户端配置文件 /etc/security/ldap/ldap.cfg 中:
    #mksecldap -c –h <LDAP server> -a <bind dn> -p <bind passwd> -S
        rfc2307aix
  5. 检查 lsldap 命令,确保 domain 后缀已经加载到 LDAP 服务器中。

    输入以下命令,在 LDAP 服务器上查看后缀:

    #lsldap

    该命令列出了 domain RBAC 后缀以及其他后缀。

  6. 将以下 stanza 添加到 LDAP 客户端系统的 /etc/nscontrol.conf 文件,以适应 AIX 本机命令,从 LDAP 服务器中获取 Domain RBAC 信息:
    domains:
    	secorder = LDAP,files
    domobjs:
    	secorder = LDAP,files
  7. 使用 setkst 命令将 Domain RBAC 表加载到 AIX LDAP 客户端内核。

    使用以下命令将表加载到内核:

    #setkst
  8. 确保 domain 和 domain 对象后缀配置正确。现有命令,如 mkdom、lsdom、chdom、rmdom 和 setsecattr 与 –R LDAP 选项配合使用,在 LDAP 服务器上管理 domain 和 domain 对象。
    mkdom –R LDAP <domain name>

    setsecattr –R LDAP –o domains=<domain name> objtype=file <object name>

参考资料

学习

获得产品和技术

  • 免费试用 IBM 软件。下载试用版,登录到在线试用版,在沙箱环境中使用产品或通过云访问。有上百种 IBM 试用产品可供您选择。

讨论

条评论

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=799487
ArticleTitle=AIX 7 中的 LDAP 客户端增强
publish-date=03012012