Apache-2.2

如何通過 WebSVN 限制儲存庫訪問?

  • March 11, 2015

我有多個通過 Apache 2.2 和 WebDAV 提供的顛覆儲存庫。它們都位於一個中心位置,我以這篇debian-administration.org文章為基礎(儘管我放棄了對簡單 htpasswd 文件的數據庫身份驗證)。

從那時起,我也開始使用WebSVN。我的問題是,並非系統上的所有使用者都應該能夠訪問不同的儲存庫,並且 WebSVN 的預設設置是允許任何可以進行身份驗證的人。

根據 WebSVN 文件,解決這個問題的最好方法是使用 subversion 的路徑訪問系統,所以我希望使用 AuthzSVNAccessFile 指令來創建它。

但是,當我這樣做時,我不斷收到“403 Forbidden”消息。

我的文件如下所示:

我在文件中有預設策略設置:

<Location /svn/>
 DAV svn
 SVNParentPath  /var/lib/svn/repository

 Order deny,allow
 Deny from all
</Location>

每個儲存庫都會獲得一個策略文件,如下所示:

<Location /svn/sysadmin/>
   Include  /var/lib/svn/conf/default_auth.conf
   AuthName "Repository for sysadmin"
   require user joebloggs jimsmith mickmurphy
</Location>

default_auth.conf 文件包含以下內容:

SVNParentPath      /var/lib/svn/repository
AuthType           basic
AuthUserFile       /var/lib/svn/conf/.dav_svn.passwd
AuthzSVNAccessFile /var/lib/svn/conf/svnaccess.conf

我不完全確定為什麼我需要 default_auth.conf 中的第二個 SVNParentPath,但我今天剛剛添加了這一點,因為添加 AuthzSVNAccessFile 指令導致我收到錯誤消息。

具有完全許可的訪問文件

[/]
joebloggs = rw

系統執行良好(並且基本上沒有改變),但是當我開始嘗試添加任何類型的限制時,例如

[sysadmin:/]
joebloggs = rw

相反,我再次收到“權限被拒絕”錯誤。日誌文件條目是:

[Thu May 28 10:40:17 2009] [error] [client 89.100.219.180] Access denied: 'joebloggs' GET websvn:/
[Thu May 28 10:40:20 2009] [error] [client 89.100.219.180] Access denied: 'joebloggs' GET svn:/sysadmin

我需要做什麼才能使其正常工作?apache配置錯了,還是我對svnaccess.conf文件的理解不對?

如果我以錯誤的方式解決這個問題,我對我的整體方法沒有特別的依戀,所以也可以隨意提供替代方案。

更新(20090528-1600):

我試圖實現這個答案,但我仍然無法讓它正常工作。

我知道大部分配置都是正確的,因為我已經添加了

[/]
joebloggs = rw

一開始,“joebloggs”就擁有所有正確的訪問權限。

當我嘗試去特定於儲存庫時,做類似的事情

[/]
joebloggs = rw

[sysadmin:/]
mickmurphy = rw

然後我得到了 mickmurphy 的權限被拒絕錯誤(joebloggs 仍然有效),錯誤類似於我之前已經遇到的錯誤

[Thu May 28 10:40:20 2009] [error] [client 89.100.219.180] Access denied: 'mickmurphy' GET svn:/sysadmin

另外,我之前忘了解釋我所有的儲存庫都在下面

/var/lib/svn/repository

更新(20090529-1245):

讓它工作仍然沒有運氣,但所有跡像似乎都指向問題在於顛覆中的路徑訪問控制無法正常工作。我的假設是我沒有配置 apache 或 svn 來正確辨識我的儲存庫結構。

這是因為'

$$ / $$’ 條目似乎完美無缺。 我還想到這個問題可能更適合 StackOverflow?

更新(20090603-1740):

作為對這個問題的評論之一的回應,我的顛覆本身的 WebDAV 設置被賦予位置 /svn/ repos,但 websvn 設置為 /websvn。

該問題可能與兩個位置指令之間的配置拆分有關,但我不確定。

與其在兩個地方(apache config 和 authz 文件)定義權限,不如在 authz 文件中定義它們。像這樣:

httpd.conf

<Location /svn>
 DAV svn
 SVNParentPath /var/lib/svn/repository

 Require valid-user
 AuthType Basic
 AuthName "Subversion Repository"
 AuthUserFile /path/to/.htpasswd

 SVNPathAuthz on
 AuthzSVNAccessFile /path/to/svn.authz
</Location>

svn.authz

[groups]
sysadmins = joebloggs jimsmith mickmurphy

# By default, nobody has any permissions
[/]
* = 

# sysadmins get access to the sysadmin repository
[sysadmin:/]
@sysadmins = rw

顯然,您還需要 htpasswd 文件中的相應使用者。

引用自:https://serverfault.com/questions/13853