分类: 系统运维
2012-06-05 09:27:48
本文是用于在 AIX 5L? 和 AIX 610 计算机上实现 IBM Tivoli Directory Server (ITDS) 的详细说明书。本文简要地解释了如何使用 AIX 实用工具和 ITDS 本机命令来创建、配置和取消配置单个或多个目录服务器实例。其中还解释了一些其他问题及其解决办法。
IBM Tivoli Directory Server (ITDS) 是轻量目录访问协议(Lightweight Directory Access Protocol,LDAP)的实现,支持 Windows、AIX、System x?、System z?、System i?、System p?、Linux、Solaris 和 HP-UX。ITDS 是一个功能强大的 LDAP 基础架构,为部署全面的身份管理应用程序和高级软件体系结构提供了基础。ITDS 提供了一个使用 DB2 数据库来存储目录信息的服务器、一个用于将 LDAP 操作路由到其他服务器的代理服务器、一个客户端,以及一个用于管理服务器的图形用户界面 (GUI)。
除了基本的用户名和密码以外,IBM Tivoli Directory Server 还可以使用多种身份验证方法。ITDS 支持基于数字证书的身份验证、访问控制列表、质询-响应身份验证机制 (CRAM-MD5) 密码加密、简单身份验证和安全层 (SASL) 以及 Kerberos 身份验证。
与 LDAP5.2 相比,ITDS 是一个改进的版本。一些重要功能包括:
单台计算机上的多个目录服务器:
从 6.0 版本开始,多个目录服务器实例可以在同一台计算机上共存。其中还包括对目录服务器的多主 (multi-homed) 支持。
安全增强:
复制协议更加安全。
为目录管理员密码提供了密码策略支持。
更改日志数据和复制更改数据更加安全。
性能增强:
对 bulkload 实用工具的增强缩短了使用该实用工具来将 LDAP 条目加载到 DB2 中所花的时间。
搜索处理已经过修改,以改进基本范围的 (base-scoped) 搜索的性能。
单台计算机上的多个服务器和客户端版本:
早期版本 (6.0) 的服务器可以与 6.1 版本的服务器运行在同一台计算机上。
早期版本(4.1、5.1、5.2 或 6.0)的客户端可以与 6.1 版本的服务器运行在同一台计算机上。
6.1 版本的客户端可以与 4.1、5.1、5.2 或 6.0 版本的服务器运行在同一台计算机上。
服务器和客户端实用工具
IBM Tivoli Directory Server SDK 工具包包括几个用于操作目录服务器和数据库的命令行实用工具。有关所有服务器和客户端实用工具的列表,请参阅参考资料部分。虽然本文仅介绍了必需的实用工具,但是您可以利用这些实用工具来简化管理。
从 6.1 版开始,不再为 LDAP 客户端和服务器命令创建系统链接。可以使用 idslink 实用工具来设置指向诸如 idsldapmodify 和 idsldapadd 等命令行实用工具和指向诸如 libIBMldap 等库的链接。例如,如果某台计算机同时安装了 6.0 和 6.1 版本的客户端-服务器文件集,则会为所有的 6.0 版客户端-服务器命令行实用工具生成缺省的系统链接。如何通过删除 6.0 版来为 6.1 版创建链接呢?
可以使用 idsrmlink 命令行实用工具来删除由 6.0 版 idslink 命令设置的指向客户端和服务器实用工具的链接。
# /opt/IBM/ldap/V6.0/bin/idsrmlink -i -l 64 -s fullsrv
然后使用 idslink 实用工具为 6.1 版创建新的链接。请参见 idslink 用法以了解标志说明。
# /opt/IBM/ldap/V6.1/bin/idslink -i -l 64 -s fullsrv
先决条件
下表显示了支持 IBM Tivoli Directory Server 6.1 的 AIX 版本。
AIX on pSeries(64 位/32 位)
操作系统版本 |
64 位目录服务器组件 |
32 位目录服务器组件 |
AIX 5.2(ML5 或更高级别的客户端和服务器) |
客户端、服务器、Web 管理工具 |
客户端(仅有操作系统实用工具安装) |
AIX 5.3(TL1 或更高级别的客户端和服务器) |
客户端、服务器、Web 管理工具 |
客户端(仅有操作系统实用工具安装) |
AIX 6.1 GA |
客户端、服务器、Web 管理工具 |
客户端(仅有操作系统实用工具安装) |
软件要求
必备先决条件:
ITDS 文件集。
Universal Database Enterprise Server Edition (ESE)。DB2 V9.1 ESE Fix Pack 2 或 Universal Database Enterprise Server Edition DB2 V8.1
需要 Korn Shell。
验证 AIX 拥有 64 位内核 (bootinfo -K)。
可选先决条件:
安全套接字层(Secure Socket Layer,SSL)连接需要 GSKit 7.0.3.30。要使用 GSKit,将需要 IBM JDK 1.5 或等效的 JDK。
GSKit 需要 xlC.AIX50rte 6.0.0.0 或更高版本的文件集。
需要 Embedded WebSphere Application Server 6.1.0.7 以获得 GUI Web Administration Tool。
硬件要求
验证 AIX 硬件为 64 位。(bootinfo -y)
对于客户端,至少需要 128 MB 的 RAM。要获得更好的性能,可以使用 256 MB 或者更大的内存。
对于服务器内存,每个目录服务器实例至少需要 512 MB,每个数据库实例至少需要 256 MB,另外还需要 1 GB 来运行 Web Administration Tool 和 Embedded WebSphere Application Server。
一个完整的服务器(包括客户端、服务器和数据库)至少需要 2 GB 的磁盘空间。 其他要求:
对于服务器,要确保启用异步 I/O。要启用异步 I/O,可以执行以下步骤:
# /usr/sbin/chdev -l aio0 -P # /usr/sbin/chdev -l aio0 -P -a autoconfig=available
技巧:要安装上面提到的文件集,可以使用交互式的“smitty installp”或
#installp -acgvXYd "fileset location" "fileset list"
使用 AIX 实用工具配置 ITDS 6.1
mksecldap 是用于配置 ITDS 6.1 的脚本。AIX 在 bos.rte.security 组件下面附带了用于 LDAP 客户端-服务器配置的 mksecldap 命令。ldapdb2 是在执行 mksecldap 时创建的缺省目录服务器实例和 DB2 实例。可以使用“smitty ldap”进行交互式配置。
对于非 SSL,可以执行以下步骤:
# mksecldap -s -a cn=admin -p adminpasswd -S rfc2307AIX -d o=IBM
对于 SSL,可以执行以下步骤:
# mksecldap -s -a cn=admin -p adminpasswd -S rfc2307AIX -d o=IBM -u NONE -k [ssl key_db file] -w [ssl key passwd]
有关整体的 SSL 配置,请参考 IBM Tivoli Directory Server 6.0 的 SSL 配置。
在成功完成时,ITDS 6.1 将使用 ldapdb2 实例开始运行,并侦听非安全端口 389。
# ps -eaf |grep IBM ldapdb2 307360 1 0 May 08 - 0:16 /opt/IBM/ldap/V6.0/sbin/64/IBMdiradm -I ldapdb2 ldapdb2 782344 1 5 01:50:46 pts/0 4:45 /opt/IBM/ldap/V6.0/sbin/64/IBMslapd -n -I ldapdb2 -f /home/ldapdb2/idsslapd-ldapdb2/etc/IBMslapd.conf
mksecldap 具有仅创建一个缺省目录服务器和数据库实例的限制。要配置多个实例,请参阅 Configuring multiple instances of ITDS 6.1 on AIX。
在 AIX 上配置多个 ITDS 6.1 实例
ITDS 6.0 引入了位于数据库实例之上的目录服务器实例的新架构。在 ITDS 6.0 以前的版本中,不存在目录实例。因此,仅有一个缺省 DB2 实例配置到一个 DB2 数据库。从 6.0 版开始,可以将“n”个目录服务器实例配置到“n”个 DB2 实例或 DB2 数据库。
图 1. 配置服务器身份验证
让我们通过观察此图来开始配置过程。
创建目录服务器实例 ID
此 ID 可以是现有的用户 ID 或新的用户 ID。该用户 ID 必须满足以下要求:
最多包括 8 个字符。
将其主要组设置为 idsldap。
拥有自己的主目录。
拥有有效的工作密码。
Root 用户必须是该用户的主要组 (idsldap) 的成员。
# mkuser pgrp=idsldap groups=staff home=/home/tam shell=/usr/bin/ksh tam
使这个新用户密码有效并且可用于登录
# passwd tam ...and set the password (to passw0rd) # telnet 'hostname' ...change the password when asked (to passw0rd)
或者,idsadduser 命令将一次性创建 DB2 和目录服务器实例的所有者和组。
# idsadduser -l "home_dir" -g "group_name" -u "user_name" -w "user_passwd" -n
使用 idsicrt 命令创建目录服务器实例。
# idsicrt -I tam -e tamencryption -n
将为第一个实例选择缺省端口号 389。对于创建的第二和第三个实例,将选择端口号 1389 和 2389。系统将自动选择其余的端口号。
数据库实例名称同时也是 DB2 实例的所有者 ID。建议省略此选项,并让系统选择将目录服务器实例的所有者名称作为 DB2 实例名称。
现在列出计算机上的可用实例,并确认您的实例存在。
# idsilist Directory server instances: ldapdb2 tam
设置所创建的目录实例的管理员 DN 和密码。
# idsdnpw -I tam -u cn=tam -p tam -n You have chosen to perform the following actions: GLPDPW004I The directory server administrator DN will be set. GLPDPW005I The directory server administrator password will be set. GLPDPW009I Setting the directory server administrator DN. GLPDPW010I Directory server administrator DN was set. GLPDPW006I Setting the directory server administrator password. GLPDPW007I Directory server administrator password was set.
为目录实例配置数据库。
DB2 实例是存储数据的实际数据库,该数据库又与目录服务器实例相关联。当您配置数据库时,有关该数据库的信息将添加到 ITDS 配置文件 (IBMslapd.conf)。
配置之前,
停止目录服务器。如果这是初始配置,则服务器不应该在运行。不过,可以通过运行 ps -eaf 并确保 IBMslapd 未运行来验证这一点。
取消变量 DB2COMM 的设置(unset DB2COMM)。
下面运行 idscfgdb来为目录实例配置数据库。确保该实例的所有者“tam”拥有 /home/tam 目录的 rwx 权限。
# /usr/bin/idscfgdb -I tam -t tam -l /home/tam -a tam -w passw0rd GLPCDB023I Database 'tam' will be configured. GLPCDB024I Database 'tam' will be created at '/home/tam' Do you want to.... (1) Continue with the above actions, or (2) Exit without making any changes:1 GLPCDB035I Adding database 'tam' to directory server instance: 'tam'. GLPCTL017I Cataloging database instance node: 'tam'. GLPCTL018I Cataloged database instance node: 'tam'. GLPCTL008I Starting database manager for database instance: 'tam'. GLPCTL009I Started database manager for database instance: 'tam'. GLPCTL026I Creating database: 'tam'. GLPCTL027I Created database: 'tam'. GLPCTL034I Updating the database: 'tam' GLPCTL035I Updated the database: 'tam' GLPCTL020I Updating the database manager: 'tam'. GLPCTL021I Updated the database manager: 'tam'. GLPCTL023I Enabling multi-page file allocation: 'tam' GLPCTL024I Enabled multi-page file allocation: 'tam' GLPCDB005I Configuring database 'tam' for directory server instance: 'tam'. GLPCDB006I Configured database 'tam' for directory server instance: 'tam'. GLPCTL037I Adding local loop back to database: 'tam'. GLPCTL038I Added local loop back to database: 'tam'. GLPCTL011I Stopping database manager for the database instance: 'tam'. GLPCTL012I Stopped database manager for the database instance: 'tam'. GLPCTL008I Starting database manager for database instance: 'tam'. GLPCTL009I Started database manager for database instance: 'tam'. GLPCDB003I Added database 'tam' to directory server instance: 'tam'.
下面,启动您的目录服务器实例,并确保其正常启动而没有任何错误。
# IBMslapd -n -I tam -f /home/tam/idsslapd-tam/etc/IBMslapd.conf
可以通过运行 ps -fu并确保 IBMslapd 和 IBMdiradm 进程都在为“tam”实例运行,从而进行交叉检查。
# ps -fu tam | grep IBM tam 671768 1 0 02:31:18 pts/0 0:00 /opt/IBM/ldap/V6.1/sbin/64/IBMdiradm -I tam tam 1695814 1 0 02:43:01 pts/0 0:00 /opt/IBM/ldap/V6.1/sbin/64/IBMslapd -n -I tam -f /home/tam/idsslapd-tam/etc/IBMslapd.conf
此外,务必检查服务器不是仅以配置模式启动!
# idsldapsearch -D cn=tam -w tam -p 1389 -s base -b "" objectclass=* | grep IBM-slapdisconfigurationmode IBM-slapdisconfigurationmode=FALSE
如果 IBM-slapdisconfigurationmode 为 TRUE,则在继续之前纠正问题。查看 /home/tam/idsslapd-tam/logs/ 中的日志并修复问题。在无法纠正问题的情况下,应取消该实例的配置并从头开始。
现在该计算机已经准备好了,并带有多个目录服务器实例。
各个实例的配置文件位于 /home/"instance name"/idsslapd-"instance 名称"/etc/IBMslapd.conf,例如,对于“tam”实例,该配置文件位于 /home/tam/idsslapd-tam/etc/IBMslapd.conf。
打开此文件并观察端口号和其他参数的缺省值。
要维护“tam”实例的用户和组信息,可以添加一个高级的后缀。确保在尝试添加高级后缀之前停止该目录服务器实例。
# IBMslapd -k -I tam # idscfgsuf -I tam -s "o=IBM" -n
添加新的后缀并不会在该目录中实际创建对应的 LDAP 对象。您需要按照下面的格式创建一个 LDIF 文件,并将此文件添加到服务器。将 Zip 文件(请参见下载)下载到 Windows 计算机,并通过 FTP 将其传输到 UNIX 计算机。然后,按以下顺序将此信息添加到服务器。
# IBMslapd -n -I tam # idsldapadd -D cn=tam -w tam -p "port num" -v -f ldif_file.ldif # idsldapadd -D cn=tam -w tam -p "port num" -v –f add.containers.ldif # idsldapadd -D cn=tam -w tam -p "port num" -v –f add.AIXid.ldif
add.container LDIF 在 o=IBM 树下面创建“Groups”和“People”存储库。add.AIXid LDIF 创建一些标准 AIX ID 和缺省的“Staff”组。“People”分支代表从 u0 到 uN 的用户集合,其中 N 可以是任意整数。“Groups”分支代表从 grp0 到 grpN 的组集合,其中 N 可以是任意整数。“System”分支用于存储其他(但必需)的身份验证条目信息。请注意,如果 mksecldap 没有找到缺省的“staff”组,则客户端配置将失败。
现在,在启动服务器之后将下面的信息添加到目录中:
# IBMslapd -n -I tam # idsldapadd -D cn=tam -w tam -p "port num" -v -f "ldif file"
要了解端口号,可以输入 idsilist -a并检查“tam”实例节下面的 Port:。
要针对“tam”服务器实例配置 LDAP 客户端,可以使用端口号作为唯一参数。
# mksecldap -c -h "ldap serv
er" -a cn=tam -p tam -d o=IBM -n 1389
取消配置 ITDS 实例
撤消前面对服务器配置文件的设置:
# mksecldap -s -U
关闭 IBMslapd 和 IBMdiradm 进程:
# /opt/IBM/ldap/V6.1/bin/IBMdirctl -D cn=tam -w tam -p "admin port number" admstop Admin daemon is stopped # /opt/IBM/ldap/V6.1/bin/IBMdirctl -D cn=tam -w tam -p "port num" stop IBMslapd server is stopped.
删除该目录服务器实例:
# idsidrop -I tam -n # echo $? 0
停止对应于“tam”实例的 DB2 实例。作为实例所有者运行以下命令:
# su - tam $ whoami tam $ /home/tam/sqllib/adm/db2stop 02/06/2008 03:50:13 0 0 SQL1064N DB2STOP processing was successful. SQL1064N DB2STOP processing was successful. $ exit
现在删除 DB2 实例:
# /usr/opt/db2_09_01/db2/instance/db2idrop tam # DBI1070I Program db2idrop completed successfully
删除实例所有者和主目录。最后,清空库空间:
# rmuser tam # rm -rf /home/tam/ # slibclean
问题确定
要排除安装问题和执行恢复操作,请参阅 Tivoli Directory Server Troubleshooting installation and uninstallation guide。
有关已知的限制和一般故障排除,请参阅 Tivoli Directory Server Known limitations and general troubleshooting guide。
其他问题
在为目录实例配置数据库时遇到以下问题:
GLPCTL008I Starting database manager for database instance: 'ldapdb2'. GLPCTL010E Failed to start database manager for database instance: 'ldapdb2'. GLPCTL049I Adding TCP/IP services to database instance: 'ldapdb2'. . . GLPCTL008I Starting database manager for database instance: 'ldapdb2'. GLPCTL010E Failed to start database manager for database instance: 'ldapdb2'. GLPCTL026I Creating database: 'ldapdb2'. GLPCTL028E Failed to create database: 'ldapdb2'. The failure might have occurred because the system was not set up correctly before using the tool. GLPCTL011I Stopping database manager for the database instance: 'ldapdb2'. GLPCTL012I Stopped database manager for the database instance: 'ldapdb2'. GLPCDB004E Failed to add database 'ldapdb2' to directory server instance: 'ldapdb2'. GLPCDB026W The program did not complete successfully. View earlier error messages for information about the exact error. Server setup failed.
出现这些问题的原因是多方面的,并且有两个 DB2 错误以类似的方式出现。每当接收到这样的错误时,要尝试的第一件事情是显式地创建一个 DB2 实例。在尝试创建 DB2 实例之前检查是否存在任何实例:
# /usr/opt/db2_09_01/db2/instance/db2ilist ldapdb2
如果存在某个 DB2 实例,则首先使用 db2idrop 删除该实例(有关更多详细信息,请参见上面的部分)。
/usr/opt/db2_09_01/db2/instance/db2icrt -d -a SERVER -s ese -u ldapdb2 ldapdb2
(如果成功创建了该实例,请再次使用 db2idrop 删除它,并且建议让 ITDS 工具为您创建实例。)
此命令是否失败?如果失败,则肯定是 DB2 的问题!
观察目录服务器实例的 DB2 日志中可能已生成的其他错误或警告。日志位于 /tmp/db2icrt.log.*和 /home/ldapdb2/sqllib/db2dump/db2diag.log下面。
如果该日志具有以下错误:
SQL6031N Error in the db2nodes.cfg file at line number "1". Reason code "10". Update DBM cfg SYSADM_GROUP errcode = 8 >>>>>Error message = SQL6031N Error in the db2nodes.cfg file at line number "1". Reason code "10". <<<<< DBI1703E No valid service name or port number found.
则此消息通常表示有一个主机名称方面的问题。db2icrt 脚本调用 db2iutil 脚本,后者发出命令 /usr/bin/uname -n 以获取用于 db2nodes.cfg 的主机名称。运行“/usr/bin/uname –n”,并检查主机名称对系统来说是否正确。如果主机名称正确,则运行 nslookup。此命令应该调出 nslookup 服务器的 IP 地址,然后提示用户提供输入。此时,输入由 uname 命令返回的主机名称,并确认是否成功返回了该主机名称的 IP 地址。如果其中任一个命令失败,请联系系统或网络管理员,以确保该计算机已正确地配置。使用正确的 IP 地址在“/etc/hosts”中添加一个主机条目应该会解决此问题。
尝试登录到客户端计算机的 LDAP 用户遇到以下错误:
AIX Version 5 (C) Copyrights by IBM and by others 1982, 2007. login: u100 u100's Password: [LDAP]: 3004-610 You are required to change your password. Please choose a new one. u100's New password: Enter the new password again: 3004-010 Failed setting terminal ownership and mode. Connection closed.
下面的错误消息可能指示某个组文件被破坏或丢失:“The primary group is missing for user u100!”。
# lsuser -R LDAP -a pgrp u100
因此将该用户添加为 staff 组的成员:
# chuser -R LDAP pgrp=staff u100 # lsuser -R LDAP -a pgrp u100 u100 pgrp=system
重试登录。
目录服务器实例创建失败。
# idsicrt -I ldapdb2 -e myencryption GLPICR123E Unable to determine the ownership and permissions on the directory '/home/ldapdb2'. GLPICR024W The program did not complete successfully. View earlier error messages for information on the exact error.
导致此错误的原因可能是不适当地取消服务器配置,或者目录 /home/ldapdb2 可能已经由其他某个用户所有,并且 idsicrt 正在尝试在该路径创建一个 ldapdb2 实例。检查目录权限:
# ls -ld /home/ldapdb2/ drwxrwxr-x 2 211 dbsysadm 256 Jun 21 04:06 /home/ldapdb2/
用户“211”拥有 /home/ldapdb2。将所有权更改到 ldapdb2 用户并重新运行 idsicrt:
# chown ldapdb2 /home/ldapdb2/ # ls -ld /home/ldapdb2/ drwxrwxr-x 2 ldapdb2 dbsysadm 256 Jun 21 04:06 /home/ldapdb2/
可以在两台不同的计算机上针对某个目录服务器配置两个 LDAP 客户端。假设客户端 1 更改了预先存在的用户“u100”的密码。用户“u100”现在尝试使用客户端 2 进行登录。登录失败。为什么呢?
原因在于,客户端 1 上更改的密码还没有在客户端 2 上得到反映。或者在客户端 2 上重新启动 secldapclntd 守护进程,或者确保在客户端配置期间将 cacheTimeout 值设置为 0:
# restart-secldapclntd //OR # mksecldap -c -h [ldap server] -a bindDN -p bindPassword -d baseDN -t 0
下面的错误发生在实例所有者“ldapdb2”尝试启动 IBMslapd 进程的时候:
# 02/08/08 08:41:13 GLPCOM027E Attempt to bind failed with errno 13 (The file access permissions do not allow the specified action.). 02/08/08 08:41:13 GLPCOM006E SocketInit failed for port 389. 02/08/08 08:41:13 GLPSRV004I Terminating server.
IBMslapd 进程正在侦听特权端口(端口 389)。要使服务器能够使用特权端口(端口号小于 1024 的端口),服务器必须作为 root 启动,以拥有 bind() 到该端口的权限。在 bind() 之后,服务器可以降级(使用 setuid())为作为实例用户运行。因此,要么将端口号更改为大于 1024 并启动服务器,要么作为 root 用户启动该实例。
对于 ldapdb2 实例,如何将“IBMslapd”进程绑定到除 389 以外的端口号呢?
停止 IBMslapd 进程。
更改 /home/ldapdb2/idsslapd-ldapdb2/etc/IBMslapd.conf 中的“dn: cn=Configuration”节下面的 IBM-slapdPort: [new non:ssl port]。
重新启动服务器。
类似地,对于 SSL 连接,请更改“dn: cn=SSL, cn=Configuration”节下面的以下值。
IBM-slapdSecurePort:[新的 ssl 端口]
“idssetport”命令取代上面的过程。
# idssetport -I [instance_name] -p [non:ssl port] -s [ssl port] -n
结束语
在阅读本文之后,读者应该更好地了解了 ITDS。本文没有解释所有的 ITDS 命令行实用工具,建议读者从 Tivoli 信息中心了解这些工具。此外,本文还提到了常用的故障排除技巧。如果您遇到新的问题或者有任何问题解决办法,请访问 AIX 技术/开发人员论坛(请参见参考资料)。