今天無聊,本機上試驗架設了下CVSNT.基本搞懂CVSNT的架設配置.
???1.安裝CVSNT服務端(2.6版的安裝無法啟動控制面板,報編譯錯誤,后來換成2.5版的OK了.
?原因未知,操作系統windows 2003)
???2.對建立倉庫,并且對CVSROOT系統目錄進行配置.主要是用戶權限.主要文件包括(config,admin,readers,writers,password)
?? 3.Eclipse的CVS配置,或者用wincvs(公司用這個東東,一條小fish在蹦啊蹦的)
???可惜我是內網代理上網,只好先在本機測試下了,改天搬到公網上再測試下,以后我也有自己的版本控制拉.,呵呵.
????假設已經安裝了WINCVS和CVSNT,并建立了倉庫。完成了登陸和導入導出的操作。
(1)管理員登陸以后把服務器中倉庫的CVSROOT目錄(Module)導出(Checkout)到一個工作目錄,比如“admin”。具體操作見“導出模塊”。
CVS中目錄權限介紹:
系統支持的目錄權限如下:
r?????? (讀取權限)
w?????? (寫入權限)
c?????? (創建和刪除權限)
n?????? (沒有任何權限)
默認情況下,任何用戶都擁有任何目錄的所有權限。
任何情況下只有目錄的擁有者和管理員才有權力更改目錄的使用權限。下面將會介紹如何修改目錄權限和目錄的擁有者。
(2)對CVSROOT目錄的管理:
CVSROOT目錄是在創建倉庫時有NTCVS建立的。里面包含了許多關于倉庫的信息的文件。
認證口令的時候,服務器先檢查 CVSROOT/passwd 文件中的用戶。如果找到用戶,就按CVS內置的權限管理方法進行認證。如果沒有找到,或passwd 文件不存在,服務器將采用操作系統的用戶認證機制。為安全起見,應該采用CVS內置的權限管理。具體方法如下:
???? 1)
在服務端 CVSROOT 目錄下建立文件passwd(不建立則在添加用戶時自動創建)。出于安全考慮,默認不會將 passwd列在 checkoutlist 文件里面。既從客戶端導出CVSROOT時不會導出該文件。在WINCVS中轉到CVSROOT目錄。點擊主菜單“Admin->command line”或”ctrl+ L”彈出命令行對話框。在對話框中輸入增加管理員的命令:
cvs passwd -a -r systemuser username
????????? //建立與系統用戶systemuser有相同權限的用戶,用戶名為username。?
????????? //當某個用戶綁定的系統用戶被刪除時,則這個用戶也不能登陸。
或? cvs passwd -a? username????????
??? ????????? //建立用戶名為username的用戶
在兩次彈出的對話框輸入密碼。確認即可。這時可以看到passwd文件多了一行
:
username:CUXQwLMdoZHNs:systemuser????
或???? username:CUXQwLMdoZHNs
在增加管理員時,應該使用第一種方法:命令為:
cvs passwd -a -r Administrator username
在實際操作中建議使用第一種命令。采用第二種命令增加的用戶有時在login時會出現不能登陸的情況(具體原因還不清楚)。
2)修改CVSROOT下的配置文件 config,加入一行:“?SystemAuth=no”其中no表示用passwd檢查用戶密碼權限是否正確。yes 為默認值,表示如果用戶在passwd文件中不存在,就用系統用戶檢查權限是否正確,這就使用了CVS內置的權限管理功能了。???????????
然后在CVSROOT下建立admin文件。這個文件是指定CVSNT的管理員列表的文件,CVSNT根據這個文件來判斷一個用戶是否是管理員。文件的內容是一個用戶列表。如下:
user1
user2
user3
這些代表user1,user2,user3都是管理員,在此之前CVS將服務器的管理員用戶作為自己的管理員用戶的。
3)在CVSROOT下加入文件readers,writers來控制用戶的讀寫權限。文件每行內容與admin文件相同。格式為:?用戶名回車。
特別注意的是:只有在writer文件中的用戶既能讀取,又能進行提交修改。在readers中的用戶只能讀取,同時在兩個文件中的用戶只能讀取。在writers文件中必須有管理員的用戶名。因為管理員在操作控制時將會涉及到文件的讀寫。對于一般用戶就不要寫進這兩個文件了。
這樣就完成了對CVSROOT目錄的權限設定。不在readers和writers文件中的用戶將不能導出CVSROOT這個module。僅在readers文件中的用戶能進行導出操作但不能進行提交修改操作。僅在writers文件中的用戶能進行導出和提交修改操作。
下面講一下不使用系統管理員而自己建立的管理員的步驟:
1.
?????????????
使用
命令
cvs passwd -a -r Administrator username建立一個和Administrator有相同權限的管理員用戶。
2.
?????????????
在admin文件中添加該管理員的用戶名。
3.
?????????????
在writers文件中添加該管理員的用戶名。
4.
?????????????
在config 文件中添加一行代碼:SystemAuth=no,這樣就不能使用Administrator而只能使用自己建立的管理員進行操作了。
?
(3)對一般目錄權限的設置
1)
?
配置CVS庫模塊文件modules
先從客戶端導入兩個module。比如test和localdir。在modules加入如下3行:
?????CVSROOT????????? ??CVSROOT?
?????目錄1?? ?-a?????? localdir?
?????目錄2??? -a?????? test
第一列為描述信息,第二列為參數或空格。第三列為相對路徑。如果描述信息和相對路徑不同則需要參數“-a”。
在導出模塊的時候(remote->checkout module),可以點擊module name and path on the server一欄旁邊的“...” 按鈕彈出窗口:
??? 這樣可以使客戶端更加方便的進行module選擇。
?
2)
?
為各個module進行權限配置
module在倉庫的下就是一個獨立的目錄。為module設置權限有兩種方法。第一種是手工配置,在module目錄下有一個子目錄CVS,在里面有一個fileattr.xml文件。在未設置以前打開文件如下:
<?xml version="1.0" encoding="UTF-8"?>
<fileattr>
? <directory>
??? <owner>Administrator</owner>
? </directory>
</fileattr>
在<owner></owner>之間設置目錄的所有者。
目錄的擁有者和管理員才有權力更改目錄的使用權限
。目錄權限未設置時,所有用戶對目錄有除了更改目錄權限以外的全部權限。在<directory></directory>之間加入以下代碼表示取消所有用戶對目錄的的默認全部權限。
<acl>
????? <all deny="1" />
??? </acl>
在<directory></directory>之間加入以下代碼表示用戶user具有創建、讀寫、注釋的權限。目錄的所有者也要通過以下代碼進行權限設置。
??????? <acl user="user">
????????? <create />
????????? <read />
????????? <tag />
????????? <write />
??????? </acl>
加入以上代碼以后文件如下:
<?xml version="1.0" encoding="UTF-8"?>
<fileattr>
? <directory>
<acl>
?????
????<all deny="1" />
</acl>
??? <acl user="user">
????????? <create />
????????? <read />
????????? <write />
????????? <tag />
??????? </acl>
??? <owner>user</owner>
? </directory>
</fileattr>
第二種方法是使用命令來設置,其實也是通過命令來修改fileattr.xml文件來進行權限設置。具體方法是在WINCVS中用管理員身份登陸并導出要設置的module。選中module,在文件信息欄顯示module的文件信息。打開命令行對話框輸入以下命令來設置。
命令格式:
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...]
??? -a access??? Set access(設置權限)
??? -d??????? Delete ACL(刪除目錄的控制權限)
??? -j branch??? Apply when merging from branch(合并分支時應用)
??? -m message??? Custom error message(定制錯誤消息)
??? -n??????? Do not inherit ACL
??? -p priority??? Override ACL priority(不受目錄權限管理)
??? -r branch??? Apply to single branch(在單個分支上應用)
??? -R??????? Recursively change subdirectories(
嵌套設置權限,對目錄下每個子目錄也進行相同的目錄權限設置)
??? -u user??????? Apply to single user(應用在單個用戶)
例如? cvs chacl -r –a none //取消所有用戶的默認權限,禁止一切訪問。
cvs chacl -R -u user -a read??? //設置用戶user有讀的權限。
通過下面的代碼更改目錄所有者:
cvs chown dirowner //dirowner為要設定的管理員??????
通過下面的代碼顯示目錄的信息:
cvs lsacl
這兩種方法中,第二種方法比較簡單,不容易出錯。但在第二種方法沒有效果的時候可以用第一種方法進行設置。第一種方法中的命令和以前的版本略有不同。具體見它的格式。
??? 以上就可以完成對目錄的權限設置。在模塊(module)下的每一個目錄下都會自動產生一個名為CVS的文件夾,里面都有一個fileattr.xml文件用來控制目錄的訪問權限。方法同上。
?
(3)關于分組(group)的應用
分組:將權限相同的用戶劃分到一組,這樣可以方便維護。就是角色的意思,分組使用在對模塊訪問權限的劃分的方法如下:
a.在服務器端 CVSROOT目錄下新建文件 group。
b.在文件中建立分組,group文件內容如下:
group1:user1 user2 user3
group2:user5 user6 user7
c.之后對組進行權限劃分,和對單個用戶方式一樣,就可以使組內用戶和組具有相
同的權限,如 選中模塊,執行如下命令可以使用戶 user1 user2 user3 同時具有對該模塊的讀權限了。
? cvs chacl -R -u group1 -a write
在fileattr.xml文件中加入如下代碼也可以使用戶 user1 user2 user3 同時具有對該模塊的讀寫:
<acl user=guoup1>
????????? <create />
????????? <read />
?
????????<tag />
????????? <write />
??????? </acl>
注意這里的group不用" " 。