我正在尝试为通过 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>
指向访问文件:访问文件定义了谁可以访问特定的文件和目录。基本示例: