我正在寻找一个允许通过存储库权限而无需使用 SSH 的 SVN 设置。目前,我们有一个带有多个存储库的 SVN 服务器,并通过 SSH+SVN 协议访问它。我为每个存储库创建了一个 UNIX 组,并添加了需要访问该组的用户。本质上,我正在使用 UNIX 文件权限进行访问控制。但是,当我们迁移到 Windows 8 和 Cisco Any Connect Client 进行 VPN 访问时,我们遇到了一个问题,我们无法打开 SSH 隧道,无论出于什么原因,我都不知道,网络和 VPN 不是我的专业领域。无论如何,我被要求研究我们的 SVN 服务器的替代设置。
据我所知,其他可用协议包括 SVN、HTTP 和 HTTPS。我们曾经使用带有 basic_auth 的 HTTP,但任何有密码的人都可以读取/写入所有存储库。我们希望锁定对存储库的访问。有没有办法使用 SVN 或 HTTP 协议来执行此操作。我们还希望尽可能地将其移交给管理者,这意味着我不想为每个存储库维护一个 vhost 和密码文件。任何建议或建议都值得赞赏。我们已经将新项目转移到 Git,但仍有几个 SVN 中的开发人员不想移动。
仅供参考,服务器是 Linux、CentOS 6.4,因此最好采用 Linux 解决方案。
好的,我尝试设置基于路径的身份验证,但遇到了一些问题,所以我希望有人可以帮忙。
这是我的 svn.conf 文件,来自 /etc/httpd/conf.d/
LoadModule dav_svn_module modules/mod_dav_svn.so
LoadModule authz_svn_module modules/mod_authz_svn.so
<VirtualHost *:80>
ServerName svn.test.net
ServerAdmin admin.test.net
ServerSignature Off
<Location /svn>
DAV svn
SVNPath /home/svn/repos
#SVNListParentPath on
AuthType Basic
AuthName "Test SVN Server"
AuthUserFile /home/svn/svn-passwd
AuthzSVNAccessFile /home/svn/svn-access
Require valid-user
</Location>
ErrorLog /var/log/httpd/svn_error.log
CustomLog /var/log/httpd/svn_access.log combined
</VirtualHost>
身份验证似乎工作正常,但是无论我输入什么路径,它似乎总是尝试从 /home/svn/repos/format 读取
[Sun Jan 19 06:19:30 2014] [error] [client 192.168.17.117] (20014)Internal error: Can't open file '/home/svn/repos/format': No such file or directory
[Sun Jan 19 06:19:30 2014] [error] [client 192.168.17.117] Could not fetch resource information. [500, #0]
[Sun Jan 19 06:19:30 2014] [error] [client 192.168.17.117] Could not open the requested SVN filesystem [500, #2]
[Sun Jan 19 06:19:30 2014] [error] [client 192.168.17.117] Could not open the requested SVN filesystem [500, #2]
如果我输入http://svn.test.net.svn.repo1
或http://svn.test.net.svn.repo2
我在错误日志中收到相同的消息。
所有存储库都存储在 /home/svn/repos 中。Apache 以 rwx 权限递归拥有整个 /home/svn 目录的所有权。我是否遗漏了什么或配置有误?
在我的 svn-access 文件中,我有类似这样的内容
[groups]
testgroup = testuser
[/]
* = r
[/repo1]
@testgroup1 = rw
答案1
最灵活的方式是使用 mod_dav_svn 和基本身份验证返回到 Apache,并使用它AuthzSVNAccessFile
来强制访问控制 - 这允许根据 repo 和 repo 内的逻辑路径为用户分配无权限、读取和读/写权限。
看这里了解更多信息。