CVS使用者管理是比較複雜的部分,也是十分重要的部分。通過CVS使用者管理可以建立CVS使用者,並給每個使用者賦予訪問各個目錄的許可權。對於使用Pserver登陸的方式,需要對資產庫的CVSROOT目錄以及在這個分類樹裡的所有目錄做嚴格的許可權限制,這是因為 $CVSROOT/CVSROOT 目錄包含 passwd 和其它與安全性稽核相關的檔案,任何對這些目錄具有寫訪問的使用者將有能力成為系統上的任何使用者。
1 準備知識
CVSNT 的使用者驗證方式分兩種:Windows系統使用者與CVSNT使用者共存的混合驗證方式,及CVSNT使用者單一驗證方式,預設工作在混合驗證方式下。選用混合驗證方式,建立CVSNT使用者的過程就是建立Windows使用者的過程,因此當CVS使用者較多的時候,不容易管理,因此推薦使用單一驗證方式。
各個資產庫所使用的驗證方式及使用者配置由其目錄下CVSROOT裡的設定檔決定,其中有幾個比較重要的檔案:
l config檔案
控制CVSNT的驗證工作方式的就是config檔案,注意該檔案最前面的兩行:
#Set this to ‘no’ if pserver shouldn't check system users/passwords
#SystemAuth=yes
第二行就是我們要修改的內容,預設狀態是被注釋掉的,SystemAuth有兩個值yes和no:
yes:pserver將使用Windows系統使用者和CVSNT使用者來共同驗證(若CVSNT使用者未定義,則用Windows系統使用者來進行驗證),預設為yes,CVSNT使用者在後面將要介紹的passwd檔案中定義。
no:只使用CVSNT使用者來進行驗證。
該檔案可以在用戶端進行修改,因此我們可以檢出CVSROOT後,將第二行改為SystemAuth=no,並commit到CVSNT上就可以啟用單一驗證方式了,注意啟用單一驗證方式後原來的Windows系統使用者將無法登陸CVS。
l admin檔案
該檔案儲存CVSNT管理使用者列表,內容很簡單,形式如下:
User1
User2
User3
每一行定義一個管理使用者,預設時沒有該檔案,但你可以在用戶端自己添加並add上去,再commit到CVSNT上,但是光有這個檔案還是不會生效的,還要將其添加到checklist檔案中,使CVSNT能夠讀取該檔案的內容,在checklist中添加檔案清單的格式為:
[空格]檔案名稱 出錯資訊
其中檔案名稱前的空格必須要有的,不然會出錯。
我們可以先添加admin檔案到CVSNT中,再修改checklist檔案commit,就可以使admin檔案生效了。
l passwd檔案
伺服器工作在CVSNT使用者單一驗證方式下的時候,這個檔案定義了CVSNT的使用者資訊,這裡面儲存著使用者名稱,使用者密碼,以及別名資訊。預設狀態下沒有該檔案,但是我們可以在CVSNT還工作在混合驗證方式下時,用系統管理員登入,通過添加使用者命令來讓CVSNT自動建立一個passwd檔案。
添加使用者的命令的樣本:
cvs passwd –r administrator –a cvsadmin
之後系統提示輸入密碼,輸入後伺服器會建立一個passwd檔案。
該檔案的內容很簡單,形式如下:
cvsadmin:6kj2yopEuCacs:administrator
wangp:Lm9pr9a1FAl0U
chu:UnEKuKtsgm242
以第一行為例:cvsadmin為使用者名稱,fqr1fS4gDghrt為CVS使用UNIX標準加密函數對密碼進行加密後的結果,administrator為該使用者的別名,當使用混合驗證方式時對應Windows系統使用者名稱。
注意:這個檔案是不能在用戶端進行修改的,不能checkout出來。
l group檔案
這個檔案是定義系統的組,我們可以將同樣性質的使用者歸入一個組,然後用給使用者賦許可權的方式給組賦許可權,這樣,一個組的使用者就會具有同樣的許可權。Group的內容如下:
group1:user1 user2 user3
group2:me you he
group3:tom jerry
有上面可以看出來,這個檔案的內容也是相當的簡單,首先是組的名稱然後是冒號,接著是使用者名稱,多個使用者名稱之間用空格來進行分割。
Group檔案可以在用戶端進行建立和修改,不用修改checkoutlist這個檔案,系統會自動build這個檔案並且使之生效。
2建立使用者2.1 設定環境變數
在命令列建立使用者之前,必須設定兩個環境變數:
CVSROOT:指向伺服器倉庫的目錄;
Path:指向CVSNT的安裝目錄。
2.2 利用系統管理員建立CVS使用者
首先要注意的是,在系統命令列中只有系統管理員可以建立使用者,CVS管理員不能建立使用者或者修改使用者密碼。
1) 用Administrator使用者取出CVSROOT目錄;
>cvs co CVSROOT
2) 在CMD中進入取出的CVSROOT目錄;
3) 用cvs passwd –r administrator –a CVSAdmin命令建使用者並輸入使用者口令,這裡使用administrator使用者為別名,可以使用其它系統中的使用者名稱建使用者,但由於這些使用者可能不會被CVSNT使用,因為這些使用者沒有許可權在預設的臨時檔案夾中寫臨時檔案,所以用戶端不能正常工作。如果增加這個使用者的許可權,卻帶來安全的隱患,因此建議用administrator使用者作別名;
4) 建立windows系統使用者cvsuser,許可權為user。
5) 多次使用cvs passwd –r cvsuser–a username命令建立cvs普通使用者,為每個使用cvs的使用者指派使用者名稱和密碼;
6) 在取出的CVSROOT目錄中建一個文字檔:admin,在這個檔案中填上Repository的管理使用者,如:CVSAdmin,並將該檔案上傳到伺服器上;
7) 在取出的CVSROOT目錄中修改checkoutlist檔案,加入一行admin (注意前後均要有空格,否則可能會出錯),上傳到伺服器上,以便CVS伺服器能自動通過建立的檔案知道管理員帳號;
8) 在取出的CVSROOT目錄中修改config檔案的SystemAuth=no,並去掉前面的注釋符號#,在提交之前要確認一下你上面的修改是否正確,如果提交了這個檔案,CVSNT驗證模式就開始生效了,此時,使用Windows系統使用者將無法登入到CVS。
2.3 利用CVS管理員建立CVS使用者
如果安裝了WinCVS軟體,即使修改了config檔案,也可利用前面建立的管理員帳號CVSAdmin建立CVS使用者。
1) 在WinCVS中使用CVS管理員登入,選中某個目錄後,選擇更改CVSROOT。
2) 如果目前的目錄的CVSROOT的使用者不是CVSAdmin,則將其改為CVSAdmin。
3) 在WinCVS中選擇管理命令列,如所示
在彈出的對話方塊中輸入:
cvs passwd–a wang
同樣會提示您設定密碼,建立成功後,會在cvs log欄輸出:
cvs passwd -a wang
Adding user wang@132.134.0.88
***** CVS exited normally with code 0 *****
同理可建立其他使用者。也可直接在log輸出介面輸入CVS命令
4) 查看CVS伺服器資產庫中的CVSROOT中的passwd檔案,可發現,wang已經加入到passwd檔案中,證明建立使用者成功。
3 配置單個使用者權限
只有管理員或者被賦予control許可權的使用者才有權力對使用者進行許可權配置。下面介紹利用上述建立的CVS管理員賬戶CVSAdmin對CVS使用者進行許可權配置的具體過程。
1) 先在WinCVS中以CVSAdmin使用者登入,並將該檔案夾的CVSROOT改為使用CVSAdmin登入
2) 由於WinCVS的命令列不支援cvs chacl命令,但是可以直接在WinCVS輸出中輸入chacl命令。當然接下來的操作也可以在系統命令列中完成,在命令列中設定許可權需要先進入該檔案夾目錄下,在命令列和在WinCVS中的命令格式不盡相同。
3) 首先介紹在命令列中的格式:
(a) 輸入“cvs chown CVSAdmin”,宣布該檔案夾的擁有者為CVS管理員,這條命令執行後,在該檔案夾中的下一層目錄—“CVS”中的“fileattr.xml”已經寫入了這個目錄的屬有者。
(b) 用“cvs chacl –a noread,nocreate,nowrite,nocontrol”命令給檔案夾設定預設存取權限。
(c) 用“cvs chacl”命令設定檔案夾的存取權限,“cvs chacl”命令的詳細描述如下:
cvs chacl [-R] [-r branch] [-u user] [-j branch] [-n] [-p priority] [-m message] [-a [no]{read|write|create|tag|control|all|none}[,...]] [-d]
或
cvs rchacl [-R] [-r branch] [-u user] [-j branch] [-n] [-p priority] [-m message] [-a [no]{read|write|create|tag|control|all|none}[,...]] [-d]
如: cvs chacl -R -a read,write -u user1
現在分別對這幾個參數做一下說明:
read 讀許可權
write 寫入權限
create 建立目錄的許可權
tag 建立tag許可權
control 控制許可權
all 所有許可權
none 沒有任何許可權
預設情況下,任何使用者都擁有任何目錄的所有許可權。
任何情況下只有目錄的擁有者和或擁有control許可權的使用者才有權力更改目錄的使用許可權。
需要說明的是,read|write|create|tag|control 之間沒有權力大小之分。如果有write許可權的話,未必有read許可權。如你只給某一個使用者寫的許可權的話,他是無法讀出的。對於有寫入權限的人,一般會給他讀的許可權。
對於create 只有建立目錄的許可權,如果目錄下面有檔案,你必須還要有write許可權才行。
對於control 如果某使用者對某目錄有control許可權,那麼這個使用者可以使用“cvs chacl”命令更改這個目錄的許可權。
對於all 如果某個使用者對某個目錄有all許可權,那麼這個使用者將擁有所有許可權。
對於tag 不需要有wirte許可權也可以tag,但應該給其read許可權。
需要說明的是:CVS不僅可以對目錄做許可權控制,還能對檔案做許可權控制。
4) 在WinCVS中的命令格式如下:
(a) 同命令列設定方法一樣,輸入“cvs chown CVSAdmin”,宣布該檔案夾的擁有者為CVS管理員
(b) 用“cvs chacl”命令設定檔案夾的存取權限,“cvs chacl”命令的詳細描述如下:
cvs chacl -R [-r tag] {user|default}:[{[r][w][c]|[n]}] [directory...]
-R 遞迴到子目錄
-r 對特殊分支設定許可權
其中使用權限設定比命令列中可設定的許可權少,包括:
r (讀取許可權)
w (寫入許可權)
c (建立和刪除許可權)
n (沒有任何許可權)
註:這種方法在WinCVS中未測試成功,報錯資訊為:
cvs [chacl aborted]: server does not support chacl
通過上述幾個步驟設定好各個使用者的存取權限後,可用“cvs lsacl”顯示該檔案夾的所有使用者存取權限。或者也可以通過查看伺服器端該檔案夾目錄下的“CVS”檔案夾中的“fileattr.xml”查看。
4 配置群組使用者權限
上一小節中所闡述的方法只能一個一個的為單個使用者設定許可權,當項目參與人員過多時,使用這種方法難免顯得繁瑣。這種情況可以使用group,位參與人員劃分群組,為每個群組分配相應的使用者權限。其步驟如下:
1) 在cvsclient端的CVSROOT目錄下,建立group檔案,注意該檔案沒有副檔名,group檔案的格式如下:
group1:user1 user2
group2:user3 user4
group3:user5 user6
例如一個group檔案內容如下:
manager:zhang
leader:chu
developer:wu wang huang zhou wangp
2) 將該group檔案commit到CVS伺服器端
3) 先在WinCVS中以CVSAdmin使用者登入,並將該檔案夾的CVSROOT改為使用CVSAdmin登入
4) 在系統命令列中輸入
cvs chacl [-R] [-r branch] [-u user] [-j branch] [-n] [-p priority] [-m message] [-a [no]{read|write|create|tag|control|all|none}[,...]] [-d]
其中[-u user]的user,用group名稱代替,如:
cvs chacl –R –a write,read,create –u developer
這樣developer組中的所有使用者都將擁有讀、寫、建立的許可權了。
5 備忘/注意事項
本節介紹的CVS使用者管理的方法大多需要結合WinCVS使用,因此在不用WinCVS的情況下需要注意以下幾點。
1) 安裝了CVSNT後,需要設定CVSROOT變數,指向CVSNT的資產庫儲存路徑
2) CVSNT預設採用混合式驗證,所以在命令列可直接進行CVS操作,預設使用系統管理員作為CVS管理員。此時可直接建立使用者,但是此時建立的使用者需要和系統使用者相關聯,因此有必要建立一個cvsuser的系統user使用者。如果不關聯建立的使用者將無法登入,使用CVS相關操作。
3) CVS管理員無法建立使用者,只有系統管理員才能建立使用者。因此只有在建立完了所有的使用者後,才可將config中的SystemAuth改為no,改為 no以後只有CVS使用者才能登入CVS,系統管理員將無法登入CVS,也就無法建立CVS使用者。如果碰到此類情況,只有將SystemAuth重新改為 yes。但如果安裝了WinCVS,可結合WinCVS進行使用者建立。
4) 最後備忘一點,在使用WinCVS進行CVS使用者管理的過程中,有非常重要的一步,就是將當前檔案的CVSROOT改為CVS管理員,不知道這步在系統命令列中怎麼設定。如果可以在命令列中將目前的目錄的CVSROOT設定,那即可在命令列中建立cvs使用者。當前解決方案是在WinCVS中設定。