tqsheng

go.....
随笔 - 366, 文章 - 18, 评论 - 101, 引用 - 0
数据加载中……

利用 LDAP 实现 IBM Rational ClearCase 和 ClearQuest 集成开发环境下的账号统一管理

利用 LDAP 实现 IBM Rational ClearCase 和 ClearQuest 集成开发环境下的账号统一管理

 

马 玲, 软件工程师, IBM
易 传佳, 软件工程师, IBM

 

简介: Rational ClearCase 和 DB2 都借助于操作系统的账号,Rational ClearQuest 则有自己的一套用户管理系统,在集成开发环境中,对于用户和管理员来说,都比较复杂。本文实现用 Windows LDAP 集中管理和认证 ClearCase 多个平台的账号,以及 ClearQuest 和后台使用的 DB2。这样方便管理和维护,对于开发和测试人员来多个用户和密码也合并为一个。

 

发布日期: 2009 年 8 月 28 日
级别: 初级
访问情况 : 1030 次浏览
评论: 1 (查看 | 添加评论 - 登录)

平均分 4 星 共 4 个评分 平均分 (4个评分)
为本文评分

 

简介

IBM Rational ClearCase(以下简称 ClearCase)是业界非常优秀的软件版本控制工具和软件资源配置管理工具;IBM Rational ClearQuest(以下简称 ClearQuest )是用于软件变更管理和缺陷跟踪的工具。在实际的软件产品开发过程中,两者的结合使用,提供了真正用于加速软件开发周期和流程的解决方案,会极大地提高开发效率,保证产品的质量。

随着开发团队的扩大,人员的变动,以及开发平台的的多样化(Windows、Linux、Unix……),账号管理的问题日益突出。本文介绍怎样合并 ClearCase 的域账号和 ClearQuest 帐号,实现用一套 MS LDAP 系统支持 ClearCase,ClearQuest,以及后台 DB2 的认证。


现有问题

ClearCase 借助于操作系统的帐号,并且 Windows 机器需要加入域才能使用,这样 ClearCase Window 平台使用 Windows AD 域来管理账号,Clearcase Linux 则使用操作系统的账号。ClearQuest 有自己独立的一套用户管理系统,用户信息存储在后台的用户数据库中。ClearQuest 后台 DB2 的用户认证,也是由操作系统负责的。这样在一个 ClearCase 和 ClearQuest 集成的环境中,就需要管理三套用户数据(域,操作系统,ClearQuest 用户)。

对于一般的开发人员来说则至少要记住 ClearCase Windows 域,Linux/Unix 操作系统的 和 CQ 三套用户名和密码,出于安全考虑还需要定期的修改密码,这对用户来说也是一个很大的负担。

当开发人员的帐号需要创建,权限更改,或者删除时,重复的用户操作至少要在 ClearCase 和 ClearQuest 两边进行。

ClearCase 账号管理的复杂性:如果访问的 code 存储在不同的ClearCase Vob 服务器上,就需要在多个 Linux Clearcase Vob 服务器上对用户进行操作,同样的操作还得在 ClearCase Linux/Unix 客户端执行。

ClearQuest 账号管理复杂性:对于 ClearQuest 管理员来说,不同的项目,可能使用完全独立的 ClearQuest 模式库,一个模式库,对应一套用户系统,这样 ClearQuest 的账号管理本身也不可避免的有重复。


本文的目的

Windows 活动目录域服务器,本身已经具有 LDAP 功能,可以管理 Windows 域账号,本文扩展域服务器,为用户增加 Unix 属性,这样 Linux/Unix 机器上的帐号也使用 AD 域来管理。再介绍如何配置 ClearCase Linux/Unix 机器,以及 ClearQuest 和后台的 DB2 使用该 AD 域进行 LDAP 认证。这样,多个账号管理系统都合并为一套 LDAP 系统,当用户信息改变时,所有系统都可以映射得到最新改动,减少了维护成本。

在开发过程中,如果不使用 LDAP 来集中管理,就会出现上述的多个问题。如下图 1 是 Rational ClearCase、ClearQuest、BuildForge 以及 DB2 利用 LDAP 进行认证的应用场景。本文将分别来介绍每一种应用怎么实现与 LDAP 进行认证。


图 1. 软件开发集成环境下的应用拓扑和用户管理
图 1. 软件开发集成环境下的应用拓扑和用户管理

LDAP 域基本信息和组织结构

LDAP 中的信息是是按照树型结构组织的,具体信息存储在 Entry 条目数据结构中。条目相当于关系数据库中表的记录;DN(Distinguished Name)是用来引用条目的,DN 相当于关系数据库表中的关键字(Primary Key)。每一个条目有多个属性,属性是由类型(Type) 和一个或多个值 (Values) 组成,相当于关系数据库中的字段 (Field) 由字段名和数据类型组成。

在下面的配置中,DC 指一条记录所属区域;OU 指一条记录所属组织;CN/UID 指一条记录的名字或 ID。

LDAP 的信息是以树型结构存储的,在树根一般定义国家(C=CN)或域名(DC=COM),在其下则往往定义一个或多个组织单元(Organizational Units)简称 OU。不同的用户可以归属于不同的组织,例如,在本文中,需要支持 ClearCase、ClearQuest、DB2 还有其它应用 BuildForge 等的认证。所以在规划上,可以将这些用户和相关组织到不同的 OU,在域中体现为不同的目录。如下图 2 所示。


图 2. LDAP 中多个应用对应不同的目录
图 2. LDAP 中多个应用对应不同的目录

配置过程中要用到的 LDAP 基本信息如下表 1 所示。


表 1. LDAP基本信息
LDAP 服务器名字 cdlcc02.cn.ibm.com
服务端口号 389
是否允许匿名连接 Yes
用户查询的目录入口
如果不指定则从根部查询,性能会降低
CC 和 CQ:
ou=cdl_cc Account,dc=cn,dc=ibm,dc=com
ou=cdl_cc Group,dc=cn,dc=ibm,dc=com
DB2 :
ou=cdl_cc DB2,dc=cn,dc=ibm,dc=com
查寻的范围 sub
存储用户登陆名的LDAP 属性. sAMAccountName
LDAP查询过滤条件 sAMAccountName=%login%


扩展域服务器

AD 域是 LDAP 的一种,域服务器的安装和配置请参考其他资料,下面以 Windows 2003 R2 为例,介绍如何扩展该域,增加 Unix 属性页面。

扩展 AD 域的 Schema

在 AD 域已经安装和部署完成的情况下,还需要扩展增加 Unix 属性部分,首先在域服务器上安装 Identity Management for UNIX 组件。

插入 Windows R2 第二张光盘,从添加/删除程序 -- 增加/删除 Windows 组件(双击进入它)-- 选择安装 ”Active Diectory Services” 见图 3 所示。


图 3. 安装 Active Diectory Services
图 3. 安装 Active Diectory Services

下一步如图 4 所示,选择 Identity Management for UNIX 组件。


图 4. 安装 Identity Management for UNIX 组件
图 4. 安装 Identity Management for UNIX 组件

用户的 UNIX 属性

安装了 Identity Management for UNIX 后,域用户的管理窗口中会增加一个 UNIX Attributes 的属性页,可以在这里指定 Linux/Unix 用户的 UID,Login Shell,HomeDiectory 和 Primary group(主组),如图 5 所示。


图 5. 用户的 Unix 属性
图 5. 用户的 Unix 属性

ClearCase使用 AD 域来管理帐号

ClearCase 本身不管理自己的用户和用户组账号,ClearCase 的用户管理依赖于操作系统,通过用户在操作系统中的登录识别用户,并由此确定用户是否具有进行 ClearCase 操作的资格。ClearCase 推荐使用域来管理操作系统的账号,ClearCase 与域的密切关系主要是与 ClearCase 的访问控制有关。

用户的所属组可以有多个,可以指定其中的一个作为该用户的主组,在 ClearCase 环境里,可以设定所有用户的主组相同,指向同一个组,比如 ccusers。主组在不同的操作系统上实现的方式不同,在 Linux 和 Unix 系统里,主组在网络信息系统(NIS,Network Information System)passwd 数据库中定义,对于为 Windows,创建用户的域账号的时候,就指定了主组,域账号的信息存储在与服务器的数据库中。

当以某一用户 ID 登录到安装了 ClearCase 的系统主机上以后,这个用户 ID 就已经决定了某种信任,这种信任是可以控制用户对于 VOB 和 View 中的 Element 的访问控制权限。简单地说,就是以什么样的用户登录系统,就具备了已经赋予了该用户的所有访问控制权限。

配置 ClearCase 主机使用 LDAP 认证

Windows 用户使用域账号登陆,非常简单,只需要设置 Primary_Group 环境变量。

Linux/Unix 用户要使用 LDAP 域进行认证,需要按照下面步骤进行配置。

本文以 Redhat 系统为例,但本文的方案不限于 Linux 及 Unix 平台,作者已经成功地配置了其他 Linux,SuSE,Ubuntu,Mac,AIX 等机器使用 LDAP 进行用户认证。

下面步骤中园括号内的文字均为注解。

  1. 首先确认 OS 已经已经安装以下包。
pam_krb5
krb5-libs
krb5-workstation
openldap-clients
nss_ldap

  1. 同步时钟。

可以选择配置本地时间服务器和外部 internet 时间同步,也可以自己内部搭建一个时钟服务器,本文选择去同步 IBM 的时钟服务器(timeserver.raleigh.ibm.com),所有使用 LDAP 认证的机器要求和 LDAP 服务器的时间一致,否则 LDAP 连接查询会失败。

(1)cat /etc/ntp.conf
server timeserver.raleigh.ibm.com
driftfile /var/lib/ntp/drift
(2)/etc/ntp/ntpservers (清空旧的时间服务器)
(3) cat /etc/ntp/step-tickers  
timeserver.raleigh.ibm.com

  1. 配置 kerberos。
cat  /etc/krb5.conf
[logging]
 default = FILE:/var/log/krb5libs.log
 kdc = FILE:/var/log/krb5kdc.log
 admin_server = FILE:/var/log/kadmind.log
[libdefaults]
 default_realm = CN.IBM.COM
 dns_lookup_realm = false
 dns_lookup_kdc = false
 ticket_lifetime = 24h
 forwardable = yes
[realms]
 CN.IBM.COM = {
  kdc = cdlcc02.cn.ibm.com:88(server 地址)
  admin_server = cdlcc02.cn.ibm.com:749
 }
[domain_realm]
 cn.ibm.com = CN.IBM.COM
 .cn.ibm.com = CN.IBM.COM
[kdc]
 profile = /var/kerberos/krb5kdc/kdc.conf
[appdefaults]
 pam = {
   debug = false
   ticket_lifetime = 36000
   renew_lifetime = 36000
   forwardable = true
   krb4_convert = false
 }

  1. 配置 Pam,指定用户的认证方式。
cat  /etc/pam.d/system-auth (根据你现有的配置,再增加斜体部份即可)
#%PAM-1.0
# User changes will be destroyed the next time authconfig is run。
auth        required     pam_env.so
auth        sufficient    pam_unix.so nullok try_first_pass
auth        requisite     pam_succeed_if.so uid >= 500 quiet
auth        sufficient    pam_krb5.so use_first_pass (使用 kerbers 方式认证)
auth        required     pam_deny.so
auth        required     pam_tally.so onerr=fail deny=5
account     required      pam_tally.so
account     required      pam_unix.so broken_shadow
account     sufficient    pam_succeed_if.so uid < 500 quiet
account     [default=bad success=ok user_unknown=ignore] pam_krb5.so (设置如果 ldap servser 
                                                                不可以用,采用本地 root 登录)
account     required      pam_permit.so
password    required      pam_cracklib.so retry=3 minlen=8 dcredit=0 ucredit=0 lcredit=0 
                                          ocredit=0 type=
password    sufficient    pam_unix.so md5 shadow nullok use_authtok md5 shadow remember=7
password    sufficient    pam_krb5.so use_authtok
password    required      pam_deny.so
session     optional      pam_keyinit.so revoke
session     required      pam_limits.so
session     [success=1 default=ignore] pam_succeed_if.so service in crond quiet use_uid
session     required      pam_unix.so
session     required      pam_mkhomedir.so skel=/etc/skel umask=002(为第一次登录的用户创建 home 目录)
session     optional      pam_krb5.so

  1. 设置 LDAP 查询的相关信息,包括查找范围,方法等。
cat /etc/ldap.conf
bind_policy soft
host 9.125.240.48 (ldap server ip 或 host 都可)
base DC=cn,DC=ibm,DC=com
scope sub (搜索的类型)
timelimit 30
binddn ldapadmin@cn.ibm.com(连接的用户名和密码,最好用域管理员的,有权限遍历整个 LDAP 目录)
bindpw Password1
nss_base_passwd OU=CDL_CC Account,DC=cn,DC=ibm,DC=com?sub
nss_base_shadow OU=CDL_CC Account,DC=cn,DC=ibm,DC=com?sub
nss_base_group OU=CDL_CC Group,DC=cn,DC=ibm,DC=com?sub
nss_map_objectclass posixAccount user
nss_map_objectclass shadowAccount user (ldap client 和 server 类型的转换)
nss_map_attribute uid sAMAccountName
nss_map_attribute homeDirectory unixHomeDirectory
nss_map_attribute shadowLastChange pwdLastSet
nss_map_objectclass posixGroup group
nss_map_attribute uniqueMember member
nss_map_attribute gecos cn
pam_login_attribute sAMAccountName
pam_filter objectclass=User

  1. 设置开机读取用户的顺序。

修改 /etc/nsswitch.conf,表示先本地用户信息库查找再 LDAP。

passwd:     files ldap
shadow:     files ldap
group:      files ldap

  1. 测试配置。
# getent passwd
# getent group

如果你使用以上两个命令能得到你的所有的域用户和组,恭喜你所有配置完全正确,你就可以使用域用户去登录你的 Linux 主机了。

配置 ClearCase Vob 服务器上的 Samba

如果 Linux 机器要作为 VOB 服务器,以 Samba 方式共享数据,不仅要按照上一节配置成为 LDAP Client,还需要执行下面的配置才能使 Samba 工作。

Samba 认证有多种方法,本文使用 Domain 来认证,该方法需要将 Samba 服务器加入域。

  1. 设置 Smaba 的认证方式为 Domain
Global parameters
        security = domain
        workgroup = CDL_CC(域服务器的 netbios 名)

  1. Samba加入域
net rpc join –S cdlcc02.cn.ibm.com –U domainadmin

  1. 测试加入域是否成功
net rpc testjoin
# net rpc testjoin
Join to 'CDL_CC' is OK


配置 ClearQuest 使用LDAP认证

ClearQuest 有自己的一套用户管理系统,用户和组信息存储在后台的用户数据库(User DB)中 ClearQuest 支持使用 LDAP 来认证,除了 Solaris,其他大多数平台都支持。这样,开发人员只需要记住域账号和密码,用域账号就能登陆 ClearQuest。

配置 ClearQuest 启用 LDAP

运行 installutil 命令 从命令行可以直接配置。

第一步:设置认证算法为 CQ_ONLY,在改变认证方法前,先设置认证算法为 CQ_ONLY,这样在配置期间阻止 LDAP 用户登陆。

installutil setauthenticationalgorithm dbset_name cq_user 
                                       cq_password CQ_ONLY
installutil setauthenticationalgorithm 7.0.0 admin password CQ_ONLY

第二步:设置 ClearQuest LDAP 连接信息,-h LDAP 服务器主机名;-p 端口,默认是 389;-D 允许匿名连接时的查询账号;-w 查询账号的密码。

installutil setldapinit dbset_name cq_user cq_password
                    "-h <A> -p <B> -D <C1> -w <C2>"

installutil setldapinit 7.0.0 admin password "-h 'cdlcc02.cn.ibm.com' -p 389 -D 
             cn=ldapadmin, ou=CDL_CC Account, dc=cn, dc=ibm, dc=com -w Password1"

第三步:LDAP 查询标准设置。

-b 开始查询的 BaseDN-s 查询的范围;过滤条件中,sAMAccountName 是存储用户登陆名的 LDAP 属性。

installutil setldapsearch dbset_name cq_user cq_password 
                                        "-s <E> -b <D> <G>"
installutil setldapsearch 7.0.0 admin passsword "-s sub -b ou=CDL_CC Account, dc=cn, 
dc=ibm, dc=com (&(objectCategory=person)(sAMAccountName=%login%)
(!(userAccountControl:1.2.840.113556.1.4.803:=2)))"

第四步:设置 ClearQuest 和 LDAP 的对应关系。

ClearQuesr 可以映射的用户属性有 CQ_EMAILCQ_FULLNAMECQ_LOGIN_NAMECQ_MISC_INFO,或者 CQ_PHONE,相应的 LDAP 中也有多个属性,只要是可以一一对应的就可以。

下面的例子是通过 ClearQuest 的登陆名与 Windows 域服务器中的用户属性 sAMAccountName 进行映射。

installutil setcqldapmap dbset_name cq_user cq_password cq_user_field <H>
installutil setcqldapmap 7.0.0 admin password CQ_LOGIN_NAME sAMAccountName

第五步:验证 LDAP 配置信息。

测试用户名是 test_user,LDAP 密码是 test_pwd

installutil validateldap dbset_name cq_user cq_password <I> 
<J>
installutil validateldap 7.0.0 admin password test_user test_pwd

第六步:设置认证算法为 CQ_FIRST

Usage: installutil setauthenticationalgorithm dbset_name cq_user 
                                                          cq_password CQ_FIRST

第七步:以上步骤完成后,下来为一个用户设置认证模式

在如下图 6 中,LDAP 认证打上勾,表示为该用户启用 LDAP,在 LDAP Login 栏输入用户的登陆名,因为本文前面已经设置使用 ClearQuest 登录名和 LDAP 中存储用户登陆名的属性 sAMAccountName 进行映射。


图 6. ClearQuest用户属性
图 6. ClearQuest用户属性

ClearQuest 使用 LDAP 的认证过程

当 ClearQuest 配置为使用 LDAP 认证时,CQ 不仅要通过 LDAP 查询,还需要后台用户数据库检查,顺序如图 7。

CQ 首先检查是否在用户数据库中有这样的一个用户,然后利用上面第三步设定的查找条件在 LDAP 中查找,LDAP 会验证密码,最后获取第四步中设置的 LDAP 属性值和 CQ user DB 中的进行比较。


图 7. ClearQuest 配置为 LDAP 后的认证流程
图 7. ClearQuest 配置为 LDAP 后的认证流程

如果你的角色是ClearQuest管理员,你应该认识到,ClearQuest 在配置使用 LDAP 认证时,本身仍需要维护自己的用户数据库,在认证过程中,用户信息必须存储在 LDAP 和后台数据库两边,并且匹配,密码使用的是 LDAP 中的信息,这些对于 CQ 用户是透明的,所以对最终的 ClearQuest 用户来说,还是方便很多。


配置 CQ 后台 DB2 数据库使用 LDAP 认证

在大多数的应用场景中,数据库都是处于应用的最底层,用户面对的最上层的应用,比如 Apach、Websphere 等都可以进行简单的配置利用 LDAP 来认证,但后台数据库的认证还是使用数据库本身提供的方式。

DB2 常用的认证方式是借助于操作系统的用户和组信息的,如果操作系统配置为使用 LDAP 来认证,理论上 DB2 可以对此配置视而不见,因为 DB2 只是和操作系统之间进行对话,但是,DB2 不象其他应用可以识别 Pam,不能透明的使用操作系统改变后的配置,所以仍旧需要对 DB2 进行配置以支持 LDAP。

为了便于系统账号集中管理,下面介绍如何配置 DB2 9.1 on Linux,使其可以通过利用 DB2 9.1 自带的 LDAP 插件,实现 LDAP 认证。

在 DB2 服务器端应用 LDAP

  1. 获得插件

DB2 从 8.2 以后支持 LDAP,下载后分别将三个插件放到相应的目录,并且确保文件属性。

DB2 9.1 及更高的版本在安装完后会自带这些插件。

存储目录:INSTHOME/sqllib/security32/plugin

LDAP 插件的下载地址参见参考资料

  1. 更新服务器参数

首先更新 DB2 服务器的相关参数,更新完成后,数据库就会按照配置文件指定的方式通过 LDAP 来认证用户和组。

  Server: UPDATE DBM CFG USING SRVCON_PW_PLUGIN  IBMLDAPauthserver
  Client: UPDATE DBM CFG USING CLNT_PW_PLUGIN    IBMLDAPauthclient
  Group:  UPDATE DBM CFG USING GROUP_PLUGIN      IBMLDAPgroups

  1. 配置文件指定 LDAP 相关参数

配置文件(IBMLDAPSecurity.ini),指定了 DB2 通过哪种方法去哪里寻找用户和组。

一般情况下,配置文件在 Windows 和 UNIX 上分别存储在以下位置,也可以通过环境变量 DB2LDAPSecurityConfig 来指定别的位置。

UNIX:    INSTHOME/sqllib/cfg/IBMLDAPSecurity.ini
Windows: %DB2PATH%\cfg\IBMLDAPSecurity.ini

  1. 以 MSAD 为例说明配置文件中的主要条目

(1) 服务器端相关值

比如 LDAP 服务器的名字,可以指定多个,使用空格隔开,host1[:port] [host2:[port2] ... ],端口不说明则使用默认的 389。

LDAP_HOST = cdlcc02.cn.ibm.com

(2) 用户相关值

用户在 LDAP 中对应的对象类 USER_OBJECTCLASS(MSDA 是 user)。USER_BASEDN 指定从目录树的那个入口开始查找,可选的,如果不指定,则会从根部开始遍历整个目录树,MSDA 要求必须指定。USERID_ATTRIBUTE,指 LDAP 中代表用户 ID 的用户属性,该属性将和 USER_OBJECTCLASSUSER_BASEDN 构成一个用户查询,MSAD 中,该值是 sAMAccountName

AUTHID_ATTRIBUTE,指 LDAP 中代表 DB2 授权 ID 的用户属性,大多数情况下和 USERID_ATTRIBUTE 值一样。

USER_OBJECTCLASS = user
USER_BASEDN = OU=CDL_CC DB2,DC=cn,DC=ibm,DC=com
USERID_ATTRIBUTE = sAMAccountName
AUTHID_ATTRIBUTE = sAMAccountName

(3) 组相关值

包括组在 LDAP 中对应的对象类 GROUP_OBJECTCLASS(MSDA 是 group),GROUP_BASEDN 指定从目录树的那个入口开始查找组,GROUPNAME_ATTRIBUTE 指定代表组名的组属性。

GROUP_OBJECTCLASS = group
GROUP_BASEDN = OU= CDL_CC DB2,DC=cn,DC=ibm,DC=com
GROUPNAME_ATTRIBUTE = sAMAccountName

(4) 用户所属组的查找

一种方法是 SEARCH_BY_DN,也就是查找组的属性 member,看哪个组的成员列表中包含该用户。另一种是通过查找用户的属性 memberofMemberofmember 对应,记录了该用户的所属组。在 MSAD 中,使用第二种方法。

GROUP_LOOKUP_METHOD = USER_ATTRIBUTE
GROUP_LOOKUP_ATTRIBUTE = memberOf

ClearQuest 模式连接用户的特殊设置

ClearQuest 模式连接中的用户是一个DB2用户,不是 ClearQuest 的用户。负责 ClearQuest 应用和后台模式库的连接,非常关键,一旦该用户被锁定或者密码过期,整个 ClearQuest 应用就会瘫痪。由于该用户是处理应用和应用之间的请求,所以最好设置该用户账号永不过期,安全起见,可以设置该用户是不能登陆的。


总结

经过上述的部署和配置后,开发人员工作需要的 ClearCase Windows 帐号 和 Linux/Unix机器帐号以及 ClearQuest 帐号都合并一个域账号和密码。

对于管理员来说,只需维护一套账号系统,新添一个 ClearCase Linux 客户端或服务器的时候,再也不用去创建重复的账号了。


参考资料

学习

获得产品和技术

讨论

作者简介

马玲,CSDL 软件工程师,主要从事软件配置管理工作,熟悉 ClearCase、ClearQuest。

易传佳,CSDL 软件工程师,主要从事 Windows、Linux 系统管理和维护。

posted on 2011-10-26 08:34 tqsheng 阅读(1061) 评论(0)  编辑 收藏 引用


只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理