Apache-2.2

如何僅限制對子 SVN 目錄的訪問?

  • January 9, 2015

我正在嘗試為通過 Apache 2 訪問的 SVN 儲存庫配置權限。我想要的是讓任何人訪問根目錄,同時將經過身份驗證的使用者限制為子目錄。例子:

/demo
/demo/project1
/demo/project1/sensitive-data  # This path should require user authentication.
/demo/project2

起初,我認為這很簡單:

<Location /demo>
   DAV svn
   SVNPath /home/svn/demo
   AuthType Basic
   AuthName demo
   AuthUserFile /etc/subversion/passwd
   <LimitExcept GET PROPFIND OPTIONS REPORT>
       Require valid-user
   </LimitExcept>
</Location>

<Location /demo/project1/sensitive-data>
   DAV svn
   Require valid-user
</Location>

通過 HTTP 使用時(例如使用 CURL),Apache 符合配置:我可以訪問:

正如預期的那樣,我HTTP 401 Unauthorized在嘗試檢索http://example.com/demo/project1/sensitive-data時得到了一個。

另一方面,做:

  • svn checkout http://example.com/demo/ .或者:
  • svn checkout http://example.com/demo/project1/ .

檢索整個目錄樹,包括demo/project1/sensitive-data.

至少,svn checkout http://example.com/demo/project1/sensitive-data/ .要求輸入密碼。

我應該如何配置權限以限制對sensitive-data目錄的訪問svn checkout http://example.com/demo/ .

<Location /demo/project1/sensitive-data>塊在結帳時無關緊要:它僅在直接訪問http://example.com/demo/project1/sensitive-data時使用,這就是導致 HTTP 請求的原因,HTTP 401 Unauthorized並且該特定目錄的結帳需要身份驗證.

Subversion 文件中解釋了配置基於路徑的授權的正確方法:

  1. <Location /demo>指向訪問文件:
<Location /demo>
   ...
   AuthzSVNAccessFile /etc/subversion/access.conf
   ...
</Location>
  1. 訪問文件定義了誰可以訪問特定的文件和目錄。基本範例:
[/]
* = r                  # Everyone should be able to access the repository.

[/demo/project1/sensitive-data] # Note that there is no trailing slash.
* =                    # Nobody should access the sensitive directory.

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