3

我已经设置了一个使用 Apache DAV 和 LDAP 服务的 SVN 存储库。当我使用对整个存储库具有读/写权限的用户访问存储库时,一切正常。

该存储库有许多项目,如下所示:

repo_src
 \a
 \b
 \c
 \d
 .. etc..

我需要授予某个用户“A”对某个子目录“a”的访问权限,但不能授予其父目录或其兄弟目录(b、c、d 等)的访问权限。

我阅读了有关基于路径的授权的书“带有 Subversion 的版本控制”(http://svnbook.red-bean.com/en/1.6/svn-book.html#svn.serverconfig.pathbasedauthz)。我完全按照那里的规定做了:我用这样的东西编辑了文件 svn.authz:

[src_repo:/a]
A = rw

[src_repo:/]
root = rw

在 Apache 中,svn 配置文件如下所示:

<Location /svn>
DAV svn

SVNParentPath /data/repos/
AuthName "Zentyal LDAP user required"
AuthType Basic
AuthBasicProvider ldap file
AuthBasicAuthoritative On
AuthzLDAPAuthoritative off

AuthLDAPURL ....
AuthLDAPBindDN ....
AuthLDAPBindPassword ...
AuthUserFile /dev/null
uthzSVNAccessFile /etc/apache2/svn.authz

require valid-user

</Location>

当我以用户 A 通过 WEB 界面 ( ) 访问子目录 src_repo/a 时http://host/svn/ src_repo/a,我可以读取该目录及其文件的内容。但是,当我尝试 http://host/svn/src_repo/a使用 TortoiseSVN 浏览目录或使用“svn checkout http://host/svn/src_repo/a”检出内容时,我收到以下消息:

svn:E175002:服务器发送意外返回值(405 方法不允许)响应 PROPFIND 请求“/”

显然 TortoiseSVN 和 svn 客户端正在尝试访问“/”(这不是故意的)。

如何设置 svn 服务器只允许子目录访问?为什么 WEB 访问不同于命令行或 TotoiseSVN 访问?

4

2 回答 2

3

请重新阅读书籍:您忽略并错过了 authz 文件规范中的一些明显内容

使用我的repo 集合和它的 authz 文件作为示例的简短回答

[/]
*=r

[Elgg-Russian:/]
@Coders=rw

[Elgg-TranslationRU:/]
@Translators=rw

[Hello:/]
lazybadger=rw

[Hello:/trunk]
lukoie=rw

[groups]
Coders=irrelevant,to,question
Translators=irrelevant,to,question
  • 我在单独的部分中定义了 repo-collection的根(作为根)
  • 我使用简写“任何用户” - *
  • 我不使用速记“no access”,但它以空字符串的形式存在:*=在任何部分都意味着 NO ACCESS
  • 我有 3 个项目的三个存储库,而不是 3 个项目的 1 个共享存储库,但即使在单个存储库的情况下(由于 SVNParentPath)将从 / 部分开始
于 2012-10-24T02:26:05.780 回答
0

这似乎是 svn 客户端缓存的临时问题。今天,相同的配置有效。我真的很想知道以前出了什么问题,但没有办法确定。

于 2012-10-24T15:47:10.297 回答