![使用 AuthzSVNAccessFile 控制 SVN Access 产生 HTTP 400 错误请求](https://linux22.com/image/619585/%E4%BD%BF%E7%94%A8%20AuthzSVNAccessFile%20%E6%8E%A7%E5%88%B6%20SVN%20Access%20%E4%BA%A7%E7%94%9F%20HTTP%20400%20%E9%94%99%E8%AF%AF%E8%AF%B7%E6%B1%82.png)
我在现有的 Subversion 服务器上有一个新的存储库,需要我们在存储库内执行基于路径的授权。我发现 apache 中的 AuthzSVNAccessFile 指令直接负责允许此功能。在修复了其他几个问题(例如 AuthzSVNAccessFile 阻止 SVNListParentPath 正常运行)后,我只剩下一个问题。我可以签出、可以更新、可以提交,但我无法执行 SVN COPY 来执行分支/标记操作。当我在 Apache 配置中注释掉 AuthzSVNAccessFile 行时,除了明显的路径授权外,一切都按预期运行。
版本:
- 服务器操作系统是 Debian 6.0.7 (Squeeze)
- Apache 2.2.16-6+squeeze11
- 服务器 Subversion 1.6.12dfsg-7
- 客户端运行的是 Windows
- 尝试过的客户有:
- TortoiseSVN 1.8.2 Build 24708 64位
- SVN CLI 客户端 1.8.3(r1516576)
身份验证通过 AD 执行到 Windows 2003 域,似乎运行正常。我已删除所有其他配置和存储库设置,以生成此重现问题的单一配置。
Apache 配置:
<VirtualHost *:443>
ServerName svn-test.company.com
ServerAlias /svn-test
ServerAdmin [email protected]
SSLEngine On
SSLCertificateFile /etc/apache2/apache.pem
ErrorLog /var/log/apache2/svn-test_error.log
LogLevel warn
CustomLog /var/log/apache2/svn-test_access.log combined
ServerSignature On
# Repository Access to all Repositories
<Location "/">
DAV svn
SVNParentPath /var/svn
SVNListParentPath on
AuthBasicProvider ldap
AuthType Basic
AuthzLDAPAuthoritative Off
AuthName "Subversion Test Repository System"
AuthLDAPURL "ldap://adserver.company.com:389/DC=corp,DC=company,DC=com?sAMAccountName?sub?(objectClass=*)" NONE
AuthLDAPBindDN "CN=service_account,OU=ServiceIDs,OU=corp,OU=Delegated,DC=na,DC=corp,DC=company,DC=com"
AuthLDAPBindPassword service_account_password
Require valid-user
SSLRequireSSL
</Location>
# <LocationMatch /.+> is a really dirty trick to make listing of repositories work
# http://d.hatena.ne.jp/shimonoakio/20080130/1201686016
<LocationMatch /.+>
AuthzSVNAccessFile /etc/apache2/svn_path_auth
</LocationMatch>
</VirtualHost>
SVN访问文件:
[/]
* = rw
使用的存储库(AuthTestBasic)由以下目录结构组成,不包含任何外部内容(这是一个文字列表,而不是示例):
/
/branches/
/tags/
/trunk/
/trunk/somefile.txt
Tortoise 在标签结果窗口的标签操作过程中产生以下错误:
Adding directory failed: COPY on /authtestbasic/!svn/bc/2/trunk (400 Bad Request)
svn.exe CLI 客户端产生以下错误:
C:\Users\e20epkt>svn copy https://servername/authtestbasic/trunk https://servername/authtestbasic/tags/tag1 -m "svn cli client"
svn: E175002: Adding directory failed: COPY on /authtestbasic/!svn/bc/2/trunk (400 Bad Request)
Apache 错误日志中没有任何内容,但是 Apache 访问日志中包含以下内容(IP 地址和用户名显然发生了变化):
10.1.2.100 - - [17/Oct/2013:11:53:40 -0700] "OPTIONS /authtestbasic/trunk HTTP/1.1" 401 2595 "-" "SVN/1.8.3 (x64-microsoft-windows) serf/1.3.1 TortoiseSVN-1.8.2.24708"
10.1.2.100 - myuseraccount [17/Oct/2013:11:53:40 -0700] "OPTIONS /authtestbasic/trunk HTTP/1.1" 200 996 "-" "SVN/1.8.3 (x64-microsoft-windows) serf/1.3.1 TortoiseSVN-1.8.2.24708"
10.1.2.100 - myuseraccount [17/Oct/2013:11:53:40 -0700] "OPTIONS /authtestbasic/trunk HTTP/1.1" 200 884 "-" "SVN/1.8.3 (x64-microsoft-windows) serf/1.3.1 TortoiseSVN-1.8.2.24708"
10.1.2.100 - myuseraccount [17/Oct/2013:11:53:40 -0700] "PROPFIND /authtestbasic/trunk HTTP/1.1" 207 692 "-" "SVN/1.8.3 (x64-microsoft-windows) serf/1.3.1 TortoiseSVN-1.8.2.24708"
10.1.2.100 - myuseraccount [17/Oct/2013:11:53:40 -0700] "PROPFIND /authtestbasic/!svn/vcc/default HTTP/1.1" 207 596 "-" "SVN/1.8.3 (x64-microsoft-windows) serf/1.3.1 TortoiseSVN-1.8.2.24708"
10.1.2.100 - myuseraccount [17/Oct/2013:11:53:40 -0700] "REPORT /authtestbasic/!svn/bc/0/trunk HTTP/1.1" 404 580 "-" "SVN/1.8.3 (x64-microsoft-windows) serf/1.3.1 TortoiseSVN-1.8.2.24708"
10.1.2.100 - myuseraccount [17/Oct/2013:11:53:40 -0700] "PROPFIND /authtestbasic/!svn/vcc/default HTTP/1.1" 207 596 "-" "SVN/1.8.3 (x64-microsoft-windows) serf/1.3.1 TortoiseSVN-1.8.2.24708"
10.1.2.100 - myuseraccount [17/Oct/2013:11:53:40 -0700] "REPORT /authtestbasic/!svn/bc/2/trunk HTTP/1.1" 200 674 "-" "SVN/1.8.3 (x64-microsoft-windows) serf/1.3.1 TortoiseSVN-1.8.2.24708"
10.1.2.100 - myuseraccount [17/Oct/2013:11:53:40 -0700] "PROPFIND /authtestbasic/!svn/bc/2/trunk HTTP/1.1" 207 548 "-" "SVN/1.8.3 (x64-microsoft-windows) serf/1.3.1 TortoiseSVN-1.8.2.24708"
10.1.2.100 - myuseraccount [17/Oct/2013:11:53:40 -0700] "PROPFIND /authtestbasic/tags/tag1 HTTP/1.1" 404 580 "-" "SVN/1.8.3 (x64-microsoft-windows) serf/1.3.1 TortoiseSVN-1.8.2.24708"
10.1.2.100 - myuseraccount [17/Oct/2013:11:53:40 -0700] "MKACTIVITY /authtestbasic/!svn/act/f1e9dc07-fb5e-5a41-ac22-907705ef6e5e HTTP/1.1" 201 708 "-" "SVN/1.8.3 (x64-microsoft-windows) serf/1.3.1 TortoiseSVN-1.8.2.24708"
10.1.2.100 - myuseraccount [17/Oct/2013:11:53:40 -0700] "PROPFIND /authtestbasic/tags HTTP/1.1" 207 580 "-" "SVN/1.8.3 (x64-microsoft-windows) serf/1.3.1 TortoiseSVN-1.8.2.24708"
10.1.2.100 - myuseraccount [17/Oct/2013:11:53:40 -0700] "CHECKOUT /authtestbasic/!svn/vcc/default HTTP/1.1" 201 708 "-" "SVN/1.8.3 (x64-microsoft-windows) serf/1.3.1 TortoiseSVN-1.8.2.24708"
10.1.2.100 - myuseraccount [17/Oct/2013:11:53:40 -0700] "PROPPATCH /authtestbasic/!svn/wbl/f1e9dc07-fb5e-5a41-ac22-907705ef6e5e/2 HTTP/1.1" 207 596 "-" "SVN/1.8.3 (x64-microsoft-windows) serf/1.3.1 TortoiseSVN-1.8.2.24708"
10.1.2.100 - myuseraccount [17/Oct/2013:11:53:40 -0700] "CHECKOUT /authtestbasic/!svn/ver/1/tags HTTP/1.1" 201 724 "-" "SVN/1.8.3 (x64-microsoft-windows) serf/1.3.1 TortoiseSVN-1.8.2.24708"
10.1.2.100 - myuseraccount [17/Oct/2013:11:53:40 -0700] "COPY /authtestbasic/!svn/bc/2/trunk HTTP/1.1" 400 596 "-" "SVN/1.8.3 (x64-microsoft-windows) serf/1.3.1 TortoiseSVN-1.8.2.24708"
10.1.2.100 - myuseraccount [17/Oct/2013:11:53:40 -0700] "DELETE /authtestbasic/!svn/act/f1e9dc07-fb5e-5a41-ac22-907705ef6e5e HTTP/1.1" 204 1956 "-" "SVN/1.8.3 (x64-microsoft-windows) serf/1.3.1 TortoiseSVN-1.8.2.24708"
您会看到倒数第二行包含带有 HTTP 400 响应的 COPY 命令,但是,似乎没有任何迹象表明原因。
请注意,虽然这是测试服务器上的测试存储库,但我在此测试设置中遇到了同样的问题,我已排除了所有其他可能的原因(混合存储库配置、外部等)。我还确认存储库 (/var/svn/authtestbasic) 的所有文件均归 Apache 用户 www-data 所有。
答案1
这个错误AuthzSVNAccessFile
描述了与结合时出现的问题SVNListParentPath
,同时还提到该<LocationMatch /.+>
解决方法会破坏复制命令。
你运行的是哪个版本的 SVN?由于 2010 年已经修补了该版本,我希望发行版现在已经整合了该版本。