4

我的服务器同时安装了 Subversion 和 Apache,Apache Web 目录也是一个 Subversion 工作副本。这样做的原因是简单的命令svn update /server/staging会将最新的源代码部署到登台服务器。

Apache 公共网络目录:/server/staging ——(这是一个 SVN 工作副本。)

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

然后,我为“richard”和“developers”组设置了读取、写入和执行的权限。

那么可以肯定的是,'austin' 现在应该可以使用该svn update /server/staging命令了?然而,当他尝试时,他得到了错误:

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

如果我递归地将 /server 的所有者更改为 austin:developers,他可以很好地运行命令,但是“richard”不能。

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

/usr/bin/svn update /server/staging

对他们两个使用相同的用户帐户实际上并不是一个可接受的解决方案,而且我不知道有任何方法可以在挂钩内以“root”身份运行命令。

任何帮助表示赞赏!

4

4 回答 4

9

目录集组 ID

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

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

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

chmod g+s spcprjdir

目录“spcprjdir”的目录列表:

drwxrwsr-x 2 kathy spcprj 1674 Sep 17 1999 spcprjdir

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

编辑:source = Linux 文件和文件权限

于 2008-10-02T21:21:31.643 回答
0

svnserve我将使用该svn://协议设置一个简单的 Subversion 服务器。您可以进行设置,使其在自己的用户帐户下运行,然后存储库将只能由该用户访问。然后,此用户可以具有正确的权限以svn update /server/staging在 post-commit 挂钩上运行。

于 2008-10-02T21:14:46.730 回答
0

在您的 svn 存储库中,您可以找到一个设置权限的“conf”目录。你有3个文件:

  • 授权
  • 密码
  • 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

你会得到注释文件,并解释如何设置它。

于 2008-10-02T21:17:06.957 回答
0

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

于 2008-10-02T23:09:42.040 回答