如何限制仅访问子 SVN 目录?

如何限制仅访问子 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/ .

答案1

<Location /demo/project1/sensitive-data>块在进行结帐时无关紧要:它仅在访问时使用http://example.com/demo/project1/sensitive-dataHTTP 401 Unauthorized直接,这就是为什么 HTTP 请求会导致并且检出这个特定目录需要身份验证的原因。

配置基于路径的授权的正确方法是Subversion 文档中有解释

  1. <Location /demo>指向访问文件:

    <Location /demo>
        ...
        AuthzSVNAccessFile /etc/subversion/access.conf
        ...
    </Location>
    
  2. 访问文件定义谁可以访问特定文件和目录。基本示例:

    [/]
    * = 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.
    

相关内容