如何允许用户r / w访问某些子文件夹但不允许访问父文件夹?

时间:2012-10-23 19:47:12

标签: svn permissions apache2

我已经设置了一个使用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>

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

  

svn:E175002:服务器发送了意外的返回值(405 Method Not   允许)响应PROPFIND请求'/'

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

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

2 个答案:

答案 0 :(得分:1)

请重新阅读本书:你忽略并遗漏了authz文件规范中的一些明显的东西

使用我的repo collection及其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
  • 我在单独的部分(作为根目录)中有 root 的repo-collection 已定义
  • 我使用速记“任何用户” - *
  • 我不使用速记“无法访问”,但它以空字符串形式存在:任何部分中的*=表示无法访问
  • 我有3个项目的三个存储库,而不是3个项目的1个共享存储库,但即使在单个repo情况下(由于SVNParentPath)我将从/ section开始

答案 1 :(得分:0)

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