3

我有一个 SVN 存储库,它配置为通过 Apache httpd 使用基本身份验证来限制对指定用户的访问。为了支持在同一台服务器上运行的持续集成服务器(和其他只读服务),我想允许来自本地主机的匿名读取访问。

在进行了一些研究(即谷歌搜索)后,我想出了尝试以下 Apache 配置:

<Location /svn>
   DAV svn
   SVNParentPath /var/svn

   AuthType Basic
   AuthName "SVN"
   AuthBasicProvider external
   AuthExternal pwauth

   #Only allow specified users to login to SVN
   require user UID1
   require user UID2
   require user UID3

   #Allow anonymous reads from localhost
   <LimitExcept GET PROPFIND OPTIONS REPORT>
      Order allow,deny
      Allow from 127.0.0.1
   </LimitExcept>
</Location>

当我尝试从本地服务器进行匿名签出时,仍然会提示输入密码(在本例中为 root 用户)。

关于我可能做错了什么或我应该如何正确配置事情以允许这样做的任何想法或建议?

我最初尝试配置匿名读取访问是基于页面上的信息。

4

6 回答 6

1
  Satisfy Any
  require valid-user

很好地为我工作(可以结帐,不能提交)

编辑

我的块,有相关和不相关的部分

<Location /svn/>
  DAV svn

  SVNListParentPath on
  SVNParentPath "D:/Repositories/"
  SVNIndexXSLT "/svnindex.xsl"

  SVNPathAuthz short_circuit

  SVNCacheTextDeltas off
  SVNCacheFullTexts off

  AuthName "VisualSVN Server"
  AuthType Basic
  AuthBasicProvider file
  AuthUserFile "D:/Repositories/htpasswd"
  AuthzSVNAccessFile "D:/Repositories/authz"

  Satisfy Any
  require valid-user

  # Add Expires/Cache-Control header explictly
  ExpiresActive on
  ExpiresDefault access
</Location>

如果我跳过Satisfy Any,我必须验证任何请求

于 2012-02-13T16:04:47.297 回答
1

如果您有多Require行,默认情况下它是 RequireAny - 只需要通过一个规则。所以你可以这样做

   Require user UID1 UID2 UID3

   #Allow anonymous reads from localhost
   <LimitExcept GET PROPFIND OPTIONS REPORT>
     Require ip 127.0.0.1
   </LimitExcept>
于 2021-01-12T11:26:10.940 回答
0

甚至我也无法解决匿名访问问题。

但是,我没有创建一个新的只读用户,而是通过使用基于文件的 url 使集成(与 redmine)一起工作。因此,我没有引用 http url(需要身份验证),而是使用 file:///。这不需要身份验证。

于 2014-09-16T07:52:48.003 回答
0

我认为这不会起作用,“需要用户”指令对整个位置块都处于活动状态。

我的第一个想法是将“需要用户”放在限制块内,这不起作用,因为无论您从哪个 IP 请求数据,限制块都是活动的。

创建一个名为 svn-localhost 的第二个目录,将你的 svn root 映射到那里第二次,只存在限制块。

于 2012-02-13T15:44:27.883 回答
0

我认为您在块Satisfy Any的底部之后,如果任何and指令匹配,Location则允许访问(与默认设置相反,默认设置要求它们全部匹配)。AllowRequire

文档在这里

于 2012-02-13T15:39:07.243 回答
0

我从来没有找到一个解决方案,它只允许来自本地主机的匿名读取访问,并且需要对来自任何远程系统的读取和写入进行身份验证。

最终,我为需要进行身份验证的应用程序创建了一个用户名/密码。

这不是理想的解决方案......但它应该可以正常工作。

于 2012-02-22T18:28:52.857 回答