專家講解 如何利用mod_dav_svn訪問SVN倉庫?
上節我們介紹到了使用mod_dav_svn訪問SVN倉庫方法中第二部分,安裝配置中的加入認證信息,本文繼續介紹,另外介紹一下使用mod_dav_svn訪問SVN倉庫過程中應該注意的事項。下面是具體介紹,歡迎大家一起來學習。
5、進行目錄訪問控制
上面配置只能對Location標簽內的路徑執行某些動作時進行控制,若希望控制版本倉庫中目錄訪問權限,需要利用mod_authz_svn模塊。在上面的subversion.conf中,我們已經激活了該模塊。
所以,接下來要做的,就是在Location標簽中使用authz功能:
引用
AuthzSVNAccessFile/etc/svn/accesspolicy.conf
其中,AuthzSVNAccessFile指向的就是svnserve服務時使用的權限配置文件。每一段命名一個版本庫和里面的路徑,使用“認證用戶(組)=權限”的方式描述每個用戶(組)訪問版本庫的級別:r是只讀,rw是可讀寫,留空是不允許訪問。另外,*表示所有用戶,可以用于控制匿名用戶的訪問SVN權限;@表示已經被分組的組名。
例如:
引用
#cat/etc/svn/accesspolicy.conf
[groups]
committers=paul,linuxing
developers=linuxing,hanry
[/]
*=r#用于控制匿名用戶的
@committers=rw
[/dev]
@developers=rw
[/private]
*=
@comitters=r
這里定義了兩個組,并對版本庫中的特定路徑給予了訪問權限的控制。
加入AuthzSVNAccessFile選項后,需要重啟httpd服務以讓其生效。但權限控制文件的內容修改后馬上生效,是不需重啟httpd服務。
※更詳細的說明,還可參考前面的日志:[原]使用Subversion的svn協議訪問。下面我們看一下使用mod_dav_svn訪問SVN倉庫時要注意的幾個問題。
三、注意事項
1、如果你有多個版本倉庫,怎么辦?
這時,可以使用多個Location,通過SVNPath來分別指定其路徑;或者,參考配置文件中提供的,用SVNParentPath指定一個總路徑,例如:
引用
SVNParentPath/var/www/svn
但是,你務必需要給該總路徑適當的宿主權限:
#chown-Rapache.apache/var/www/svn
否則,訪問時會提示權限不足的錯誤。接著,你就可以使用瀏覽器訪問http://ip/repos/stuff等每個單獨的版本庫了。(每個單獨的版本庫,其Revision信息是獨立的)
◎還需要留意兩點:
a、雖然使用SVNParentPath指定了總路徑,而且用瀏覽器去訪問http://ip/repos可能會看到一些瀏覽信息。但如果總路徑并沒有加入到版本倉庫中管理(即沒有.svn目錄下的文件),則通過svn客戶端去訪問版本倉庫時,應通過實際倉庫的路徑去訪問,如:http://ip/repos/stuff;
b、使用mod_dav_svn模塊,通過Apache訪問版本倉庫,是不需要啟動svnserve服務的,一切都已經由dav模塊做接口完成數據請求的工作,通過svn客戶端以HTTP協議訪問版本倉庫即可。
2、能否通過一個權限配置文件對每個版本庫進行訪問SVN權限?
Subversion提供版本庫分支管理功能。因此,在svnserve服務,或使用mod_dav_svn模塊,使用Apache訪問Subversion版本庫時,當定義權限配置文件中,是可以對每個版本庫進行權限控制的。
以mod_dav_svn方式為例,像上面提到的SVNParentPath來指定版本庫的總路徑,如:
引用
SVNParentPath=/var/www/svn
而實際上,真正的版本庫是/var/www/svn下面的一些子目錄,例如/var/www/svn/project1、/var/www/svn/project2,它們才是由svnadmincreate創建的版本倉庫。
這時,可以在權限配置文件中,使用[repository:/path]的方式定義權限:
引用
[project1:/]
*=r
@project1_committer=rw
[project2:/]
*=r
@project2_committer=rw
3、Apache與svn權限控制該用哪個?
根據上面的描述,可以在Apache中使用
事實上,它們的區別在于權限的管理者不同,對于瀏覽器或svn客戶端來說,除了Linux文件系統本身的訪問權限外,
但由于對命令的控制比較復雜,而且容易導致誤操作,因此,我更建議使用svnauthz的方式管理訪問SVN權限:
引用
這里的/etc/httpd/conf.d/subversion.conf文件中,不需要加入
這這里,SatisfyAny用于允許先用匿名方式嘗試訪問,并根據svnauthz對匿名用戶的控制給予訪問權限。若沒有這句話,則無論svnauthz中是否加入了“*=r”的寫法,匿名用戶都是無法訪問的。
4、svn協議與mod_authz_svn模塊
svn協議,用于客戶端使用svn://方式訪問版本庫,而mod_authz_svn模塊讓客戶端可通過Apache訪問版本庫,它們分別使用不同的服務:svnserve、httpd進行訪問。由于用戶、組權限不同,權限管理方式也不相同,因此,不建議同時啟動兩種訪問方式。
而易用性,管理方便的角度來分析,Apache以mod_authz_svn模塊的方式訪問版本庫會更多人選擇。(mod_authz_svn方式,使用80端口訪問,并且提供https等加密傳輸,用于用戶信息驗證的密碼保存方式不是明文的)。本節關于使用mod_dav_svn訪問SVN倉庫方法介紹完畢。
【編輯推薦】