如何在Linux中设置权限,以便两个用户可以在服务器上更新相同的SVN工作副本?

时间:2008-10-02 21:03:20

标签: linux svn permissions

我的服务器安装了Subversion和Apache,Apache web目录也是Subversion工作副本。原因是简单命令svn update /server/staging将最新的源部署到登台服务器。

Apache公共网站目录:/server/staging - (这是SVN工作副本。)

我的服务器上有两个用户,'richard'和'austin'。他们都是'开发者'小组的成员。我递归地将/ server目录的权限设置为richard:开发人员,使用“sudo chown -R richard:developers / server”。

然后我为'richard'和'developers'组设置了读,写和执行权限。

当然,'austin'现在应该能够使用svn update /server/staging命令吗?然而,当他尝试时,他得到错误:

svn: Can't open file '/server/staging/.svn/lock': Permission denied

如果我递归地将/ server的所有者更改为austin:开发人员,他可以正常运行命令,但是'richard'不能。

如何解决问题?我想创建一个提交后挂钩,以便在提交文件时自动部署登台站点,但我看不到这种方法可以为两个用户工作。钩子将是:

/usr/bin/svn update /server/staging

对它们使用相同的用户帐户实际上并不是一个可接受的解决方案,我不知道有什么方法可以在钩子内运行命令作为“root”。

感谢任何帮助!

4 个答案:

答案 0 :(得分:8)

目录集组ID

如果设置了目录条目上的setgid位,则该目录中的文件将具有组所有权作为目录,而不是创建该文件的用户组。

当多个用户需要访问某些文件时,此属性很有用。如果用户在设置了setgid属性的目录中工作,则任何用户在目录中创建的任何文件都将具有该组的权限。例如,管理员可以创建一个名为spcprj的组,并将用户Kathy和Mark添加到组spcprj中。可以使用设置的GID位和Kathy和Mark创建目录spcprjdir,尽管在不同的主组中可以在目录中工作并且可以完全访问该目录中的所有文件,但仍然无法访问彼此主要组中的文件

以下命令将在目录上设置GID位:

chmod g+s spcprjdir

目录“spcprjdir”:

的目录列表
drwxrwsr-x 2 kathy spcprj 1674 Sep 17 1999 spcprjdir

“s”代替组权限中的执行位会导致写入目录“spcprjdir”的所有文件属于“spcprj”组。

编辑:来源= Linux Files and File Permissions

答案 1 :(得分:0)

我会使用svnserve协议设置svn://这是一个简单的Subversion服务器。您可以对其进行设置,使其在自己的用户帐户下运行,然后只有该用户才能访问该存储库。然后,该用户可以拥有在提交后挂钩上运行svn update /server/staging的正确权限。

答案 2 :(得分:0)

在你的svn repo中,你可以找到一个设置权限的'conf'目录。那里有3个文件:

  • AuthZ的
  • passwd的
  • svnserve.conf的

您在authz文件中设置哪些用户具有哪种访问权限,每个用户或每个组。你在那里设置组,SVN组不是linux用户组(散列线是注释):

[groups]
# harry_and_sally = harry,sally
projectgroup = richard,austin

# [/foo/bar]
# harry = rw  -- user harry has read/write access
# * =  -- everybody have no access

# [repository:/baz/fuz]
# @harry_and_sally = rw  -- harry_and_sally group members have read/write access
# * = r  -- everyone has read access

[/server/staging]
@projectgroup = rw
* = r

解决此示例并设置配置。在'passwd'文件中设置用户密码。执行

cat passwd

你会得到一个评论文件,说明如何设置它。

答案 3 :(得分:0)

我使用WebDAV - 所有SVN更新和提交都是通过apache处理的,我从来没有遇到过这样的问题。