顛覆對 repo 樹的全部或全部訪問
我在 Linux 伺服器上設置對我的 Subversion 儲存庫的訪問時遇到了一些問題。問題是我似乎只能得到一個全有或全無的結構。要麼每個人都獲得對所有內容的讀取權限,要麼沒有人獲得對任何內容的讀取或寫入權限。
設置:
SVN 儲存庫位於 /www/svn/repoA,repoB,repoC…
儲存庫由 Apache 提供,位置在 etc/httpd/conf.d/subversion.conf 中定義為:
<Location /svn/repoA> DAV svn SVNPath /var/www/svn/repoA AuthType Basic AuthName "svn repo" AuthUserFile /var/www/svn/svn-auth.conf AuthzSVNAccessFile /var/www/svn/svn-access.conf Require valid-user </Location> <Location /svn/repoB> DAV svn SVNPath /var/www/svn/repoB AuthType Basic AuthName "svn repo" AuthUserFile /var/www/svn/svn-auth.conf AuthzSVNAccessFile /var/www/svn/svn-access.conf Require valid-user </Location> ...
svn-access.conf 設置為:
[/] * = [/repoA] * = userA = rw [/repoB] * = userB = rw
但是將 URL/svn/repoA 作為 userA 簽出會導致訪問被禁止。
將其更改為
[/] * = userA = r [/repoA] * = userA = rw [/repoB] * = userB = rw
授予 userA 對所有儲存庫(包括 repoB)的讀取訪問權限,但僅授予對 repoA 的讀取訪問權限!
所以為了讓 userA 獲得對 repoB 的讀寫訪問權限,我需要添加
[/] userA = rw
這是精神上的。
我也試過改變
Require valid-user
到
Require user userA
對於 subversion.conf 中的 repoA,但這只給了我對它的讀取權限。
我需要一種預設拒絕所有人訪問每個儲存庫的方法,僅在明確定義時才授予讀/寫訪問權限。
誰能告訴我我在這裡做錯了什麼?我已經花了幾個小時進行測試和Google搜尋,但結果都是空的,所以現在我正在做恥辱的文章。
編輯
我選擇了 Shane 的第一個解決方案,最終得到了以下工作配置:
/etc/httpd/conf.d/subversion.conf:
<Location /svn> DAV svn SVNParentPath /var/www/svn AuthType Basic AuthName "Subversion repo" AuthUserFile /var/svn-auth.conf Require valid-user </Location>
/var/svn-access.conf:
[/] * = [repoA:/] * = userA = rw [repoB:/] * = userB = rw
您遇到的問題的共同主題是您的
[/repoA]
和[/repoB]
部分什麼都不做,對嗎?這是有原因的。您授權的路徑與 authz 訪問文件的位置*無關;*它們與它處理訪問控制的 SVN 儲存庫有關。
那麼,你的
[/]
部門?它授予對/svn/repoA/
和的訪問權限/svn/repoB/
;它不授予對/svn/
. 同樣,您的[/repoA]
部分授予對/svn/repoA/repoA
和的訪問權限/svn/repoB/repoA
;的規則[/trunk]
將授予對/svn/repoA/trunk
和的訪問權限/svn/repoB/trunk
。您已經
SVNPath
為每個儲存庫設置了指令,但您為每個儲存庫指向相同的授權文件 - 因此每個儲存庫都有相同的訪問規則。有一種語法可以為不同的儲存庫設置不同的授權,但那是在你使用SVNParentPath
.所以,有兩個選擇:
- 切換到使用
SVNParentPath /var/www/svn
而不是在 Apache 配置中硬定義每個 repo,並將 authz 文件更改為具有 repo-targeted 權限:[/] * = userA = r [repoA:/] * = userA = rw [repoB:/] * = userB = rw
- 為每個儲存庫使用不同的 authz 文件,請記住,授予訪問權限的路徑是相對於儲存庫的根目錄的。