【问题标题】:Access control for multiple projects using SVN使用 SVN 对多个项目进行访问控制
【发布时间】:2010-12-04 13:09:28
【问题描述】:

我是 SVN 新手,正在尝试为 SVN 上的多个项目配置访问控制。我想使用一个密码文件和一个身份验证文件对所有项目进行访问控制。但是,它不起作用。下面是我的配置。 我的目录结构:

/srv
|--svn
   |--repos
      |-- conf
          |-- passwd
          |-- authz
      |-- projectX
      |-- projectY
      |-- projectZ

projectX 的 projectX/conf/svnserve.conf 条目:

[general]
anon-access = none
auth-access = write
password-db = /srv/svn/repos/conf/passwd
authz-db = /srv/svn/repos/conf/authz
realm = Project Repository

projectY 和 projectZ 使用相同的配置。 /srv/svn/repos/conf/passwd 的条目:

[users]
user1 = password
user2 = password
user3 = password

/srv/svn/repos/conf/authz 的条目:

[/]
* = 
user1 = rw
[projectX:/]
user2 = rw
user3 = r
[projectY:/]
user3 = rw
user2 = r
[projectZ:/]
user2 = r
user3 = r

因此,user2 应该对 projectX 具有读写访问权限,而 user3 应该对 projectX 具有只读访问权限。但是,只有 user1 可以访问所有这些存储库。 user2 和 user3 永远不能访问任何存储库。每次它给出错误信息:提交失败(授权失败!) 谁能帮我找出我的错误? 我在服务器上使用 1.6.5 版本的 Subversion,在客户端使用 1.6.4。

【问题讨论】:

  • 这与我使用的是 svnserve 而不是 Apache 有什么关系吗? svnserve 是否允许对多个存储库使用单个 authz 文件?我已经为每个存储库尝试了单个 passwd 文件和单独的 authz 文件,并且它有效!我在 SVN 红皮书中找不到任何说 svnserve 不允许单个 authz 文件的内容。

标签: svn


【解决方案1】:

我已经在 Subversion 1.4 中成功使用了这个结构:

Subversion
|-- Config
    |-- a-users
    |-- b-users
|--Repositories
    |-- x-repos
        |-- conf
            |-- svnserve.conf
    |-- y-repos
        |-- conf
            |-- svnserve.conf

... svnserve.conf 文件包含这样的一行:

password-db = ../../../Config/a-users

这样我可以为任意数量的存储库使用一个密码数据库文件,或者我可以为每个存储库使用一个单独的密码数据库文件。

如果您使用的是 Subversion > 1.4,则需要查看配置在较新版本中的变化。一点是,至少在 1.4 中,相对路径确实有效。希望这会有所帮助。

更新:我使用的是 unix (Mac OS X)。

【讨论】:

  • @Ivey:回答你的问题......是的,我已经能够使用单个 authz 文件。在我的示例中,a-users 和 b-users 文件是 authz 文件。我将它们向上移动到一个共享目录,以便它们可以被多个存储库引用和使用。例如(并使用我上面的示例),如果 x-repos 和 y-repos svnserve.conf 文件都引用 a-users,那么它们都将使用相同的 authz 文件。
【解决方案2】:

我想,这条线

* = 

正在给您带来麻烦。 另外,我建议使用 [groups] 部分并将您的用户添加到组中,即使您目前每个组只有一个用户。

【讨论】:

  • 好吧,我不希望未经身份验证的用户访问我的存储库。另外,我认为 authz 文件中的匿名访问设置和 svnserve.conf 中的设置应该相同。而且,一旦我解决了当前的问题,我将使用 [groups] 部分。
【解决方案3】:

确保存储库 (projectX...) 的 CaSe 在 authz 和客户端 URL 中都是正确的。 Subversion 在使用 authz 时有一个nasty issue,其中签出区分大小写in,但提交区分大小写。

这是一个例子:

svn co svn://server/projectx/trunk .  // success
... // do work
svn ci // fail 


svn co svn://server/projectX/trunk .  // success
... // do work
svn ci // success 

我还有一个问题,authz 和 passwd 中的最后一行不是空行,即将 CRLF 添加到最后一行修复了它。那是很久以前的事了,所以现在可能已经解决了。

【讨论】:

  • 感谢您的意见。但是,authz 文件中没有 CaSe 问题。 authz文件中的配置和我写的一样。
  • 案例对客户也很重要。
【解决方案4】:

我认为这是因为 user2 和 user3 无权访问 [/]。

这只是我的猜测;我真的不知道如何配置SVN。

【讨论】:

  • 就像在文件系统上一样,用户必须有权访问整个路径,而不仅仅是叶节点。
  • 不,这应该不是问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-02-16
  • 1970-01-01
  • 1970-01-01
  • 2010-12-09
  • 1970-01-01
相关资源
最近更新 更多