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