使用 Tivoli Directory Server 代理实现 LDAP 的高可伸缩性和高可用性

secldapclntd 守护进程在本地主机的 AIX® 安全 LDAP 装载模块和 LDAP 服务器之间提供和管理连接,处理从 LDAP 装载模块到 LDAP 服务器的事务。简单的配置步骤不允许指定高可用和可伸缩的后端 LDAP 服务器。本文介绍使用 Tivoli® Directory Server 代理为 secldapclntd 守护进程配置高可用和可伸缩的后端 LDAP 的步骤。

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。



2009 年 10 月 12 日

简介

在任何分布式环境中,为了提供普遍的访问,都需要一致的身份验证和授权服务。大量这种部署使用 IBM Tivoli Directory Server (TDS) 提供集中的安全管理。

把身份验证和密码服务集中在一起不仅会提高安全性,还会减少相关联的管理成本。对于这个问题,一种出色的解决方案是让一个服务器处理环境中的所有请求。但是,这需要使用高可用的服务器。在任何用户身份验证解决方案中都希望实现高可用性,因为如果身份验证服务器关闭,就可能造成整个企业停止运作。在使用 LDAP 时,有两种解决方法。可以使用 IBM Tivoli Directory Server 提供的复制特性把服务器配置成主-主模式或主-副本模式。在主-主配置中,没有主要服务器,对任何服务器所做的修改都会传播到其他主服务器。在主-副本设置中,在主服务器上执行所有修改,更新传播到一个或多个副本服务器。可以按调度计划执行复制,也可以在主服务器上完成修改之后立即复制。

为了展示一种可伸缩的解决方案,本文在 secldapclntd 配置中引入一个 TDS 代理。在单一 LDAP 服务器中定义大量用户信息会导致响应时间增加,整个系统可能会变慢。为了提高系统的可伸缩性,本文提供一个使用分布式目录的解决方案。在分布式目录环境中,数据跨多个目录服务器分散存储。

代理服务器是一种特殊的 IBM Tivoli Directory Server,它们能够从客户机接收请求并根据需要执行路由。除了对请求进行路由之外,代理服务器还能够执行负载平衡、故障转移和分布式身份验证。环境中的客户机只知道前端的代理服务器,代理服务器背后的服务器集群对于客户机是隐藏的,客户机会看到统一的目录视图。

TDS 代理服务器简介

LDAP 用于存储任何与目录相似的信息,这种信息需要快速查询,更新不太频繁。企业范围的 LDAP 服务器常常存储数百万条目。要支持如此大量的条目和相应的请求,同时又要保证性能不会下降,这就需要高可伸缩硬件。为了解决这些问题,可以使用分布式目录。

引入分布式目录是为了解决性能和可伸缩性问题。分布式目录有助于把大量数据分散在多个服务器上。由于数据是分散存储的,每个服务器要处理的请求数量自然就减少了,这可以简化管理。

通过在分布式目录前面添加代理服务器,可以非常有效地抽象它。客户机只知道代理,代理服务器上配置了后端分布式数据的详细信息。代理服务器还配置了分割数据的方法。这让代理能够从后端获取数据并传输给客户机。代理服务器和后端目录服务器之间的交互对于客户机是完全透明的。代理服务器还可以作为负载平衡器或故障转移管理器。

Tivoli Directory 代理服务器的关键特性包括:

  • 可伸缩性:可伸缩性是目录服务器的一项重要需求。分布式目录可以有效地扩展任何目录设置。

    设置分布式目录有不同的方法。当前可以使用的机制包括:

    • 基于 RDN 散列 的分割:使用目录服务器条目计算一个惟一的散列值。散列值是根据条目的 RDN 计算出来的。在分布目录时,这个散列值映射到特定后端目录服务器中的特定条目。
    • 基于子树 的分割:按照这种分割机制,每个子树驻留在一个单独的后端目录服务器上。
  • 抽象:代理服务器作为一组目录服务器的抽象层。客户机看到一个统一的目录,并不知道后端的数据分布情况。另外,代理服务器和后端目录服务器之间的交互对于客户机是透明的。

用 TDS 代理设置 secldapclntd

对于使用 secldapclntd 和 IBM Tivoli Directory Server 的任何典型设置,可以使用 mksecldap 命令设置客户机和服务器。粗略来说,mksecldap 命令在配置服务器时执行以下步骤:

  1. 创建一个默认的 IBM Tivoli Directory Server 实例 ldapdb2。
  2. 配置其下将存储的 AIX 用户和组的后缀。
  3. 使用本地主机的安全数据库文件中的用户和组信息装载 LDAP 数据库。
  4. 配置 LDAP 服务器管理员 DN 和密码。
  5. 安装用于 LDAP 服务器的 AIX 审计插件。
  6. 启动 LDAP 服务器。
  7. 把默认的密码加密机制改为 crypt。
  8. 在 /etc/inittab 中添加 LDAP 服务器条目 (slapd),以便在重新引导之后自动地重新启动。

本文并不使用 mksecldap 命令设置 LDAP 服务器。不使用 mksecldap 是因为,我们的最终目标是用 TDS 代理服务器配置 AIX 客户机,而不是使用 TDS RDBM 后端。如果使用 mksecldap 命令,就会为 AIX 客户机配置一个 TDS RDBM 服务器。TDS RDBM 服务器有一个 DB2® 后端,这是我们不需要的。

我们需要为 AIX 客户机配置一个 TDS 代理服务器。代理服务器没有 DB2 后端。

所有 AIX 数据出现在 cn=aixdata 子树下面。这个子树包含其他子树,它们包含用户条目、组条目和必需的其他信息。用户信息出现在 ou=people,cn=aixdata 下面。因为子树 ou=people,cn=aixdata 的访问量是最大的,我们要把这个子树分布存储在两个 TDS 后端服务器上,让负载分布在代理背后的两个后端服务器上。顶级子树基 cn=aixdata 只放在代理背后的一个后端服务器上。

我们要设置一个环境,其概况如下图所示:

图 1. 示例配置
示例配置

详细信息如下:

  1. TDS 代理:TDS 代理是 Tivoli Directory Proxy Server,环境中的客户机意识到它的存在。
  2. 蓝线:代理服务器后面的蓝线显示 cn=aixdata 和 cn=ibmpolocies 的复制拓扑。
  3. 黑线:代理服务器后面的黑线显示 ou=People,cn=aixdata 的复制拓扑。
  4. secldapinst1a 和 secldapinst1b:这些是要复制的部分 RDBM,包含完整的 cn=aixdata 和 cn=ibmpolocies 子树及 ou=People,cn=aixdata 子树的一部分。
  5. secldapinst2a 和 secldapinst2b:这些是要复制的部分 RDBM,包含 ou=People,cn=aixdata 子树的一部分。由于复制拓扑的原因,这里会出现完整的 cn=aixdata(除了 ou=People,cn=aixdata 子树之外)和 cn=ibmpolocies 子树。
  6. Server Group 1:Server Group 1 把 secldapinst1a 和 secldapinst1b 分组在一起,提供高可用性。
  7. Server Group 2:Server Group 2 把 secldapinst2a 和 secldapinst2b 分组在一起,提供高可用性。

为后端设置复制的步骤

我们基本上只关注 cn=aixdata 和 cn=ibmpolicies 下面的数据。cn=aixdata(除了 ou=People,cn=aixdata 子树)和 cn=ibmpolocies 下面的数据在此配置中的所有四个服务器上都出现。在开始设置复制之前,需要按以下步骤创建 TDS 实例,以便准备复制配置。

  • 使用以下命令创建四个 TDS 实例,运行这些命令创建和配置 ITDS RDBM 实例:
    清单 1. 创建和配置 TDS RDBM 实例
    Add user aixauth
    # idsadduser -g idsldap -l /home/aixauth -u aixauth -w aixauth
    
    
    Create TDS instance
    # idsicrt -I aixauth -e abcd1234567890 -l /home/aixauth -n
    
    
    Configure database instance with this TDS instance
    # idscfgdb -I aixauth -l /home/aixauth -a aixauth -w aixauth -t aixauth -n
    
    
    Configure Admin username and password 
    # idsdnpw -I aixauth -u cn=root -p root -n
    
    
    Configure cn=aixdata suffix
    # idscfgsuf -I aixauth -s cn=aixdata -n
    
    
    Start TDS instance to change default password encryption
    # ibmslapd -I aixauth -n
    <
    
    Change default password encryption to crypt
    # idsldapadd -D cn=root -w root
    dn: cn=Configuration
    changetype : modify
    replace : ibm-slapdPwEncryption
    ibm-slapdPwEncryption: crypt

    我们假设在单独的机器上创建这四个实例,每个实例都命名为 aixauth。假设四台机器的主机名是 secldapinst1a.ibm.com、secldapinst1b.ibm.com、secldapinst2a.ibm.com 和 secldapinst2b.ibm.com。

  • 为 cn=aixdata 和 cn=ibmpolicies 设置复制。

    在四个实例之间为 cn=aixdata 子树设置对等复制。cn=aixdata 子树的复制拓扑应该像下面这样:

    图 2. 示例配置
    示例配置
  • secldapinst1a.ibm.com 和 secldapinst1b.ibm.com 作为 Server Group 1,secldapinst2a.ibm.com 和 secldapinst2b.ibm.com 作为 Server Group 2,在每个组的两个实例之间为 ou=people,cn=aixdata 子树设置对等复制。

    在已经设置了复制的条目基下面设置不同的复制拓扑很麻烦。在设置这个拓扑时必须小心。在前一步中,为 cn=aixdata 设置了复制,现在要为 cn=aixdata 下面的 ou=people,cn=aixdata 条目配置不同的复制拓扑。按照 TDS 设计,可以在配置中使用嵌套的复制拓扑。

    这个子树的复制拓扑应该像下面这样:

    图 3. ou=people,cn=aixdata 的复制拓扑
    ou=people,cn=aixdata 的复制拓扑

TDS 代理配置

  • 添加 Global Admin 组成员。

    在任意后端服务器上执行以下命令。只需在一个实例上执行这个操作,因为已经为 cn=ibmpolocies 设置了复制,结果会复制到其他三个服务器。

    清单 2. 添加 Admin Group 成员的命令
    # idsldapadd -h secldapinst1a.ibm.com -D cn=root -w root
    dn: cn=manager,cn=ibmpolicies 
    objectclass: person 
    sn: manager 
    cn: manager 
    userpassword: sec001ret 
    
    # idsldapmodify -h secldapinst1a.ibm.com -D cn=root -w root
    dn: globalGroupName=GlobalAdminGroup,cn=ibmpolicies 
    changetype: modify 
    add: member 
    member: cn=manager,cn=ibmpolicies
  • 创建和配置 TDS 代理实例。

    运行以下命令创建和配置 TDS 代理实例。

    清单 3. 创建和配置 TDS 代理实例
    Add user proxy
    # idsadduser -g idsldap -l /home/proxy -u proxy -w proxy
    
    Create TDS proxy instance
    # idsicrt -I proxy -e abcd1234567890 -l /home/proxy -x -n
    
    Configure Admin username and password # idsdnpw -I proxy -u cn=root -p root -n Start the TDS proxy instance in configuration mode to change default password encryption # ibmslapd -I proxy -a Change default password encryption to crypt # idsldapmodify -h secldapproxy.ibm.com -D cn=root -w root dn: cn=Configuration changetype : modify replace : ibm-slapdPwEncryption ibm-slapdPwEncryption: crypt
  • 在 TDS 代理实例中定义命名上下文。

    在 TDS 代理实例上执行以下命令,添加 cn=aixdata、cn=ibmpolicies 和 ou=people,cn=aixdata 作为命名上下文。

    清单 4. 在 TDS 代理服务器中定义命名上下文
    # idsldapmodify -h secldapproxy.ibm.com -D cn=root -w root 
    dn: cn=ProxyDB, cn=Proxy Backends, cn=IBM Directory, cn=Schemas, cn=Configuration
    changetype : modify
    add : ibm-slapdSuffix
    ibm-slapdSuffix: cn=aixdata
    -
    add : ibm-slapdSuffix
    ibm-slapdSuffix: ou=people, cn=aixdata
    -
    add : ibm-slapdSuffix
    ibm-slapdSuffix: cn=ibmpolicies
  • 向 TDS 代理服务器定义四个后端服务器。

    在 TDS 代理实例上执行以下命令,它向 TDS 代理注册四个后端服务器,连接池大小设置为 10。

    清单 5. 定义后端服务器
    # idsldapadd -h secldapproxy.ibm.com -D cn=root -w root
    dn: cn=secldapinst1a,cn=ProxyDB,cn=Proxy Backends,cn=IBM Directory,\
    cn=Schemas,cn=Configuration 
    cn: secldapinst1a
    ibm-slapdProxyBindMethod: Simple 
    ibm-slapdProxyConnectionPoolSize: 10
    ibm-slapdProxyDN: cn=manager,cn=ibmpolicies
    ibm-slapdProxyPW: sec001ret
    ibm-slapdProxyTargetURL: ldap://secldapinst1a.ibm.com:389
    objectClass: top 
    objectClass: ibm-slapdProxyBackendServer 
    objectClass: ibm-slapdConfigEntry 
    
    # idsldapadd -h secldapproxy.ibm.com -D cn=root -w root 
    dn: cn=secldapinst1b,cn=ProxyDB,cn=Proxy Backends,cn=IBM Directory,\
    cn=Schemas,cn=Configuration 
    cn: secldapinst1b
    ibm-slapdProxyBindMethod: Simple 
    ibm-slapdProxyConnectionPoolSize: 10
    ibm-slapdProxyDN: cn=manager,cn=ibmpolicies
    ibm-slapdProxyPW: sec001ret
    ibm-slapdProxyTargetURL: ldap://secldapinst1b.ibm.com:389
    objectClass: top 
    objectClass: ibm-slapdProxyBackendServer 
    objectClass: ibm-slapdConfigEntry
    
    # idsldapadd -h secldapproxy.ibm.com -D cn=root -w root 
    dn: cn=secldapinst2a,cn=ProxyDB,cn=Proxy Backends,cn=IBM Directory,\
    cn=Schemas,cn=Configuration 
    cn: secldapinst2a
    ibm-slapdProxyBindMethod: Simple 
    ibm-slapdProxyConnectionPoolSize: 10 
    ibm-slapdProxyDN: cn=manager,cn=ibmpolicies
    ibm-slapdProxyPW: sec001ret
    ibm-slapdProxyTargetURL: ldap://secldapinst2a.ibm.com:389
    objectClass: top 
    objectClass: ibm-slapdProxyBackendServer 
    objectClass: ibm-slapdConfigEntry 
    
    # idsldapadd -h secldapproxy.ibm.com -D cn=root -w root 
    dn: cn=secldapinst2b,cn=ProxyDB,cn=Proxy Backends,cn=IBM Directory,\
    cn=Schemas,cn=Configuration 
    cn: secldapinst2b
    ibm-slapdProxyBindMethod: Simple 
    ibm-slapdProxyConnectionPoolSize: 10
    ibm-slapdProxyDN: cn=manager,cn=ibmpolicies
    ibm-slapdProxyPW: sec001ret
    ibm-slapdProxyTargetURL: ldap://secldapinst2b.ibm.com:389
    objectClass: top 
    objectClass: ibm-slapdProxyBackendServer 
    objectClass: ibm-slapdConfigEntry
  • 定义 Server Group 1 和 Server Group 2。

    定义服务器组可以确保高可用性。如果代理服务器无法连接一个后端服务器,或者身份验证失败,那么除非在配置文件中定义了服务器组,否则代理服务器会启动失败,代理服务器在默认情况下会以只配置(configuration-only )模式启动。可以通过服务器组声明几个互为镜像的后端服务器;即使组中的一个或多个后端服务器关闭了,只要有一个后端服务器仍然在线,代理服务器就可以继续处理。如果连接由于某种原因中断了,比如远程服务器停止运行或重新启动,会定期重新启动连接。

    清单 6. 定义服务器组
    # idsldapadd -h secldapproxy.ibm.com -D cn=root -w root
    dn: cn=serverGroupA, cn=ProxyDB, cn=Proxy Backends, cn=IBM Directory,\
     cn=Schemas, cn=Configuration
    cn: serverGroupA
    ibm-slapdProxyBackendServerDN: cn=secldapinst1a,cn=ProxyDB,cn=Proxy Backends,\
     cn=IBM Directory, cn=Schemas,cn=Configuration
    ibm-slapdProxyBackendServerDN: cn=secldapinst1b,cn=ProxyDB,cn=Proxy Backends,\
     cn=IBM Directory, cn=Schemas,cn=Configuration
    objectclass: top
    objectclass: ibm-slapdConfigEntry
    objectclass: ibm-slapdProxyBackendServerGroup
    
    # idsldapadd -h secldapproxy.ibm.com -D cn=root -w root
    dn: cn=serverGroupB, cn=ProxyDB, cn=Proxy Backends, cn=IBM Directory, cn=Schemas,\
     cn=Configuration
    cn: serverGroupB
    ibm-slapdProxyBackendServerDN: cn=secldapinst2a,cn=ProxyDB,cn=Proxy Backends,\
     cn=IBM Directory, cn=Schemas,cn=Configuration
    ibm-slapdProxyBackendServerDN: cn=secldapinst2b,cn=ProxyDB,cn=Proxy Backends,\
     cn=IBM Directory, cn=Schemas,cn=Configuration
    objectclass: top
    objectclass: ibm-slapdConfigEntry
    objectclass: ibm-slapdProxyBackendServerGroup
  • 定义片段。

    执行以下命令在 cn=ibmpolicies、cn=aixdata 和 ou=people,cn=aixdata 下面定义片段。

    清单 7. 定义片段
    ========
    cn=ibmpolicies split definitions :
    ========
    
    # idsldapadd -h secldapproxy.ibm.com -D cn=root -w root
    dn: cn=cn\=ibmpolicies split, cn=ProxyDB, cn=Proxy Backends, cn=IBM Directory,\
     cn=Schemas, cn=Configuration
    cn: cn=ibmpolicies split
    ibm-slapdProxyNumPartitions: 1
    ibm-slapdProxyPartitionBase: cn=ibmpolicies
    ibm-slapdProxySplitName: ibmpolicysplit
    objectclass: top
    objectclass: ibm-slapdConfigEntry
    objectclass: ibm-slapdProxyBackendSplitContainer
    
    # idsldapadd -h secldapproxy.ibm.com -D cn=root -w root
    dn: cn=split1, cn=cn\=ibmpolicies split, cn=ProxyDB, cn=Proxy Backends,\
     cn=IBM Directory, cn=Schemas, cn=Configuration
    cn: split1
    ibm-slapdProxyBackendServerDN: cn=secldapinst1a,cn=ProxyDB,cn=Proxy Backends,\ 
    cn=IBM Directory,cn=Schemas,cn=Configuration 
    ibm-slapdProxyBackendServerRole: any
    ibm-slapdProxyPartitionIndex: 1
    objectclass: top
    objectclass: ibm-slapdConfigEntry
    objectclass: ibm-slapdProxyBackendSplit
    
    ========
    cn=aixdata split definitions :
    ========
    
    # idsldapadd -h secldapproxy.ibm.com -D cn=root -w root
    dn: cn=cn\=aixdata, cn=ProxyDB, cn=Proxy Backends, cn=IBM Directory, cn=Schemas,\
     cn=Configuration
    cn: cn=aixdata
    ibm-slapdProxyNumPartitions: 1
    ibm-slapdProxyPartitionBase: cn=aixdata
    ibm-slapdProxySplitName: ouaixdatasplit
    objectclass: top
    objectclass: ibm-slapdConfigEntry
    objectclass: ibm-slapdProxyBackendSplitContainer
    
    # idsldapadd -h secldapproxy.ibm.com -D cn=root -w root
    dn: cn=split1, cn=cn\=aixdata, cn=ProxyDB, cn=Proxy Backends, cn=IBM Directory,\
     cn=Schemas, cn=Configuration
    cn: split1
    ibm-slapdProxyBackendServerDN: cn=secldapinst1a,cn=ProxyDB,cn=Proxy Backends,\ 
    cn=IBM Directory,cn=Schemas,cn=Configuration 
    ibm-slapdProxyBackendServerRole: any
    ibm-slapdProxyPartitionIndex: 1
    objectclass: top
    objectclass: ibm-slapdConfigEntry
    objectclass: ibm-slapdProxyBackendSplit
    
    ========
    ou=people,cn=aixdata split
    ========
    # idsldapadd -h secldapproxy.ibm.com -D cn=root -w root
    dn: cn=ou\=people\,cn\=aixdata, cn=ProxyDB, cn=Proxy Backends, cn=IBM Directory,\
     cn=Schemas, cn=Configuration
    cn: ou=peple,cn=aixdata
    ibm-slapdProxyNumPartitions: 2
    ibm-slapdProxyPartitionBase: ou=People,cn=aixdata
    ibm-slapdProxySplitName: oupoepleouaixdatasplit
    objectclass: top
    objectclass: ibm-slapdConfigEntry
    objectclass: ibm-slapdProxyBackendSplitContainer
    
    # idsldapadd -h secldapproxy.ibm.com -D cn=root -w root
    dn: cn=split1, cn=ou\=people\,cn\=aixdata, cn=ProxyDB, cn=Proxy Backends,\
     cn=IBM Directory, cn=Schemas, cn=Configuration
    cn: split1
    ibm-slapdProxyBackendServerDN: cn=secldapinst1a,cn=ProxyDB,cn=Proxy Backends,\ 
    cn=IBM Directory,cn=Schemas,cn=Configuration 
    ibm-slapdProxyBackendServerRole: any
    ibm-slapdProxyPartitionIndex: 1
    objectclass: top
    objectclass: ibm-slapdConfigEntry
    objectclass: ibm-slapdProxyBackendSplit
    
    # idsldapadd -h secldapproxy.ibm.com -D cn=root -w root
    dn: cn=split2, cn=ou\=people\,cn\=aixdata, cn=ProxyDB, cn=Proxy Backends,\
     cn=IBM Directory, cn=Schemas, cn=Configuration
    cn: split2
    ibm-slapdProxyBackendServerDN: cn=secldapinst2a,cn=ProxyDB,cn=Proxy Backends,\
    cn=IBM Directory,cn=Schemas,cn=Configuration 
    ibm-slapdProxyBackendServerRole: any
    ibm-slapdProxyPartitionIndex: 2
    objectclass: top
    objectclass: ibm-slapdConfigEntry
    objectclass: ibm-slapdProxyBackendSplit
  • sectoldif —— 把 AIX 本地安全数据迁移到 LDAP

    sectoldif 命令是 AIX 提供的迁移工具,用于把本地安全数据迁移到 LDAP。它把本地系统中的数据直接转换为三个模式之一:RFC2307、RFC2307AIX 或 AIX 模式。数据写到标准输出。然后,可以使用 idsldapadd 命令把 LDIF 文件导入到 LDAP 服务器。

    清单 8. 把系统信息转换为 LDIF 格式
    # sectoldif -d cn=aixdata -S RFC2307 > /tmp/systeminfo.ldif

    运行 sectoldif 命令从现有的 AIX 服务器装载数据,以 LDIF 格式传输用户/组和其他信息。获得这些信息之后,可以直接把输出 LDIF 文件装载到代理服务器。

  • 使用 idsldapadd 命令装载数据。

    获得 LDIF 格式的数据之后,可以使用 idsldapadd 命令轻松地在环境中装载它。在代理服务器上执行这个装载操作。在代理服务器上添加这些信息会确保各个条目分配到正确的代理片段。

    清单 9. 从 LDIF 文件装载数据
    # idsldapadd -h secldapproxy.ibm.com -D cn=manager,cn=ibmpolicies -w sec001ret \
        -c -i /tmp/systeminfo.ldif
  • 使用 mksecldap 命令为客户机配置代理。

    现在,LDAP 服务器已经准备好了。还设置了所需的复制拓扑和代理服务器。

    清单 10. 配置客户机的命令
    # mksecldap -c -h secldapproxy.ibm.com -a cn=manager,cn=ibmpolicies -p sec001ret

在现有的环境中引入 ITDS 代理

在典型的生产环境中,在一个中心 LDAP 服务器上维护用户存储库。所有客户机使用这个 LDAP 服务器执行身份验证。通过一个对等-主 LDAP 服务器维持高可用性。这种拓扑见图 4。

图 4. 典型的身份验证设置
典型的身份验证设置

对于这种设置,需要在现有的基础结构和客户机之间添加一个 ITDS 代理服务器。首先,必须获得基本子树(例如 cn=aixdata)的备份。步骤如下:

  1. 备份 ou=people,cn=aixdata 下面的数据。这个子树包含所有用户数据,比如 gid 号、登录 shell、最后一次登录的详细信息等。
    清单 11. 获得 ou=people,cn=aixdata 的 LDIF 转储
    # idsdb2ldif -I aixauth -s ou=people,cn=aixdata -o /tmp/people.ldif
  2. 备份 ou=people,cn=aixdata 下面的数据之后,删除这个子树,让后面的备份操作不再复制它。
    清单 12. 删除服务器上 ou=people,cn=aixdata 下面的数据
    # idsldapdelete -D cn=root -w root -s ou=people,cn=aixdata
  3. 备份 cn=aixdata 下面的数据。在执行这次备份操作时,ou=people,cn=aixdata 下面没有数据。
    清单 13. 获得 cn=aixdata 的 LDIF 转储
    # idsdb2ldif -I aixauth cn=aixdata -o /tmp/aixdata.ldif
  4. 删除 cn=aixdata 下面的数据。
    清单 14. 删除服务器上 cn=aixdata 下面的数据
    # idsldapdelete -D cn=root -w root -s cn=aixdata
  5. 把密码加密改为 crypt。
    清单 15. 把默认的密码加密改为 crypt
    # idsldapadd -D cn=root -w root
    dn: cn=Configuration
    changetype : modify
    replace : ibm-slapdPwEncryption
    ibm-slapdPwEncryption: crypt
  6. 创建两个新实例。使用现有的对等复制设置建立一个服务器组(比如 图 1 所示的 Server Group 1)。在这个组中添加两个新实例,它们作为另一个服务器设置,包含完整的 cn=aixdata 子树、cn=ibmpolicies 子树和部分 ou=people,cn=aixdata 子树。
    清单 16. 在两个不同的服务器上创建两个新实例
    Add user aixauth
    # idsadduser -g idsldap -l /home/aixauth -u aixauth -w aixauth
    
    Create TDS RDBM instance
    # idsicrt -I aixauth -e abcd1234567890 -l /home/aixauth -n
    
    Configure database instance with this TDS instance
    # idscfgdb -I aixauth -l /home/aixauth -a aixauth -w aixauth -t aixauth -n
     
    Configure Admin username and password 
    # idsdnpw -I aixauth -u cn=root -p root -n
     
    Configure cn=aixdata suffix
    # idscfgsuf -I aixauth -s cn=aixdata -n
     
    Start TDS instance to change default password encryption
    # ibmslapd -I aixauth -n
     
    Change default password encryption to crypt
    # idsldapadd -D cn=root -w root
    dn: cn=Configuration
    changetype : modify
    replace : ibm-slapdPwEncryption
    ibm-slapdPwEncryption: crypt
  7. 必须按以下步骤设置环境。因为前面已经详细介绍了这些步骤,下面只列出它们并引用前面的内容/代码清单。

    • 在四个 TDS 实例之间为 cn=aixdata 和 cn=ibmpolicies 配置复制。两个实例来自现有的环境,另外两个实例是在 清单 14 中创建的。
    • 在任意服务器上装载 /tmp/aixdata.ldif 文件中的数据。这个 LDIF 文件是通过 清单 13 收集的。
    • 在服务器上添加缺少的 ou=people,cn=aixdata 条目。
    • secldapinst1a.ibm.com 和 secldapinst1b.ibm.com 作为 Server Group 1,secldapinst2a.ibm.com 和 secldapinst2b.ibm.com 作为 Server Group 2,在每个组的两个实例之间为 ou=people,cn=aixdata 子树设置对等复制拓扑。这个拓扑应该像 图 3 那样。
    • 按照 TDS 代理配置 中介绍的步骤配置代理服务器。
    • 添加通过 清单 13 收集的 aixdata.ldif 中的数据。
  8. 可以使用下面的 idsldapadd 命令:
    清单 17. 装载 LDIF 中的数据
    # idsldapadd -h secldapproxy.ibm.com -D cn=manager,cn=ibmpolicies -w sec001ret \ 
                -c -i /tmp/aixdata.ldif
  9. 使用 mksecldap 命令为客户机配置代理。
    清单 18. 配置客户机的命令
    # mksecldap -c -h secldapproxy.ibm.com -a cn=manager,cn=ibmpolicies -p sec001ret

参考资料

学习

  • IBM Tivoli Directory Server 文档 包含关于安装、配置、管理和使用 Tivoli Directory Server 的信息。
  • 了解关于 secldapclntd 守护进程 的更多信息。
  • ITDSv6.1 Proxy Server 简介
  • AIX and UNIX 专区:developerWorks 的“AIX and UNIX 专区”提供了大量与 AIX 系统管理的所有方面相关的信息,您可以利用它们来扩展自己的 UNIX 技能。
  • AIX and UNIX 新手入门:访问“AIX and UNIX 新手入门”页面可了解更多关于 AIX 和 UNIX 的内容。
  • AIX and UNIX 专题汇总:AIX and UNIX 专区已经为您推出了很多的技术专题,为您总结了很多热门的知识点。我们在后面还会继续推出很多相关的热门专题给您,为了方便您的访问,我们在这里为您把本专区的所有专题进行汇总,让您更方便的找到您需要的内容。

获得产品和技术

  • 下载 IBM 产品评估版,试用这些来自 DB2®、Lotus®、Rational®、Tivoli® 和 WebSphere® 的应用程序开发工具和中间件产品。

讨论

条评论

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=434799
ArticleTitle=使用 Tivoli Directory Server 代理实现 LDAP 的高可伸缩性和高可用性
publish-date=10122009