允许从本地主机进行SVN匿名读取访问

允许从本地主机进行SVN匿名读取访问,svn,apache,httpd.conf,mod-dav-svn,Svn,Apache,Httpd.conf,Mod Dav Svn,我有一个SVN存储库,配置为通过ApacheHTTPD使用基本身份验证来限制对指定用户的访问。为了支持在同一台服务器上运行的持续集成服务器(和其他只读服务),我希望允许本地主机进行匿名读取访问 在进行了一些研究(即谷歌搜索)之后,我想到了尝试以下Apache配置: <Location /svn> DAV svn SVNParentPath /var/svn AuthType Basic AuthName "SVN" AuthBasicProvider

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

在进行了一些研究(即谷歌搜索)之后,我想到了尝试以下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>

DAV svn
SVNParentPath/var/svn
AuthType Basic
AuthName“SVN”
AuthBasicProvider外部
auth外部pwauth
#仅允许指定用户登录到SVN
需要用户UID1
需要用户UID2
需要用户UID3
#允许从本地主机进行匿名读取
命令允许,拒绝
允许从127.0.0.1开始
当我尝试从本地服务器进行匿名签出时,仍然会收到输入密码的提示(在本例中为root用户)

关于我可能做错了什么,或者我应该如何正确配置来允许这样做,有什么想法或建议吗


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

我认为您是在查找
位置
块底部的
满足任何
,如果
允许
要求
指令匹配,则允许访问(与默认设置相反,默认设置要求它们全部匹配)


文档是。

我认为这是行不通的 对于整个位置块,“require user”指令处于活动状态

我的第一个想法是将“require user”放在限制块中,这不会起作用,因为无论您从哪个ip请求数据,限制块都是活动的

创建第二个名为svnlocalhost的目录,在仅存在限制块的情况下再次将您的svn根映射到该目录

  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>

DAV svn
SVNListParentPath打开
SVNParentPath“D:/Repositories/”
svnindexlt“/svnindex.xsl”
SVNPathAuthz短路
SVNCacheTextDeltas关闭
SVNCacheFullText关闭
AuthName“VisualSVN服务器”
AuthType Basic
AuthBasicProvider文件
AuthUserFile“D:/Repositories/htpasswd”
authzsvnacessfile“D:/Repositories/authz”
满足任何
需要有效用户
#明确添加Expires/Cache控制头
过期于
过期默认访问权限

如果我跳过
满足任何
,我必须对任何请求进行身份验证

我始终无法找到一个解决方案,该解决方案只允许本地主机进行匿名读取访问,并且需要对任何远程系统的读写进行身份验证

最后,我为需要验证的应用程序创建了用户名/密码


这不是理想的解决方案…但它应该可以很好地工作。

即使是我也无法解决匿名访问问题


但是我没有创建一个新的只读用户,而是通过使用基于文件的url实现了与redmine的集成,我正在使用file:///. 这不需要身份验证。

如果您有多行默认情况下为requireny的
require
行,则只需通过一条规则。因此,您可以这样做

   Require user UID1 UID2 UID3

   #Allow anonymous reads from localhost
   <LimitExcept GET PROPFIND OPTIONS REPORT>
     Require ip 127.0.0.1
   </LimitExcept>
需要用户UID1 UID2 UID3
#允许从本地主机进行匿名读取
要求ip 127.0.0.1

查看您的Apache日志,查看它认为您来自哪个IP。如果启用了IPv6,您可能需要添加
Allow from::1
ssl\u access\u日志中的请求显示它来自我指定的127.0.0.1:
127.0.0.1---[13/Feb/2012:10:38:40-0500]"选项/svn/myRepo
。我也想到了这一点。不幸的是,我们的svn:externals将使用此方法被破坏,因为它们都指向需要身份验证的/svn。嗯,好吧,这是怎么回事:分别听127.0.0.1和您的公共ip,然后定义两个虚拟主机,一个用于公共ip,一个用于环回ip…硬p你的问题的艺术在于如何将内部请求与外部请求分离。这似乎对我不起作用。它允许我匿名签出,但也可以匿名签入!你真的要让它在不指定用户id的情况下匿名签出吗?@Michael-on,你可以尝试从任何一个发布的服务器上进行签出提交很遗憾,我无法从工作中尝试您的URL(由于网络安全限制)。然而,我尝试了,但我无法得到您所描述的适合我自己的内容。您是如何在配置中指定
要求有效用户
部分以将异常限制为只读的?@Michael-没有什么特别的。我将我的位置添加到了答案的编辑部分(完整位置),而这部分是有效的(使用
AuthzSVNAccessFile
)它不允许我将匿名连接仅限于来自本地主机的连接。看起来这样做的话,我将不得不放弃,并创建一个只供我的CI服务器使用的帐户。不过,感谢您的帮助!:)