我有一个SVN存储库,配置为通过Apache httpd使用基本身份验证来限制对指定用户的访问。为了支持在同一服务器上运行的持续集成服务器(和其他只读服务),我希望允许从localhost进行匿名读取访问。
在进行了一些研究(即谷歌搜索)后,我想出了以下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用户)。
关于我可能做错了什么或者我应该如何正确配置以允许这样做的任何想法或建议?
我原先尝试配置匿名读取访问权限取决于this页面上的信息。
答案 0 :(得分: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
,我必须验证任何请求
答案 1 :(得分:0)
我认为您在Satisfy Any
块底部的Location
之后,如果Allow
和{{1}的任何,则允许访问}指令匹配(与默认值相对,它要求 all 匹配)。
文档为here。
答案 2 :(得分:0)
我不认为这会起作用 “require user”指令对整个位置块有效。
我的第一个想法是将“require user”置于限制块内,这不起作用,因为无论您从哪个IP请求数据,限制块都处于活动状态。
创建一个名为svn-localhost的第二个目录,第二次映射你的svn root,只有限制块存在。
答案 3 :(得分:0)
我从来没有找到过只允许从localhost进行匿名读取访问的解决方案,并且需要对来自任何远程系统的读写进行身份验证。
最终,我为需要验证的应用程序创建了用户名/密码。
这不是理想的解决方案......但应该正常工作。
答案 4 :(得分:0)
即使我无法解决匿名访问问题。
但是,我没有创建一个新的只读用户,而是通过使用基于文件的URL来实现集成(使用redmine)。所以我没有引用http url(需要身份验证),而是使用file:///。这不需要身份验证。
答案 5 :(得分:0)
如果您有多个 Require
行,默认情况下它是 RequireAny - 只需要通过一个规则。所以你可以这样做
Require user UID1 UID2 UID3
#Allow anonymous reads from localhost
<LimitExcept GET PROPFIND OPTIONS REPORT>
Require ip 127.0.0.1
</LimitExcept>