【发布时间】:2013-05-30 18:11:33
【问题描述】:
我很难解决我在使用 web dav 和身份验证的一些 apache 配置时遇到的问题。
我有几个存储库,我想使用一个单一权限 (ACL) 文件。这甚至可能吗?我目前的设置被禁止。这里是:
我的回购:
/var/svn/repos/project_1
/var/svn/repos/project_2
/var/svn/repos/project_3
我的 apache 配置:
< VirtualHost *:80>
ServerName svn.mydomain.tld
Redirect / https://svn.mydomain.tld/
< /VirtualHost >
`LoadModule dav_module modules/mod_dav.so
LoadModule dav_fs_module modules/mod_dav_fs.so
LoadModule dav_svn_module modules/mod_dav_svn.so
LoadModule authz_svn_module modules/mod_authz_svn.so
< VirtualHost *:443 >
ServerName svn.mydomain.tld
DocumentRoot "/var/www/svn"
<Directory />
Options Includes FollowSymLinks MultiViews
</Directory>
SSLEngine on
SSLCertificateFile /path/to/the/cert
SSLCertificateKeyFile /path/to/the/key
SSLCACertificateFile /path/to/the/cacert
<Location /project_1>
DAV svn
SVNPath /var/svn/repos/project_1
SVNIndexXSLT "/repos-web/view/repos.xsl"
SVNPathAuthz on
AuthzSVNAccessFile /srv/svn/conf/svnaccess
AuthType Basic
AuthName "My SVN Repository"
AuthUserFile /srv/svn/conf/svnusers
Require valid-user
</Location>
<Location /project_2>
DAV svn
SVNPath /var/svn/repos/project_2
SVNIndexXSLT "/repos-web/view/repos.xsl"
SVNPathAuthz on
AuthzSVNAccessFile /srv/svn/conf/svnaccess
AuthType Basic
AuthName "My SVN Repository"
AuthUserFile /srv/svn/conf/svnusers
Require valid-user
</Location>
<Location /project_3>
DAV svn
SVNPath /var/svn/repos/project_3
SVNIndexXSLT "/repos-web/view/repos.xsl"
SVNPathAuthz on
AuthzSVNAccessFile /srv/svn/conf/svnaccess
AuthType Basic
AuthName "My SVN Repository"
AuthUserFile /srv/svn/conf/svnusers
Require valid-user
</Location>
</VirtualHost>
我的 ACL 文件“/srv/svn/conf/svnaccess”如下所示:
[groups]
gods = admin
[/]
@gods = rw
* = r
[project_1/]
joe = rw
* =
[project_2/]
ana = rw
* =
【问题讨论】:
-
这绝对是可能的。你能通过只做基本的apache auth来排除AuthzSVNAccessFile吗?还要检查您的 apache 日志并验证您的 AuthUserFile 是否正确定义了用户。
-
AuthUserFile 很好,我敢肯定。但是,我做了一个小测试并从配置中删除了“AuthzSVNAccessFile”,重新加载了 apache,我注意到它可以工作,没有 ACL 文件。很奇怪。我也尝试只使用 [/] * = r 但这不起作用,我仍然会得到“禁止”。 :(
-
我终于通过使用“SVNParentPath”而不是“SVNPath”解决了这个问题,还在“Location”项目名称/中添加了一个斜杠,最后我不得不使用“[project_x:/]”格式进入我的 ACL 文件以使其正常工作。