詳細的windpws平台縣cvsnt配置與許可權分配

來源:互聯網
上載者:User
 

CVS是目前最常用的版本控制和軟體配置系統。其開源性在其普及的過程中功不可沒,然而正因為開源造成了其易用性較差。往往一個功能需要通過幾個看似不相干的操作配合才能進行。Windows下CVS的多帳戶配置正是這樣一個相當重要的,但很不好操作的功能。幾個痛點如下:

CVS源自Unix系統,其Windows的移植版並沒有伺服器功能。在Windows下一般採用安裝CVSNT這個軟體來建立CVS Repository,但CVSNT的操作方法和原始的CVS略微不同。 CVS本身是命令列形式,其配置過程比較繁雜。 CVS的多帳戶配置需要手動修改Repository的CVSROOT檔案夾裡的檔案,缺乏統一的介面。在安裝了CVSNT伺服器之後,預設的使用者就是建立Repository的Windows系統的登陸帳戶,但在多人開發的時候,肯定沒人希望大家都使用同一個名字來Commit;更重要的是,我們可能需要配置開發人員的許可權,例如限制某些人只能看程式,而某些人可以Commit程式,某些人可以添加新的Module。以下是詳細的步驟,環境是CVSNT 2.5.03 (Build 2151) + TortoiseCVS 1.8.25:

1. 使用CVSNT建立一個Repository。假設初始使用Windows的管理員administrator密碼登陸,Repository使用Pserver協議,IP是1.2.3.4,連接埠號碼是2401,Repository名稱是/TestRep,密碼是123。這時的administrator也是此Repository的管理員。

2. 為了進行多使用者配置,必須修改Repository的CVSROOT目錄的幾個檔案。首先在用戶端將:pserver:administrator@1.2.3.4/TestRep設為CVSROOT環境變數(請注意區分CVSROOT目錄和CVSROOT環境變數)。然後用administrator登陸到CVS,最後Check Out出此CVSROOT目錄。命令如下所示:

cvs login //輸入密碼123 cvs co CVSROOT

3. 在伺服器端為Windows添加一個專門用於CVS操作的Windows帳戶。所有的CVS帳戶都要映射到這個Windows帳戶上進行實際的操作。雖然很多資料並沒有提到需要建立Windows帳戶,但我在實驗中發現沒有這種帳戶,CVS在後邊執行任何操作時都會報告沒有此帳戶的錯誤。假如這個新的帳戶叫做cvsuser。使用Windows命令

net user cvsuser cvsuserpassword /Add

可以添加此帳戶。在添加完成之後,一定要記得將/TestRep在伺服器上的實際檔案夾的許可權裡添加cvsuser的讀寫權限,否則到最後任何映射到cvsuser的CVS帳戶都會因為沒有寫入權限無法進行正常的commit操作。首先在伺服器上的資源管理員裡的“工具”菜單裡找到“檔案夾選項”,在隨後出現的“查看”選項卡裡找到“使用簡單檔案夾共用”的項目,取消掉前面的勾,單擊確定。然後右擊/TestRep所在檔案夾,單擊“屬性”。在隨後開啟的對話方塊裡可以看到“安全”選項卡。我們需要在這裡添加cvsuser的讀寫權限。

4.為CVS添加自己的帳戶。通過使用命令cvs passwd我們可以添加任意多個CVS帳戶(當然,只是針對當前的Repository)。所有的帳戶資訊會被儲存在CVSROOT目錄的passwd檔案當中。然而這個檔案是不能Check Out出來的,只能在伺服器那裡看到它,並且其儲存的密碼資訊是被加過密的。我們可以添加cvsadmin,user1,user2,anonymous等使用者。例如添加cvsadmin時的命令是:

cvs passwd -a -r cvsuser cvsadmin //輸入cvsadmin的密碼 //再次輸入cvsadmin的密碼

這樣就新添了cvsadmin帳戶,並將其映射到Windows帳戶cvsuser上(-a表示添加一個賬戶,-r表示影射到作業系統的帳戶中。我期望將cvsadmin作為以後/TestRep的管理員。這一點十分重要,如果這時候不設定的話,再將CVS改為“僅使用CVS帳戶校正模式”之後就再也沒有機會添加管理員了(因為只有管理員可以看得到和操作CVSROOT目錄)。

5.設定cvsadmin為CVS管理員。在用戶端的CVSROOT目錄下新添一個名為admin的檔案。在裡面將每一個想要升為管理員的CVS帳戶的帳戶名稱寫到檔案中,每行一個帳戶名稱。當然admin檔案只有放到伺服器,cvsadmin的升遷才會生效。但是,僅僅是這麼將admin檔案提交上去是不能起作用的。在提交它之前,必須將admin的資訊添加到checkoutlist檔案中。checkoutlist的格式在檔案中有介紹,是“空格 檔案名稱 空格 出錯資訊 斷行符號符”。我們在裡面添加一條記錄:

admin adminerror

特別注意admin前面一定要留一個空格。

6.當新的CVS管理員和帳戶資訊都準備好後,就要將/TestRep的帳戶校正模式從“作業系統整合校正模式”修改為“僅使用CVS帳戶校正”模式。這麼做可以避免為了在CVS中使用多使用者時需要操作Windows帳戶的麻煩。這個設定的地方在CVSROOT目錄中的config檔案。開啟用戶端的config檔案,將裡面的#SystemAuth=yes改為SystemAuth=no(注意將#刪除後,SystemAuth前不能有空格)。修改後儲存config檔案。

7.提交CVSROOT裡的所有更新到伺服器,我們的設定就生效了。命令如下所示:

cd CVSROOT cvs add -m "" admin cvs commit -m ""

不過在提交之前,你也許想先把CVSROOT的owner從原來的administrator修改為cvsadmin。使用命令cvs chown可以做到這一點。在提交了CVSROOT目錄後,校正模式就立刻改變了,cvsadmin也同時開始生效。這時,用之前的administrator就無法使用CVS了。我們改用cvsadmin帳戶重新登陸,繼續下面的操作。

8.修改讀寫權限。CVS有兩種讀寫權限的設定方法,一是粗粒度的,一是細粒度的。只有CVS管理員才能進行存取權限的修改。粗粒度的方法是在CVSROOT中添加readers或者writers檔案來實現。在readers裡添加的任何一個帳戶對當前庫只擁有讀取許可權,添加格式是每行一個帳戶名稱。例如,我們在用戶端的CVSROOT目錄裡添加readers檔案,將之前的一個建立帳戶anonymous放到裡面,然後commit這個readers檔案到伺服器。anonymous就不能進行commit了。實際的測試結果是在使用anonymous登陸之後執行commit指令,系統會報告正常執行完畢。但實際上,沒有任何東西被commit,暴露了CVS在人機介面上的不完善。writers檔案的操作readers完全一樣。如果一個帳戶名稱被同時寫到兩個檔案裡,此帳戶只有唯讀許可權。細粒度的方法是使用chacl命令。例如/TestRep裡有3個工程,project1、project2、project3。使用命令:

cvs chacl -u user1 -a none -d project1,project2,project3 cvs chacl -u user1 -a all -d project1 cvs chacl -u user1 -a read,write -d project2 cvs chacl -u user1 -a read -d project3

可以讓user1擁有對project1目錄的完全控制權,對project2目錄的讀寫權,和對project3目錄的唯讀權。第一條命令首先刪除user1的所有許可權,在隨後的3條命令裡分別設定了3個不同目錄許可權。

9.使用帳戶組來組織帳戶。在用戶端的CVSROOT目錄下添加一個叫group的檔案。此檔案的格式是:

組名1:使用者名稱1,使用者名稱2,使用者名稱3,…… 組名2:使用者名稱5,使用者名稱7,…… ……

修改完group檔案後commit它,然後通過chacl命令可以實現組許可權的修改。

 

-------------------------------------------------------------------------

 

 

CVS操作手冊 Version 1.1 [轉]

——————————————————————————————————– 1 伺服器端安裝過程安裝前的注意事項: 本操作手冊基於CVSNT 2.5.03 build 2382,操作介面以及選項設定都會隨版本的變化而發生一定的改變 CVS容器(repository)、臨時檔案夾(TEMP)必須安裝於CVSNT所在伺服器 CVSNT應作為〔服務〕,且建議使用SYSTEM賬戶執行(原因有兩點:1、SYSTEM不具有網路許可權,也就是說不能被當作遠程服務來使用;2、當SYSTEM賬戶不進行操作的時候,CVSNT服務仍舊線上服務) CVSNT建議被運行在採用NTFS檔案系統的伺服器上(原因有兩點:1、NTFS檔案系統具備CVS所需要的許可權管理的基礎;2、NTFS檔案系統更加穩定且能夠有更大地儲存能力) 1.1 CVSNT的安裝與配置 1.1.1 建立CVS容器和臨時檔案夾例如:D:/CVSNTRepositories (容器) D:/CVSTEMP (臨時)(請注意:臨時檔案夾不可以位於作業系統臨時檔案夾內。如:C:/winnt/temp 或者 C:/Documents and Settings中) 1.1.2 點擊CVSNT安裝程式含用戶端、伺服器端,進行安裝。(請注意:1、如果伺服器採用Windows XP、2003或者更高版本則,其〔WMI Service〕服務可能會引起許可權拒絕錯誤,請在安裝前將其關閉,安裝結束後重新開啟即可;2、注意用戶端與伺服器端版本匹配問題;3、安裝後可能需要重新啟動) 1.1.3 CVS容器設定 通過〔開始〕-〔程式〕-〔CVSNT〕-〔CVSNT Control Panel〕開啟CVS控制台(或在控制台中開啟) 對設定變更前,請停止CVSNT、CVSNT Lock服務 點擊〔Repository configuration〕選項卡 點擊〔Add〕新增容器:其中〔Location〕欄位填寫/選擇容器所在目錄(在步驟1中建立的);〔Name〕欄位填寫容器名稱,必須遵守規則:必須以“/”開頭,形如“/CVSNTRoot”。(請注意:如果想要新的容器生效,必須勾選〔Publish Repository〕〔Online〕選項) 1.1.4 CVS臨時檔案夾設定點擊〔Server Settings〕選項卡,在〔Temporary〕中選擇步驟1中建立的CVS臨時檔案夾。重新啟動CVSNT、CVSNT Lock服務,如果服務不能啟動,請檢查容器所在檔案夾使用權限設定或重新啟動伺服器。 1.1.5 更新CVS伺服器中的二進位檔案列表(請注意:這是非常重要的,如果不將已知二進位檔案類型加入二進位檔案列表,當上傳此類檔案時檔案可能被損壞)在命令列提示符下操作: SET CVSROOT=D:/CVSNTRepositories/Repo1(以Administrator登入伺服器,本地操作模式) Cvs co CVSROOT Cd CVSROOT Notepad cvswrappers (在記事本中編輯列表檔案例如) *.cab -k ‘b’ *.class -k ‘b’ *.doc -k ‘b’ *.dll -k ‘b’ *.exe -k ‘b’ *.exp -k ‘b’ *.gif -k ‘b’ *.gz -k ‘b’ *.jar -k ‘b’ *.jpg -k ‘b’ *.jpeg -k ‘b’ *.lib -k ‘b’ *.msi -k ‘b’ *.mso -k ‘b’ *.pfw -k ‘b’ *.png -k ‘b’ *.ppt -k ‘b’ *.sit -k ‘b’ *.tar -k ‘b’ *.tlb -k ‘b’ *.vsd -k ‘b’ *.xls -k ‘b’ *.wmz -k ‘b’ *.zip -k ‘b’ Cvs commit 1.1.6 伺服器端CVS使用權限設定 CVSNT伺服器的許可權控制包括兩部分: NTFS ACL 阻止沒有經過授權的人訪問CVS容器 CVSNT ACL 阻止開發人員commit錯誤的版本分支 CVSNT登入方式有兩種: Windows使用者驗證與CVSNT使用者驗證的混合驗證模式 CVSNT使用者驗證的單一驗證模式由於Windows不允許任何非真實帳戶的對檔案系統進行操作,所以使用CVSNT建立的使用者其實是Windows使用者的別名(映射),其關係如:

本文主要介紹混合模式驗證的設定方法。

某容器許可權的設定步驟: 1) 以Administrator登入伺服器 2) 為CVSNT建立Windows使用者組、使用者 Group Name 描述 CVSAdmins 所有的CVS容器管理權,允許更新所有容器中的檔案 CVSAdmin-XXX 某容器的管理權 CVSUsers 所有CVS使用者,可以checkout檔案,但checkin/commit動作受到CVSROOT/writers檔案控制請注意:如果CVSNT部署於Windows2003+的伺服器上,請確認使用者組擁有執行CMD.EXE的許可權,因為作業系統預設是沒有的 3) 設定CVSROOT許可權控制檔案 CVSROOT filename 描述 Admin 被允許執行CVS管理員指令的使用者名稱單 (不受原始程式碼控制控制) Passwd 記錄CVSNT帳戶名稱和密碼 (經過加密,不受原始程式碼控制控制) Group 記錄CVSNT組資訊,格式:組名:使用者名稱1 使用者名稱2 使用者名稱3 …… Readers 可以讀取資料的使用者名稱單 Writers 被允許進行寫操作(commit)的使用者名稱單 config 某CVSNT容器的配置文檔 SystemAuth Yes:混合驗證 No:單一驗證 以Administrator登入伺服器,切換到命令列方式 切換到CVS容器所在的檔案夾中,例如:D:/CVSNTRepositories/Repo1/CVSROOT 設定admin檔案通過“echo cvsadmin>> admin”建立admin檔案,“username”與“admin”中間不能有空格 設定writers、config檔案(不要在CVS容器檔案夾中進行) Set CVSROOT=:pserver:cvsadmin@host:/Repo1 Cvs login Cvs co cvsroot Cd cvsroot Notepad config Echo username>> writers (請注意:必須將自己所使用的使用者名稱也添加進去,否則會被死結,若死結請到CVS容器中刪除writers與writers.v檔案即可) Cvs add writers (當建立此文檔時使用) Cvs commit 4) 設定CVSNT容器所在檔案夾許可權

Directory/File SYSTEM Administrators CVSAdmins CVSAdmin-XXX CVSUsers 描述 ./CVSNTTEMP Full 開放許可權 ./CVSNTRepositories Full Full Full Read ./CVSNTRepositories/Repo1 Full Read Full Full 單個容器 ./CVSNTRepositories/Repo1/CVSROOT Full Read Full Read 避免普通使用者改變更配置置檔案 ./CVSNTRepositories/Repo1/CVSROOT/history Full Read Full Change 記錄CVS使用者曆史 ./CVSNTRepositories/Repo1/CVSROOT/val-tags Full Read Full Change CVS使用者checkout 請注意:history檔案在CVSNT 2.5.x版本後發生了較大的變化,CVSNT不會自動產生記錄,所以容器Repo1中CVSROOT檔案夾下沒有history檔案需要手動建立一個空的檔案並命名為history

某容器內項目許可權的設定:

1) 添加CVSNT使用者文法: cvs passwd [-a] [-x] [-X] [-r real_user] [-R] [-D domain] [username] 其中,-a表示添加一個cvsnt使用者;-x表示取消一個cvsnt使用者;-X表示刪除一個cvsnt使用者;-r表示把一個cvsnt使用者和一個指定的系統使用者綁定;-R表示取消一個cvsnt使用者和一個系統使用者的綁定;-D表示域;username表示要建立的cvsnt使用者不加參數表示修改當前登入使用者密碼你可以使用以下命令來建立映射關係: cvs passwd -a -r 2) 設定CVSNT使用者權限文法: Chown CVS chown [-R] user [directory…] 其中-R 表示遞迴。 cvs chown -R cvsadmin . 上述命令把目前的目錄及其子目錄對應的伺服器目錄的owner設定為cvsadmin使用者。

Chacl CVS chacl [-R] [-r branch] [-u user] [-j branch] [-n] [-p priority] [-m message] [-a [no]{read|write|create|tag|control}[,…]] [-d] -R表示遞迴; -r branch表示對分支的許可權的修改; -a表示設定使用者的許可權; -d表示刪除使用者的許可權。 cvs chacl -R -u cvsuser2 -a read,write,create,tag . 上述命令賦予cvsuser2使用者目前的目錄及其子目錄對應的伺服器目錄的讀/寫/建立/打標籤的許可權。 cvs chacl -u g2 -a read,nowrite HelloWorld.java 上述命令賦予g2群組目前的目錄下HelloWorld.java文檔的讀許可權,拒絕其寫入權限。 cvs chacl –u cvsuser2 –d . 上述命令取消cvsuser2 使用者對目前的目錄對應的伺服器目錄的所有許可權。

Lsacl CVS lsacl [-dR] -d表示僅列出目錄許可權,-R表示遞迴。

3) 請注意:這裡是一個CVSNT 2.5.03 build 2382 bug 當進入被cvs checkout出來的項目用戶端檔案夾時,並且這時你並不是使用checkout所使用的帳戶登入的,cvs會自動使你變更成為checkout時所使用的帳戶。危害描述:可以藉此漏洞奪得他人帳號控制權,甚至最高管理員權限。解決方案:在使用時請勿在他人的電腦上使用自己的帳號checkout項目,尤其是管理員帳號。

1.1.7 測試CVSNT服務經過以上設定,CVSNT伺服器已經部署完畢,需要對其進行串連測試,在命令列模式下操作: Set CVSROOT=:pserver:username@host:/Repo1 Cvs login 成功則無錯誤提示。

1.2 CopSSH的安裝與配置在CVS應用中為了提升資料轉送的安全性,可以採用SSH通訊協議來替代pserver標準協議,在眾多SSH服務程式當中,截至筆者寫此文章之時,CopSSH是對各種用戶端程式支援最好的開源項目。 安裝過程非常簡單,完成後需要〔Activate a user〕,〔開始〕-〔程式〕-〔CopSSH〕請注意:CopSSH要求必須使用Windows帳戶,CVSNT帳戶不被支援。可以通過綁定Windows與CVSNT帳戶的方法來解決。 需要從CVSNT安裝資料夾中拷貝以下檔案到CopSSH安裝目錄的bin下 cvs.exe cvsapi.dll dbghelp.dll extnt.dll msvcp71.dll msvcr71.dll cvstools.dll iconv.dll mdnsclient.dll 請設定CopSSH臨時檔案夾的許可權 Directory/File SYSTEM Administrators CVSAdmins CVSAdmin-XXX CVSUsers 描述 ./Documents and Settings /SvcCOPSSH.XXX/Local Settings/Temp Full Full Full Full

串連測試

Set CVSROOT=:ssh:username@host:/Repo1 Cvs login 輸入密碼後,會要求確認接受public key。 1.3 刪除不安全CVS通訊協議(可選)將位於CVSNT安裝資料夾中protocols目錄中的相應DLL檔案刪除即可。

2 用戶端的安裝過程安裝前注意事項: 已經安裝Microsoft VS系列 TamTam Plugin是付費軟體

用戶端的安裝相對簡單,這裡只介紹其中需要注意的幾點: 安裝時請首先安裝CVSNT用戶端。 TamTam Plugin 捆綁的文本比較工具不支援多位元組字元(中文、日文等等),請使用WinMerge,並在設定中對其進行綁定。 請指定TamTam Plugin所使用的CVS.EXE為CVSNT中的以保持穩定的相容性。 為了加快網路傳輸速度請開啟網路壓縮選項 在填寫串連字串時,請使用SSH通訊協議,例如::ssh:username@host:/Repo1

3 CVSNT的日常維護 3.1 容器的備份通過一個指令檔(加入〔任務計劃〕)或者〔備份〕程式進行備份,其中內容形如: net stop cvsnt xcopy d:/CVSNTRepositories //server/cvsbackup /Q /S /C /H /R /O /Y net start cvsnt

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.