Apache-2.2
如何僅限制對子 SVN 目錄的訪問?
我正在嘗試為通過 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 文件中解釋了配置基於路徑的授權的正確方法:
<Location /demo>
指向訪問文件:<Location /demo> ... AuthzSVNAccessFile /etc/subversion/access.conf ... </Location>
- 訪問文件定義了誰可以訪問特定的文件和目錄。基本範例:
[/] * = 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.