簡介
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. 軟件開發集成環境下的應用拓撲和用戶管理
回頁首
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 中多個應用對應不同的目錄
配置過程中要用到的 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
下一步如圖 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 屬性
回頁首
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 進行用戶認證。
下面步驟中園括號內的文字均為注解。
- 首先確認 OS 已經已經安裝以下包。
pam_krb5
krb5-libs
krb5-workstation
openldap-clients
nss_ldap
|
- 同步時鐘。
可以選擇配置本地時間服務器和外部 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
|
- 配置 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
}
|
- 配置 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
|
- 設置 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
|
- 設置開機讀取用戶的順序。
修改 /etc/nsswitch.conf,表示先本地用戶信息庫查找再 LDAP。
passwd: files ldap
shadow: files ldap
group: files ldap
|
- 測試配置。
# getent passwd
# getent group
|
如果你使用以上兩個命令能得到你的所有的域用戶和組,恭喜你所有配置完全正確,你就可以使用域用戶去登錄你的 Linux 主機了。
配置 ClearCase Vob 服務器上的 Samba
如果 Linux 機器要作為 VOB 服務器,以 Samba 方式共享數據,不僅要按照上一節配置成為 LDAP Client,還需要執行下面的配置才能使 Samba 工作。
Samba 認證有多種方法,本文使用 Domain 來認證,該方法需要將 Samba 服務器加入域。
- 設置 Smaba 的認證方式為 Domain
Global parameters
security = domain
workgroup = CDL_CC(域服務器的 netbios 名)
|
- Samba加入域
net rpc join –S cdlcc02.cn.ibm.com –U domainadmin |
- 測試加入域是否成功
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_EMAIL
,CQ_FULLNAME
,CQ_LOGIN_NAME
,CQ_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用戶屬性
ClearQuest 使用 LDAP 的認證過程
當 ClearQuest 配置為使用 LDAP 認證時,CQ 不僅要通過 LDAP 查詢,還需要后臺用戶數據庫檢查,順序如圖 7。
CQ 首先檢查是否在用戶數據庫中有這樣的一個用戶,然后利用上面第三步設定的查找條件在 LDAP 中查找,LDAP 會驗證密碼,最后獲取第四步中設置的 LDAP 屬性值和 CQ user DB 中的進行比較。
圖 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
- 獲得插件
DB2 從 8.2 以后支持 LDAP,下載后分別將三個插件放到相應的目錄,并且確保文件屬性。
DB2 9.1 及更高的版本在安裝完后會自帶這些插件。
存儲目錄:INSTHOME/sqllib/security32/plugin
LDAP 插件的下載地址參見參考資料。
- 更新服務器參數
首先更新 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
|
- 配置文件指定 LDAP 相關參數
配置文件(IBMLDAPSecurity.ini),指定了 DB2 通過哪種方法去哪里尋找用戶和組。
一般情況下,配置文件在 Windows 和 UNIX 上分別存儲在以下位置,也可以通過環境變量 DB2LDAPSecurityConfig
來指定別的位置。
UNIX: INSTHOME/sqllib/cfg/IBMLDAPSecurity.ini
Windows: %DB2PATH%\cfg\IBMLDAPSecurity.ini
|
- 以 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_OBJECTCLASS
和 USER_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
,看哪個組的成員列表中包含該用戶。另一種是通過查找用戶的屬性 memberof
。Memberof
和 member
對應,記錄了該用戶的所屬組。在 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 系統管理和維護。