【问题标题】:Weird Subversion permissions issue奇怪的颠覆权限问题
【发布时间】:2010-12-22 06:07:56
【问题描述】:

我正在尝试在 CentOS 5 系统上设置 SVN,以便几个人可以使用存储库。

  • 我已在 /var/svnrepository 创建了存储库。
  • 我添加了一个subversion 用户和组,递归地使其成为存储库的所有者。
  • 我以递归方式将权限设置为 775。
  • 我确保所有系统用户都在subversion 组中。

我遇到的问题是,当我进行提交时,SVN 显然会创建一个名为 db/current 的文件,其中包含我的用户名和组。所以说我的用户名是jimbo...

-rwxrwxr-x 1 jimbo      jimbo         11 Dec  2 01:09 current

然后在那之后,没有其他人可以检查任何内容。他们收到权限被拒绝错误。

名为db/format 的文件也存在类似问题。

Can not open file /var/svnrepository/contactdb/trunk/format: Permission denied

还有其他人看过吗?知道解决方案吗?

所有存储库访问都是通过 ssh。

奇怪的是,我之前在 Linux 上设置过 SVN,从来没有遇到过这个问题。我不知道这次我做了什么不同的事情。

【问题讨论】:

    标签: linux svn


    【解决方案1】:

    注意,setGID 通常设置在 Subversions 存储库目录及其子目录中:

    drwxr-sr-x svnowner svnusers 4096 2008-11-01 .
    

    通过 chmod 775 你取消了这个 setGID 位,这就是问题发生的原因:

    setGID 意味着:如果您创建一个文件,该组将被设置为 svnusers(在我的示例中),而不是您的主要组。

    我敢打赌你没有设置 SetGID 位,是吗?

    但是,最好更改文件夹的 GID:

    chmod g+s <REPO>/dir
    

    最好查看一个新创建的存储库以匹配权限。

    【讨论】:

    • 我敢打赌,将用户的主要组更改为 svnusers 会起作用,但这样做似乎是一种黑客行为。这意味着颠覆劫持了 unix 权限,从根本上改变了您保护系统的方式。
    • 这是一个黑客。通常 setGID 位在存储库目录中设置。如果设置了,则始终设置正确的组
    • 这似乎有效。我跑了chmod -R g+s。现在整个存储库是rwxrws--- subversion subversion。用户在subversion 组中。我们会看看这是否有效。如果不是,我会研究 Apache 或 svnserv,但我希望避免运行另一个守护进程。
    【解决方案2】:

    您是在使用 svnserve 还是每个人都在使用 file:/// URI? Subversion 推荐against the secondsvnserve -d 应作为单个用户运行。

    这里有一些 documentation 尝试使多种访问方法起作用。

    【讨论】:

    • 大家都是通过ssh访问的,像这样:svn co svn+ssh://host.com/var/repository
    • 您是否遵循文档中关于为 svnserve 创建将 umask 设置为 002 的包装脚本的建议? svnbook.red-bean.com/en/1.1/ch06s05.html
    • 对我来说并不是 100% 清楚,但据我了解,我实际上并没有使用 svnserv。只需通过 ssh 访问存储库。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-01-28
    相关资源
    最近更新 更多