我已经使用 Apache 在 Ubuntu 9.10 Server 上设置了一个专用的 Subversion 服务器mod_dav_svn
,目前一切运行正常。但是,我注意到,在为存储库目录分配正确的文件权限时,大多数教程都会告诉您执行以下操作:
sudo chown -R www-data:www-data /svn/myrepo # make www-data the owner of the repo so Apache
# can write to it
sudo chmod -R g+ws /svn/myrepo # Give the www-data group write access as well, and enable
# setgid so that new directories have that group
现在,我做了一些不同的事情。我创建了一个新subversion
组,并将其设为存储库的所有者,然后将我自己和其他人添加www-data
到该组中,这样做的理由是,这样我就可以编辑 中的配置文件/svn/myrepo/conf
和 中的钩子脚本/svn/myrepo/hooks
,同时还可以使 Apache 和 Subversion 彼此更加独立。我见过其他教程推荐类似的东西,但后来告诉你这样做:
sudo chwown -R www-data:subversion /svn/myrepo
sudo chmod -R g+ws /svn/myrepo
这些相同的教程暗示您创建该subversion
组是专门为了让 Subversion 和 Apache 彼此分离,那么为什么他们要转而成为www-data
文件的所有者呢? 有什么充分的理由使其成为www-data
存储库文件的所有者吗? 为什么不直接成为root
所有者? 似乎保留存储库的所有者不必要地将 Subversion 与 Apache “过多”地联系在一起。只要该组仍然是,www-data
有什么充分的理由将所有者www-data
改为?root
subversion
答案1
您通常不希望 root 成为存储库的所有者,因为这意味着 apache(httpd)必须以 root 身份运行才能访问 svn 存储库,这通常被认为是一种安全风险。
根据我的经验,您主要通过 apache 与 subversion 进行交互。既然如此,让 apache (www-data) 成为 subversion 存储库的所有者似乎更简单、更自然。如果您在与网站不同的目录结构中创建了 subversion 存储库,那么就不会混淆哪些文件用于什么用途。例如,我的网站是 /data/www,我的 svn 存储库是 /data/svn。
然后,为了允许自己修改存储库配置文件和挂钩脚本,只需让自己成为 www-data 组的成员并执行以下操作:
sudo chmod -R g+ws /svn/myrepo
正如您上面提到的那样,您可以开始了。
我认为将 svn 存储库所有者与 apache 用户分开没有任何好处,但如果您真的坚持这样做,您可以除了 subversion 组之外还创建一个 subversion 用户,并将 /svn/myrepo 的所有者设为 subversion:subversion。然后只需让您自己和 apache 成为 subversion 组的成员,并按上述方式修改目录权限。
答案2
如果我没记错的话,Apache 只需要对“dav”、“db”和“locks”目录具有写权限。无论是通过用户还是组所有权,都没有关系。在大多数情况下,Apache 没有理由对“conf”和“hooks”具有写权限。