subversion svnserver服務啟動與配置

svnserve 是一個輕量級的服務, 使用自定義的協議通過TCP/IP與客戶端通訊。
客戶端通過由 svn:// 或者 svn+ssh:// 開始的URL訪問svnserve服務器。

啟動服務器

端口監控(inetd)模式

如果你打算用端口監控來啟動處理客戶的訪問請求的進程,你可以通過傳入參數-i來啟動:

svnserve -i

當使用-i參數啟動服務的時候,svnserve通過stdin和stdout用自定義協議和客戶端
通訊。同時服務偵聽3690端口。

獨立端口監控進程

使用參數-d啟動服務作為一個獨立的端口監控進程。

svnserve -d

當運行svnserve在獨立端口監控模式時,你可以使用--listen-port=和--listen-host=參數來自定義需要的端口和主機名稱。當前模式默認的端口是3690。

當然,也有第三種方法啟動svnserve,也就是使用“隧道模式”,使用-t參數啟動服務。這個模式要求遠程服務程序,如RSH或SSH,已經成 功驗證用戶,并且使用已經校驗的用戶啟動一個屬于該用戶的svnserve進程。當使用該模式提供服務時,要確認啟動的用戶帳戶具備對 Repository的讀/寫權限。

設置項目目錄

當svnserve開始運行時,它將會暴露所有的Repository到網絡上。不過,當客戶端需要獲取一個Repository的內容時,需要指定Reopsitory的絕對路徑。例如:一個Repository放在文件路徑
C:/Project Repository/Project1
那么當客戶端訪問時,需要指定絕對路徑:
svn://host/C:/Project Repository/Project1
所以,為了增加保密性,你可以使用參數-r指定需要暴露的Repository的路徑,當用戶訪問時,只需指定Repository的名稱即可。例如上面的Repository,當啟動服務時,使用如下的方法:
svnserve -d -r C:/Project Repository
那么當客戶端訪問時,則使用
svn://host/Project1
就可以獲取數據了。

內置的驗證和授權

當客戶端連接到一個svnserve進程時,下面的流程就會觸發:
1、客戶選擇一個指定的Repository;
2、服務處理Repository的配置文件 conf/svnserve.conf文件,并且開始執行在其中定義的所有驗證和授權策略;
3、依賴與情形和授權策略:
?a)客戶端也許允許匿名訪問而不需要驗證,或者
?b)客戶但也許需要在任何時候被要求驗證,或者
?c)假如處于"隧道模式"中,客戶端將聲明自己已經可以被外部驗證。

很顯然,如上所說,用戶文件是一個名為svnserve.conf的,放在conf目錄下的文件。
現在我們來看看如何配置這個文件:
這個配置文件放置在Repository的目錄中的conf目錄下,它有兩個節點:
[general]
[users]
其中,[general]的配置信息有:
anon-access = read
auth-access = write
其中表示對于驗證有效的以及沒通過驗證的用戶可以做什么事情。分別有read, write和none

[users]的標簽的配置內容有:
USERNAME = PASSWORD
password-db = passwd
realm = My First Repository
其 中表示,用戶名對應的密碼是什么,或者指定一個存儲用戶名和密碼的文件的相對或絕對路徑以及指定了Repository的驗證領域。如果兩個 Repository有相同的驗證領域,那么它們應該有相同的密碼數據庫,反之亦然。默認的領域就是指向當前的Repository的路徑,與服務器的 Repository的根目錄相關。

svnser配置實例
svnserve是SVN自帶的一個輕型服務器,客戶端通過使用以svn://或svn+ssh://為前綴的URL來訪問svnserve服務器,實現遠程訪問SVN版本庫。

svnserve可以通過配置文件來設置用戶和口令,以及按路徑控制版本庫訪問權限。本文詳細分析了svnserve配置文件格式,并說明如何使用配置文件控制版本庫訪問權限。


1) svnserve配置文件概述

svnserve配置文件通常由以下3個文本文件組成:
svn服務配置文件,該文件版本庫目錄的conf目錄下,文件名為svnserve.conf。
用戶名口令文件,該文件名在文件svnserve.conf中指定,缺省為同目錄下的passwd。
權限配置文件,該文件名也在文件svnserve.conf中指定,缺省為同目錄下的authz。

2) svn服務配置文件

svn服務配置文件為版本庫目錄中的文件conf/svnserve.conf。該文件僅由一個[general]配置段組成。

[general]配置段中配置行格式如下:
<配置項> = <值>

配置項分為以下5項:

anon-access 控制非鑒權用戶訪問版本庫的權限。取值范圍為"write"、"read"和"none"。
即"write"為可讀可寫,"read"為只讀,"none"表示無訪問權限。
缺省值:read

auth-access 控制鑒權用戶訪問版本庫的權限。取值范圍為"write"、"read"和"none"。
即"write"為可讀可寫,"read"為只讀,"none"表示無訪問權限。
缺省值:write

password-db 指定用戶名口令文件名。除非指定絕對路徑,否則文件位置為相對conf
目錄的相對路徑。
缺省值:passwd

authz-db 指定權限配置文件名,通過該文件可以實現以路徑為基礎的訪問控制。
除非指定絕對路徑,否則文件位置為相對conf目錄的相對路徑。
缺省值:authz

realm 指定版本庫的認證域,即在登錄時提示的認證域名稱。若兩個版本庫的
認證域相同,建議使用相同的用戶名口令數據文件。
缺省值:一個UUID(Universal Unique IDentifier,全局唯一標示)。

【說明】版本庫認證域
在使用svn客戶端訪問svnserve服務器時,若需要用戶登錄,則提示信息如下:
[root@test root]# svn list svn://192.168.3.45/test
Authentication realm: 0d545a49-4038-0410-99b4-c66dc73f754e
Password for 'root':
在上述第2行"Authentication realm: "之后顯示的字符串為認證域名稱。如果在配置文件中為設定認證域,就會提示一個UUID,如上述所示。
如果在配置文件中指定了如下配置項:
realm = test
將在svn客戶端提示如下:
[root@test root]# svn list svn://192.168.3.45/test
Authentication realm: test
Password for 'root':

例1:svn服務配置文件conf/svnserve.conf的內容如下:
[general]
anon-access = none
auth-access = write
password-db = ../../conf/passwd
authz-db = ../../conf/authz
realm = test

上 述配置文件設定非鑒權用戶無權限訪問該版本庫;鑒權用戶可對版本庫進行讀寫;用戶名口令文件為相對版本庫conf目錄的文件"../../conf /passwd";權限配置文件為相對版本庫conf目錄的文件"../../conf/authz";版本庫的認證域為"test"。

3) 用戶名口令文件

用戶名口令文件由svnserve.conf的配置項password-db指定,缺省為conf目錄中的passwd。該文件僅由一個[users]配置段組成。

[users]配置段的配置行格式如下:
<用戶名> = <口令>
注意:配置行中的口令為未經過任何處理的明文。

例2:用戶名口令文件conf/passwd的內容如下:
[users]
admin = admin
thinker = 123456

該文件中配置了兩個用戶,用戶名分別為"admin"和"thinker"。其中"admin"用戶的口令為"admin";"thinker"用戶的口令為"123456"。

4) 權限配置文件

權限配置文件由svnserve.conf的配置項authz-db指定,缺省為conf目錄中的authz。該配置文件由一個[groups]配置段和若干個版本庫路徑權限段組成。

[groups]配置段中配置行格式如下:
<用戶組> = <用戶列表>
用戶列表由若干個用戶組或用戶名構成,用戶組或用戶名之間用逗號","分隔,引用用戶組時要使用前綴"@"(如:引用用戶組"all"要使用字符串"@all")。

版本庫路徑權限段的段名格式如下:
[<版本庫名>:<路徑>]
如版本庫abc路徑/tmp的版本庫路徑權限段的段名為"[abc:/tmp]"。
可省略段名中的版本庫名。若省略版本庫名,則該版本庫路徑權限段對所有版本庫中相同路徑的訪問控制都有效。如:段名為"[/tmp]"的版本庫路徑權限段設置了所有引用該權限配置文件的版本庫中目錄"/tmp"的訪問權限。

版本庫路徑權限段中配置行格式有如下三種:
<用戶名> = <權限>
<用戶組> = <權限>
* = <權限>
其中,"*"表示任何用戶;權限的取值范圍為''、'r'和'rw',''表示對該版本庫路徑無任何權限,'r'表示具有只讀權限,'rw'表示有讀寫權限。
注意:每行配置只能配置單個用戶或用戶組。

例3:權限配置文件conf/authz的內容如下:
[groups]
g_admin = admin,thinker

[admintools:/]
@g_admin = rw
* =

[test:/home/thinker]
thinker = rw
* = r

在 上述配置文件中,定義了一個用戶組"g_admin",該用戶組包含用戶"admin"和"thinker"。然后定義了2個版本庫路徑權限段。其中,版 本庫"admintools"只有用戶組"g_admin"可讀寫,其他用戶無任何權限;版本庫"test"中路徑"/home/thinker"只有用 戶"thinker"有讀寫權限,其他用戶只有可讀權限。

5) 總結

在本文中,詳細介紹了svnserve程序的3個配置文件。SVN管理員可以通過這3個配置文件設置svnserve服務的用戶名口令,以及對版本庫路徑的訪問權限。這些配置文件保存后就立即生效,不需要重啟svnserve服務。
需要強調的是本文介紹的配置文件只對svnserve服務有效,即客戶端通過前綴為svn://或svn+ssh://的URL訪問版本庫有效,而對通過前綴http://、https://或file:///的URL無效。


6)、總結與提高

錯誤搞定后,接下來就是比較輕松但乏味的事情了,創建公司員工一大堆成員的用戶名和密碼。

?

比較重要的三個配置文件:

passwd: 用戶名和密碼存放位置。

auth.conf: 每個用戶授予權限。

svnserve.conf: SVN的配置文件

?

先說這三個文件的位置:

在創建倉庫時,其目錄下有一個名為conf的文件夾,下面有authz, passwd, svnserve.conf三個文件,由于上面是Apache+SVN的方式,所以不使用其下面的authz和passwd,只使用svnserve.conf。

?

而實際使用的auth.conf和passwd是在添加用戶和權限分配時創建并指定其位置。

passwd在上面第6步(1,創建用戶)指定。passwd是自動生成的,無需手動改動。

auth.conf在上面第6步(2,權限分配)創建。auth.conf需手動添加內容。

注:上面第5步引用了其位置,所以需第5步與之保持一致。

?

下面對實際使用的三個配置文件稍作講解:

1,passwd

是由Apache命令創建后自動生成的,不要直接改動。

?

2,auth.conf

給每個用戶授予權限。詳細解釋,可能會因人而異,但本質上大同小異。

[groups] /*這個表示群組設置

Admin=usr1,user2 /*這個表示admin群組里的成員user1,user2

Develop=u1, u2 /*這個表示Develop群組里的成員 u1,u2

?

[www:/] /*這表示,倉庫www的根目錄下的訪問權限

user1 = rw /*www倉庫user1用戶具有讀和寫權限

user2 = r /* www倉庫userl用戶具只有讀權限

?

@develop=rw /*這表示 群 develop的成員都具有讀寫權限

[/] /*這個表示在所有倉庫的根目錄下

* = r /*這個表示對所有的用戶都具有讀權限

?

3,svnserve.conf

(注:第一次配置時,直接按最下面的例子,去掉注釋就ok了)

每個代碼倉庫都有一個 svnserve.conf 文件來控制 svnserve 守護進程的行為。這個文件位于倉庫的 conf 子目錄。文件的結構與 Subversion 用戶配置文件的結構類似。頂層是段落 (section),以方括號中的詞指定;每個段落之中是 ``variable=value'' 形式的變量定義。以 `#' 開頭的行被忽略。svnserve.conf 當前只使用一個段落,稱為 ``general'',并且支持如下變量:

?

anon-access = none|read|write

??? 決定非授權用戶的訪問級別。write訪問允許所有的倉庫操作。read 訪問允許所有操作,除了提交和修改版本屬性。none 不允許任何訪問。默認級別是 read。

?

auth-access = none|read|write

??? 決定授權用戶的訪問級別,使用與上面相同的訪問級別。默認級別是 write。

?

password-db = filename

??? 設置密碼數據庫的位置。filename可能是相對倉庫中 conf 目錄的位置。沒有默認值。密碼數據庫的格式與本文件相似。它只有一個段落 ``users'';段落中的每個變量是一個用戶名,每個值是一個密碼。

?

realm = realm-name

??? 設置倉庫的授權域(realm)。如果兩個倉庫擁有相同的密碼數據庫,它們應當在同一個域中,反之亦然;這樣的關聯可以允許客戶端為多個倉庫使用單一的密碼緩存。默認域的值是倉庫的路徑,相對于服務器進程的虛根目錄。

?

例子:

[general]
anon-access = none
auth-access = write
password-db = /svn/passwd
authz-db = /svn/auth.conf
realm = My First Repository

上述配置文件設定非鑒權用戶無權限訪問該版本庫;鑒權用戶可對版本庫進行讀寫;用戶名口令文件為相對版本庫conf目錄的文件"/svn/passwd ";權限配置文件為相對版本庫conf目錄的文件"/svn/auth.conf";版本庫的認證域為"My First Repository"。

?

最后附注:

<Location /svn>

DAV svn

SVNParentPath /svn/project??????? ?(此處配置你的版本庫根目錄)

AuthType Basic ?????????????????(連接類型設置 基本驗證)

AuthName "Hello welcome to here" ?(此處字符串內容修改為提示對話框標題)

AuthUserFile /svn/passwd (此處修改為訪問版本庫用戶的文件,用apache 的htpasswd命令生成)

AuthzSVNAccessFile /svn/auth.conf ?(此處修改為訪問版本庫權限的文件)

Require valid-user ???????????????("Requirevalid-user"告訴apache在authfile中所有的用戶都可以訪問。如果沒有它,則只能第一個用戶可以訪問新建庫)

</Location>


?

官方參數說明

svnserve
當對遠程源版本庫使用svnsync時,使用Subversion的自定義網絡協議。

svnserve允許Subversion版本庫使用svn網絡協議,你可以作為獨立服務器進程運行svnserve,或者是使用其它進程,如inetd、xinetd(也是svn://)或使用svn+ssh://訪問方法的sshd為你啟動進程。

一 旦客戶端已經選擇了一個版本庫來傳遞它的URL,svnserve會讀取版本庫目錄的conf/svnserve.conf文件,來檢測版本庫特定的設 置,如使用哪個認證數據庫和應用怎樣的授權策略。關于svnserve.conf文件的詳情見“svnserve,一個自定義的服務器”一節。

svnserve選項
不象前面描述的例子,svnserve沒有子命令—svnserve完全通過選項控制。

--daemon (-d)
導致svnserve以守護進程方式運行,svnserve維護本身并且接受和服務svn端口(缺省3690)的TCP/IP連接。

--listen-port=PORT
在守護進程模式時導致svnserve監聽PORT端口。(FreeBSD守護進程缺省只監聽tcp6—這個選項告訴他們監聽tcp4。)

--listen-host=HOST
svnserve監聽的HOST,可能是一個主機名或是一個IP地址。

--foreground
當與-d一起使用,會導致svnserve停留在前臺,主要用來調試。

--inetd (-i)
導致svnserve使用標準輸出/標準輸入文件描述符,更準確的是使用inetd作為守護進程。

--help (-h)
顯示有用的摘要和選項。

--version
顯示版本信息,版本庫后端存在和可用的模塊列表。

--root=ROOT (-r=ROOT)
設置svnserve服務的版本庫的虛擬根,客戶端提供的URL中顯示的路徑會解釋為這個根的相對路徑,不會允許離開這個根。

--tunnel (-t)
導 致svnserve以管道模式運行,很像inetd操作的模式(兩種模式都維護標準輸入/標準輸出的連接),除了連接是用當前uid的用戶名預先認證過的 這一點。這個選項在客戶端使用如ssh之類的管道時自動傳遞,這意味著你很少有必要再去傳遞這個參數給svnserve,所以如果你發現在命令行輸入了 svnserve --tunnel,并想知道接下來怎么做,可以看“SSH 隧道”一節。

--tunnel-user NAME
與--tunnel選項結合使用;告訴svnserve假定NAME就是認證用戶,而不是svnserve進程的UID用戶,當希望多個用戶通過SSH共享同一個系統帳戶,但是維護各自的提交標示符時非常有用。

--threads (-T)
當以守護進程模式運行,導致svnserve為每個連接產生一個線程而不是一個進程,svnserve進程本身在啟動后會一直在后臺。

--listen-once (-X)
導致svnserve在svn端口接受一個連接,維護完成它退出。這個選項主要用來調試。

轉載于:https://www.cnblogs.com/YHM07/p/4116724.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/375607.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/375607.shtml
英文地址,請注明出處:http://en.pswp.cn/news/375607.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

mongodb地理空間索引原理閱讀摘要

http://www.cnblogs.com/taoweiji/p/3710495.html 具體原理在上面 簡單概述&#xff0c;&#xff08;x,y&#xff09;經緯度坐標&#xff0c;通過geohash的方式&#xff0c;通過N次方塊四分割生成一個坐標碼&#xff0c;然后用坐標碼進行BTREE的索引建立轉載于:https://www.cnb…

angular 頁面加載時可以調用 函數處理

轉載于 作者:海底蒼鷹地址:http://blog.51yip.com/jsjquery/1599.html 我希望頁面加載的時候&#xff0c;我能馬上處理頁面的數據&#xff0c;如請求API .... 所以這樣設置 在某個頁面的控制器中 監聽頁面load phonecatControllers.controller(registerctr, [$scope, $routePa…

刪除排序數組中的重復項

給定一個排序數組&#xff0c;你需要在原地刪除重復出現的元素&#xff0c;使得每個元素只出現一次&#xff0c;返回移除后數組的新長度。 不要使用額外的數組空間&#xff0c;你必須在原地修改輸入數組并在使用 O(1) 額外空間的條件下完成。 示例 1: 給定數組 nums [1,1,2…

android 處理鼠標滾輪事件 【轉】

android處理鼠標滾輪事件&#xff0c;并不是如下函數&#xff1a; 1&#xff09; public boolean onKeyDown(int keyCode, KeyEvent event) 2) public boolean dispatchKeyEvent(KeyEvent event) 3) public boolean onTouchEvent(MotionEvent event) 而是如下函數 …

ASP.NET數據報表之柱狀圖 ------工作日志

#region 柱形色調 /// <summary> /// 柱形色調 /// </summary> private string[] myColor new string[] { "DarkGreen", "DimGray", "DodgerBlue", "Orchid", //Peru "Orange", "Orchid", &q…

接口安全--簽名驗證

為防止第三方冒充客戶端請求服務器&#xff0c;可以采用參數簽名驗證的方法&#xff1a; 將請求參數中的各個鍵值對按照key的字符串順序升序排列&#xff08;大小寫敏感&#xff09;&#xff0c;把key和value拼成一串之后最后加上密鑰&#xff0c;組成key1value1key2value2PRIV…

Runtime類

Runtime類也在java.lang包中&#xff0c;這個類沒有提供構造器&#xff0c;但是提供的卻非靜態方法&#xff0c;而是在方法中提供了一個靜態方法來返回當前進程的Runtime實例&#xff0c;采用的單例設計模式。 其作用&#xff1a;可以對當前java程序進程進行操作、打開本機程序…

Spring MVC 返回NULL時客戶端用$.getJSON的問題

如果Spring MVC返回是NULL&#xff0c;那么客戶端的$.getJSON就不會觸發&#xff1b; 20170419補充 后臺的輸出為&#xff1a; DEBUG [org.springframework.web.servlet.DispatcherServlet] - Null ModelAndView returned to DispatcherServlet with name springMVC: assuming …

duilib設置滾動條自動滾動到底

控件屬性中添加 vscrollbar"true" autovscroll"true"分別是啟用豎向滾動條&#xff0c;是否隨輸入豎向滾動

MVC,MVP 和 MVVM 的圖示

復雜的軟件必須有清晰合理的架構&#xff0c;否則無法開發和維護。 MVC&#xff08;Model-View-Controller&#xff09;是最常見的軟件架構之一&#xff0c;業界有著廣泛應用。它本身很容易理解&#xff0c;但是要講清楚&#xff0c;它與衍生的 MVP 和 MVVM 架構的區別就不容易…

Java JDBC學習實戰(二): 管理結果集

在我的上一篇博客《Java JDBC學習實戰&#xff08;一&#xff09;&#xff1a; JDBC的基本操作》中&#xff0c;簡要介紹了jdbc開發的基本流程&#xff0c;并詳細介紹了Statement和PreparedStatement的使用&#xff1a;利用這兩個API可以執行SQL語句&#xff0c;完成基本的CURD…

error: storage size of ‘threads’ isn’t known

出錯的代碼行&#xff1a; pthread_t threads[NUM_THREADS];原因&#xff1a; NUM_THREADS 無值 原先&#xff1a; #define NUM_THREADS修改為 #define NUM_THREADS 5

android之相機開發

http://blog.csdn.net/jason0539/article/details/10125017 android之相機開發 分類&#xff1a; android 基礎知識2013-08-20 22:32 9774人閱讀 評論(2) 收藏 舉報Android在android中應用相機功能&#xff0c;一般有兩種&#xff1a;一種是直接調用系統相機&#xff0c;一種自…

文件和文件夾權限-Win7公共盤中出現大量臨時文件

公司中有一個文件服務器&#xff0c;給不同部門和員工設置了不同的權限&#xff0c;最近有員工&#xff08;沒有修改權限&#xff0c;有讀取及執行,讀取,寫入&#xff09;反映在公共盤上修改文件的時候會產生大量的臨時文件&#xff0c;添加上修改權限之后就可以了&#xff0c;…

Duilib編輯框Edit輸入完自動跳到下一個編輯框

首先xml文件中設置edit的maxchar參數&#xff0c;默認255好像。 <edit maxchar"10" />然后在notify函數中加入以下代碼 if (msg.sType _T("textchanged")) {if (static_cast<CEditUI*>(msg.pSender)->GetMaxChar() msg.pSender->GetT…

Mysql數據庫安全管理配置

1.刪除test庫 原因&#xff1a; The default MySQL installation comes with a database named test that anyone can access. This database is intended only for tutorials, samples, testing, etc. Databases named "test" and also databases with names starti…

duilib清空richedit內容

推薦使用以下方法&#xff1a; m_pRichEdit->SetSelAll(); m_pRichEdit->Clear();不推薦使用以下方法&#xff1a; m_pRichEdit->SetText("");雖然效果是一樣的&#xff0c;但是當編輯框中文本存在多種格式的時候&#xff0c;第二種方法會存在問題&#x…

新學了一個用python編寫的簡單的百度貼吧帖子的爬蟲

# -*- coding: utf-8 -*- #--------------------------------------- # 作者&#xff1a;chendn # 語言&#xff1a;Python 2.7.10 #---------------------------------------import string,urllib2 def tieba(url,beginPage,endPage):for i in range(beginPage,endPage1):…

duilib自定義消息

/** NOTE: All Message Numbers below 0x0400 are RESERVED.** Private Window Messages Start Here:*/ #define WM_USER 0x0400從WM_USER往上加就行了

BZOJ 2190儀仗隊【歐拉函數】

問題的唯一難點就是如何表示隊長能看到的人數&#xff1f;如果建系&#xff0c;隊長所在的點為&#xff08;0,0&#xff09;分析幾組數據就一目了然了&#xff0c;如果隊長能看到的點為(m,n),那么gcd&#xff08;m&#xff0c;n&#xff09;1即m n 互質或者是&#xff08;0,1&a…