扩展 secldap 的功能以验证多个数据源

后台程序 secldapclntd 连接一个 LDAP 服务器和 AIX® 安全 LDAP 模块。使用 LDAP 服务器配置 secldapclntd 后台程序的常见步骤会在配置期间多次重复提供 LDAP 服务器的详细信息。但是,有时候所有用户的信息无法通过一个 LDAP 服务器获得。在这种情况下,仅配置一个活动 LDAP 服务器详细信息可能不够。为了解决此限制,本文演示了 IBM Tivoli Directory Server 中直通身份验证功能的用法。可以按照本文列出的步骤来配置安装,使 AIX 安全模块能够从多个数据源搜索身份验证信息,对客户隐藏后端服务器详细信息,从而实现抽象化和安全性。

Nikhil Firke, 系统软件工程师, IBM  

/developerworks/i/p-nfirke.jpgNikhil 是一位系统软件工程师,当前在 IBM India Software Labs 的 Tivoli Directory Server Level 2 支持团队工作。他拥有印度 Pune 的 Pune Institute of Computer Technology 的计算机工程学位。



Nilesh T. Patel, 系统软件工程师, IBM  

/developerworks/i/p-npatel.jpgNilesh 是一位系统软件工程师,当前在 IBM India Software Labs 的 level 2 Tivoli 安全团队工作。他拥有印度 Pune 的 Pune Institute of Computer Technology 的信息技术学位。他擅长的领域包括 Tivoli 安全产品和 DB2® 中的 IBM Tivoli Directory Server。



2010 年 7 月 26 日

引言 - secldap (mksecldap) 实用程序的限制

LDAP 服务器是任何安全安装的一个重要部分。对于 AIX,secldapclntd 后台程序管理着一个 LDAP 服务器与内部 AIX 安全 LDAP 模块之间的连接。AIX 中的安全子系统的 LDAP 实现可以当作 LDAP 身份验证负载模块。这个模块是一个支持用户身份验证的完整的包。开发人员已经提供了一个 mksecldap 实用程序来简化 secldapclntd 后台程序配置。mksecldap 命令可用于设置 LDAP 安全信息服务器。

最常用的,也是推荐为 AIX 安全基础设施使用的 LDAP 服务器是 IBM Tivoli Directory Server。强烈推荐使用 IBM Tivoli Directory Server 服务器配置 AIX 用户/组管理。但是,在配置 secldapclntd 后台程序时,实用程序 mksecldap 支持在配置过程中仅提供典型的 LDAP 服务器详细信息。不能提供辅助身份验证数据源,以供在无法在主要 LDAP 服务器上找到数据时在其上查找。但是,可以使用 secldapclntd 后台程序配置多个包含重复数据的 LDAP 服务器。当对默认服务器的请求遇到来自该服务器的 rc = 81(无法联系 LDAP 服务器)时,将激活重复的服务器。有了这一限制,就需要单一 LDAP 服务器存储所有用户身份验证信息。

有时 Tivoli Directory Server 必须支持用户包含在另一个目录服务器中。将用户从另一个目录迁移到 Tivoli Directory Server 是一种可能的解决方案。但这个解决方案不仅耗时,而且我们还需要考虑单一 Tivoli Directory Server 的可伸缩性,它必须能够迅速处理增加的负载。在两个不同的目录中保留用户会占用大量空间,而且保持两个目录中的用户同步也是另一项管理开销。除了这些可伸缩性和内存使用问题,现有应用程序的兼容性也需要处理。将所有现有应用程序迁移到新 LDAP 服务器无法在短期内完成,而且使用新 LDAP 服务器配置升级的应用程序通常需要很长时间。

为了解决这个 secldap 限制,本文介绍 Tivoli Directory Server 中的直通(pass-through)身份验证功能的用法。此功能自 Tivoli Directory Server V6.1 就已引入,我们将使用 Tivoli Directory Server V6.2 来演示我们的示例安装。


直通身份验证的概念背景

Tivoli Directory Server 为存储在其目录中的用户提供用户身份验证。使用 Tivoli Directory Server 且正在查找身份验证信息的任何客户端都需要绑定到正确的 Tivoli Directory Server,以检索身份验证信息。用户必须使用它的密码成功地绑定到该目录,才能获得对后续 LDAP 操作的授权。Tivoli Directory Server 默认仅支持对本地用户(也就是本地目录中包含的用户)进行身份验证。

直通身份验证机制支持客户端绑定到一个目录服务器,即使用户凭据无法在本地获得。使用此机制,服务器代表客户端尝试验证来自另一个外部目录服务器或一个直通服务器的凭据。这里的凭据指的是 Tivoli Directory Server 中的 userpassword 属性。

成功直通身份验证的重要注意事项:

  • 在配置直通身份验证之后,确保 Tivoli Directory Server 启动时直通身份验证服务器已在正常运行。
  • 直通身份验证服务器应该为 LDAP 服务器。
  • 直通身份验证服务器应该始终可访问,以方便直通身份验证的正常工作。
图 1. 直通身份验证正在运行
该图演示了直通身份验证的工作原理
  1. 绑定到 Tivoli Directory Server 的客户端通常不需要知道关于任何直通身份验证配置的信息。
  2. Tivoli Directory Server 确定存在特定客户端的条目,但帮助对客户端进行身份验证的用户密码属性不存在。如果没有在 Tivoli Directory Server 中配置直通身份验证,就不需要在其他服务器上查找凭据。但是,如果将服务器配置来在另一个服务器上执行直通身份验证,那么 Tivoli Directory Server 将继续执行以下步骤。
  3. 使用客户端用于绑定到 Tivoli Directory Server 的相同凭据来绑定到其他数据源。
  4. 拥有凭据的其他数据源使用成功或无效凭据错误响应 Tivoli Directory Server。
  5. 根据从直通服务器获得的结果,对客户端进行身份验证或报告失败。

在直通身份验证配置中将使用以下属性:

  • ibm-slapdPtaSearchBase:这个必需属性定义直通服务器中的子树基的区分名,对条目的搜索将使用这个区分名。
  • ibm-slapdPtaAttrMapping:这个必需属性存储直通身份验证的的属性映射。例如,如果 Tivoli Directory Server 中的 'attr1' 映射到直通服务器中的 'attr2',那么此属性值将为 'attr1$attr2'。在服务器启动期间,Tivoli Directory Server 将在其模式中检查 'attr1' 是否是有效的属性。如果直通服务器正在运行,它还会尝试 'attr2' 是否是直通服务器模式中的有效属性。如果对直通服务器中的 'attr2' 的验证失败,将发出警告。Tivoli Directory Server 中的 'attr1' 是一个单一值。除了直通身份验证,还将在直通服务器中查找由过滤器('attr2' = Tivoli Directory Server 中的 'attr1' 的值)标识的条目,而该过滤器包含在由 ibm-slapdPtaSearchBase 标识的子树中。这个查找应该得到直通服务器中的一个条目。如果返回了多个条目,则表明绑定失败。如果在直通服务器中找到了单个对应的条目,将对它进行绑定。
  • ibm-slapdPtaBindDN:在定义属性映射时,这个必需属性指出在执行查找时要用于绑定到直通服务器的区分名。
  • ibm-slapdPtaBindPW:在定义属性映射时,这个必需属性指出在执行查找时要用于绑定到直通服务器的绑定密码。
  • ibm-slapdPtaSubtree:这个必须包含的多值属性指向本地目录中的子树,Tivoli Directory Server 将对该子树执行直通身份验证。不能将 cn=configuration、cn=schema、cn=pwdpolicy、cn=ibmpolicies 和 cn=changelog 等特殊子树用作此属性的值。也不能将嵌套的子树用作此属性的值(比如 c=US 和 o=ibm,c=US 都不能指定为此属性的值)。如果指定了这样的子树,服务器将无法在正常模式下启动。
  • ibm-slapdPtaResultTimeout:这是一个可选属性,用来定义 Tivoli Directory Server 将等待获得对直通服务器的绑定操作结果的时间(以毫秒为单位)。如果在定义的时间内没有收到结果,Tivoli Directory Server 将向客户端返回 LDAP_INVALID_CREDENTIALS。默认超时为 1000 ms。值 0 表示绑定操作将不等待,在检查结果之后将立即返回。只能设置 0 到 60000 ms(1 分钟)之内的值。
  • ibm-slapdPtaMigratePwd:这个可选的属性表明,在向直通目录成功发送绑定请求之后,应该将绑定凭据迁移到本地目录(Tivoli Directory Server)。如果配置中缺少此属性,默认行为将是不执行凭据迁移。一旦执行了凭据迁移,将针对本地目录为该条目执行后续绑定操作,而不是针对直通目录执行。
  • ibm-slapdPtaConnectionPoolSize:这个可选属性表示要打开来处理常见绑定请求的直通服务器连接数量。此属性旨在改善直通身份验证的性能,但是,当直通目录服务器销毁了不活动连接时,通过此选项创建连接池可能收效甚微。此属性支持从 2 到 15 之内的值。如果缺少此属性,将创建一个大小为 4 的连接池。
  • ibm-ptaReferral:这个辅助的 objectclass 与一个 Tivoli Directory Server 条目相关联,以定义直通服务器中特定条目的映射。它包含 ibm-ptaLinkAttribute 和 ibm-ptaLinkValue 属性。
  • ibm-ptaLinkAttribute:如果此属性的值为 _DN_,那么相应的 ibm-ptaLinkValue 的值将是直通服务器中的条目的区分名,这消除了对查找的需求。如果此属性的值为 _DISABLE_,那么将对此条目禁用直通身份验证。在所有其他情况下,此属性将存储将用于在直通服务器中执行查找的属性名称。这个属性是必需的,因为 ibm-slapdPtaAttrMapping 属性中定义的属性映射适用于所有条目。如果一个条目需要某种特殊的属性映射,那么可以通过此属性获得。
  • ibm-ptaLinkValue:这个必需属性保存与 ibm-slapdPtaLinkAttribute 相对应的值。

Tivoli Directory Server 和 secldap 的配置步骤

本节将介绍在 Tivoli Directory Server 上配置直通身份验证和在 secldapclntd 后台程序配置中进行修改所需的步骤。在这里我们将那个配置分解为两部分。第一部分包含从头配置全新安装的步骤。第二部分假设已经存在一个 secldap/Tivoli Directory Server 安装,并需要对它进行扩展,将直通身份验证用于现有安装,以验证来自任何其他数据源的用户。

全新安装的配置步骤

我们在本文中演示的示例安装为 Attribute Mapping,其中 Attribute Mapping 在本地配置,它的条目也在本地显示。在这种情景下,该条目在 Tivoli Directory Server 中本地显示,且可以确定 Tivoli Directory Server 中的一个属性拥有与直通服务器中的一个属性的一对一映射。Tivoli Directory Server 和直通服务器中将要映射的属性不必具有相同名称。当对 Tivoli Directory Server 发出绑定请求并定义属性映射之后,将在直通服务器上查找一个条目,该条目在直通服务器中的映射属性的值与在 Tivoli Directory Server 中的映射属性的值相同。如果找到这样的条目,则使用通过 Tivoli Directory Server 客户端应用程序传入的凭据对该条目执行绑定。

在本例中,管理员负责确定在 Tivoli Directory Server 和直通服务器中唯一标识该条目的属性。如果不能在各个条目中找到唯一标识每个条目的通用属性,那么可以使用 ibm-slapdPtaReferral objectclass 中的链接属性为每个条目显式定义属性映射。

图 2. 目标配置
该图展示了一个目标配置和直通服务器
清单 1. 添加用户 aixauth
# idsadduser -g idsldap -l /home/aixauth -u aixauth -w aixauth
清单 2. 创建 Tivoli Directory Server 实例
# idsicrt -I aixauth -e abcd1234567890 -l /home/aixauth -n
清单 3. 使用 Tivoli Directory Server 实例配置数据库
# idscfgdb -I aixauth -l /home/aixauth -a aixauth -w aixauth -t aixauth -n
清单 4. 配置管理员区分名和密码
# idsdnpw -I aixauth -u cn=root -p root -n
清单 5. 配置 cn=aixdata 后缀
# idscfgsuf -I aixauth -s cn=aixdata -n
清单 6. 启动 Tivoli Directory Server 实例来更改默认的密码加密算法
# ibmslapd -I aixauth -n
清单 7. 在 Tivoli Directory Server 上启用直通身份验证
Create an ldif file:

====enablepta.ldif Begins====
dn : cn=configuration
changetype : modify
replace : ibm-slapdPtaEnabled
ibm-slapdPtaEnabled : TRUE
===enablepta.ldif Ends====

Command to enable pass-through authentication:

# idsldapmodify -D cn=root -w root -i <path for enablepta.ldif>
清单 8. 添加直通配置
Create an ldif file:

====ptaconfig.ldif Begins====
dn: cn=PassthroughServer1, cn=Passthrough Authentication, cn=Configuration
cn: PassthroughServer1
ibm-slapdPtaURL: ldap://9.182.194.84:389
ibm-slapdPtaSubtree: cn=aixdata
ibm-slapdPtaAttrMapping: uid $ sAMAccountName
ibm-slapdPtaSearchBase: CN=Users,DC=tamesso,DC=com
ibm-slapdPtaBindDN: CN=Administrator,CN=Users,DC=tamesso,DC=com
ibm-slapdPtabindPW: tivoli@123
objectclass: top
objectclass: ibm-slapdConfigEntry
objectclass: ibm-slapdPta
objectclass: ibm-slapdPtaExt

===ptaconfig.ldif Ends====

Command to enable pass-through authentication:

# idsldapmodify -D cn=root -w root -i <path for ptaconfig.ldif>

***Note : 
1. With the configuration entry given in this listing, we are setting up Pass-through
   Authentication for the subtree cn=aixdata. Any bind request arriving at the Tivoli
   Directory Server server for the user under this subtree will be a candidate for PTA. 
	   
2. Pass-through Authentication will be performed at the server located at the 
   location ldap://9.182.194.84:389. 
	   
3. On the destination server, a search will be performed under the subtree
   CN=Users,DC=tamesso,DC=com.

4. While binding to the PTA server, Tivoli Directory Server will use the 
   DN as N=Administrator,CN=Users,DC=tamesso,DC=com and the password as tivoli@123.
	   
5. With the attribute mapping defined as uid $ sAMAccountName, any value associated 
   with uid in the Tivoli Directory Server will be looked for in the sAMAccountName
   attribute in the destination PTA server.
清单 9. 停止 Tivoli Directory Server 实例
# ibmslapd -I aixauth -k

现在,我们需要修改用户 ldif 文件,以便删除将通过直通服务器验证的用户的 userpassword 属性。因为我们使用的是 Attribute Mapping 直通身份验证,所以要确保 Tivoli Directory Server 中任何条目的 uid 属性与直通服务器上的特定属性值唯一匹配(依照 ibm-slapdPtaAttrMapping 定义的直通身份验证配置)。

清单 10. 示例用户条目
dn: uid=user1,ou=People,cn=aixdata
uid: user1
objectClass: aixauxaccount
objectClass: shadowaccount
objectClass: posixaccount
objectClass: account
objectClass: ibm-securityidentities
objectClass: top
cn: user1
passwordchar: !
uidnumber: 205
gidnumber: 14
homedirectory: /home/ldapdb2
loginshell: /usr/bin/ksh
isadministrator: false
shadowlastchange: 14203
passwordflags: NOCHECK
ixtimelastlogin: 1227177141
hostlastlogin: braziltivl2
unsuccessfullogincount: 0

**Note: 
1. attributes might be different, and their values can be different too.
2. Userpassword attribute has been removed.
3. As per the configuration in listing8 ( ibm-slapdPtaAttrMapping: uid $ sAMAccountName)
   uid has been set to user1. This will uniquely map this entry to the entry on the
   Pass-through Server.
清单 11. 将 ldif 文件导入到 Tivoli Directory Server
# idsldif2db -I aixauth -i <path of user.ldif file>
清单 12. 配置 secldap 客户端
# mksecldap -c -h secldaptds.ibm.com -a cn=root -p root
清单 13. 停止 secldapclntd 后台程序
# stop-secldapclntd
清单 14. 备份现有 ldap.cfg 文件
# cp /etc/security/ldap/ldap.cfg <a safe location>
清单 15. 编辑 ldap.cfg 文件
Edit the value for ldap_auth parameter and set it to ldap_auth.
By default it is set unix_auth

auth_type:ldap_auth
清单 16. 启动 secldapclntd 后台程序
# start-secldapclntd

现有安装的配置步骤

上一节演示了从头配置全新安装的步骤。本节将介绍修改现有安装需要执行的步骤。读者可以查找能帮助他们修改现有安装的步骤,以在 Tivoli Directory Server 中利用直通身份验证功能的优势。当一家企业收购了另一家企业时总是会寻找修改现有安装的步骤,不可能将新收购企业的 LDAP 中的所有用户迁移到现有 LDAP 服务器。作为一个修改现有安装的示例,我们展示了大多数实现中都存在的一个非常简单的安装。

图 3. 现有配置
该图演示了一个使用 Tivoli Directory Server 的现有配置

以下步骤将以前的安装转换为如 图 2 所示的新安装。

清单 16b. 停止 secldapclntd 后台程序
# stop-secldapclntd
清单 17. 备份现有 ldap.cfg 文件
# cp /etc/security/ldap/ldap.cfg <safer location>
清单 18. 编辑 ldap.cfg 文件
Edit the value for ldap_auth parameter and set it to ldap_auth.
By default it is set unix_auth

auth_type:ldap_auth
清单 19. 启动 secldapclntd 后台程序
# start-secldapclntd
清单 20. 在 Tivoli Directory Server 上启用直通身份验证
Create an ldif file:

====enablepta.ldif Begins====
dn : cn=configuration
changetype : modify
replace : ibm-slapdPtaEnabled
ibm-slapdPtaEnabled : TRUE
===enablepta.ldif Ends====

Command to enable pass-through authentication:

# idsldapmodify -D cn=root -w root -i <path for enablepta.ldif>
清单 21. 添加直通配置
Create an ldif file:

====ptaconfig.ldif Begins====
dn: cn=PassthroughServer1, cn=Passthrough Authentication, cn=Configuration
cn: PassthroughServer1
ibm-slapdPtaURL: ldap://9.182.194.84:389
ibm-slapdPtaSubtree: cn=aixdata
ibm-slapdPtaAttrMapping: uid $ sAMAccountName
ibm-slapdPtaSearchBase: CN=Users,DC=tamesso,DC=com
ibm-slapdPtaBindDN: CN=Administrator,CN=Users,DC=tamesso,DC=com
ibm-slapdPtabindPW: tivoli@123
objectclass: top
objectclass: ibm-slapdConfigEntry
objectclass: ibm-slapdPta
objectclass: ibm-slapdPtaExt

===ptaconfig.ldif Ends====

Command to enable pass-through authentication:

# idsldapmodify -D cn=root -w root -i <path for ptaconfig.ldif>

我们需要 Primary Tivoli Directory Server 中的一个示例用户条目来表示必须对其执行直通身份验证的用户。如果必须对一个条目执行直通身份验证,那么删除 userpassword 属性并保留其他属性不变。通常,当收购一家新企业之后,无法导入所收购企业的现有 LDAP 服务器中的所有用户数据。在这种情况下,可能需要在所收购企业的 LDAP 服务器上创建一个包含最少必需属性的简单条目,让直通身份验证功能来处理对这些用户的身份验证。在这种情况下,只要来自所收购企业的员工的身份验证请求到达主企业的 LDAP 服务器,将定位相应的条目,但由于 userpassword 属性不可用,所以直通身份验证模块将接管操作并使用直通服务器来验证用户。

清单 23. 重启 Tivoli Directory Server 实例
# ibmslapd -I aixauth -k
# ibmslapd -I aixauth -n

一个复杂场景的示例

Secldapclntd 后台程序常常配置来使用高度可用的 Tivoli Directory Server 安装。可以使用 Master-Master 重复配置保持 Tivoli Directory Server 高度可用。在这种安装中,一个重复的 Tivoli Directory Server 用作主要服务器,而另一个用作辅助服务器。所有读/写请求都主要发送到主要服务器。对主要服务器的任何更新会立即复制到辅助服务器,以维护一个活动数据副本。在这种情况下,当无法联系主要服务器,或者它由于某种问题而关闭时,secldapclntd 后台程序将自动切换到辅助服务器。这样就实现高可用性,避免了任何宕机。

图 4. 现有配置
该图演示了一个现有配置,它使用了 Tivoli Directory Server 和一个直通 Domino Directory

在该图中,AIX 客户端根据优先级和可用性联系在后端配置的两个 Tivoli Directory Server 之一。我们可以在两个后端服务器上都包含直通身份验证设置,这样,当未在 Tivoli Directory Server 中找到 userpassword 时,将引用直通 Domino Directory(本示例就是这么做的)。secldap 端的所有其他配置保持不变。


使用 Tivoli Directory Server 直通身份验证的一些限制

  • 直通身份验证还涉及许多其他场景。我们仅使用了一种场景,条目在本地显示,userpassword 也不可用于 Tivoli Directory Server。我们使用此场景是因为,这个场景最适合本文的演示。其他直通身份验证场景包括条目不在本地显示的情形。但是,在此场景中,secldap 不能从 Tivoli Directory Server 进行身份验证,条目必须显示在 Tivoli Directory Server 上,尽管 userpassword 可能丢失。
  • 对于将使用直通服务器进行身份验证的用户,不能使用 passwd 命令来更改用户的密码。这是因为直通身份验证功能不会更新直通服务器上的任何值。运行 passwd 命令将在主要 Tivoli Directory Server 上添加 userpassword,可能最终导致 LDAP 服务器不同步。Tivoli Identity Manager 可用于同步密码和解决此限制。

参考资料

学习

  • IBM Tivoli Directory Server 文档:包含关于安装、配置、管理和使用 Tivoli Directory Server 的信息。
  • 了解关于 secldapclntd 后台程序 的更多信息。
  • 获取产品和技术!下载 IBM 产品评估版,并开始使用来自 DB2®、Lotus®、Rational®、Tivoli® 和 WebSphere® 的应用程序开发工具和中间件产品。
  • developerWorks 文章:High scalability and availability of AIX secldapclntd using the Tivoli Directory Server proxy
  • AIX and UNIX 专区:developerWorks 的“AIX and UNIX 专区”提供了大量与 AIX 系统管理的所有方面相关的信息,您可以利用它们来扩展自己的 UNIX 技能。
  • AIX and UNIX 新手入门:访问“AIX and UNIX 新手入门”页面可了解更多关于 AIX 和 UNIX 的内容。
  • AIX and UNIX 专题汇总:AIX and UNIX 专区已经为您推出了很多的技术专题,为您总结了很多热门的知识点。我们在后面还会继续推出很多相关的热门专题给您,为了方便您的访问,我们在这里为您把本专区的所有专题进行汇总,让您更方便的找到您需要的内容。
  • AIX and UNIX 下载中心:在这里你可以下载到可以运行在 AIX 或者是 UNIX 系统上的 IBM 服务器软件以及工具,让您可以提前免费试用他们的强大功能。
  • IBM Systems Magazine for AIX 中文版:本杂志的内容更加关注于趋势和企业级架构应用方面的内容,同时对于新兴的技术、产品、应用方式等也有很深入的探讨。IBM Systems Magazine 的内容都是由十分资深的业内人士撰写的,包括 IBM 的合作伙伴、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=502223
ArticleTitle=扩展 secldap 的功能以验证多个数据源
publish-date=07262010