如何在Linux中设置权限,以便两个用户可以更新服务器上的同一SVN工作副本?
我的服务器同时安装了Subversion和Apache,Apache Web目录也是Subversion的工作副本。这样做的原因是简单的命令svn update / server / staging
会将最新的源代码部署到登台服务器。
Apache公共Web目录:/ server / staging
?(这是SVN工作副本。)
我的服务器上有两个用户,"理查德"和"奥斯丁"。他们都是"开发人员"组的成员。我使用" sudo chown -R richard:developers / server"将/ server目录上的权限递归设置为richard:developers。
然后,我为'richard'和'developers'组设置读取,写入和执行权限。
那么可以肯定的是,"奥斯汀"现在应该能够使用" 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"身份运行命令。
任何帮助表示赞赏!
解决方案
我将设置svnserve,它是使用svn://协议的简单Subversion服务器。我们可以对其进行设置,使其在其自己的用户帐户下运行,然后该存储库将仅由该一个用户访问。然后,该用户将具有正确的特权,可在提交后的钩子上运行svn update / server / staging
。
在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
我们将获得评论文件,并附有如何设置的说明。
目录集组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文件和文件权限
我使用WebDAV,所有SVN更新和提交都是通过apache处理的,我从来没有遇到这样的问题。