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] [file or directory...]
或
cvs rchacl [-R] [-r branch] [-u user] [-j branch] [-n] [-p priority] [-m message] [-a [no]{read|write|create|tag|control|all|none}[,...]] [-d] [file or directory...]
如: 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] [file or directory...]
其中[-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中設定。