在我的服务器中,我通过 gitolite 托管一些 git 存储库,并为每个存储库提供一个 trac。
我有一个名为 git 的用户来从服务器推送/拉取(git clone git@server:repo
)。并且 trac 是一个带有 mod_wsgi 的 apache vhost。它与 www-data 用户一起运行。
所以让我感到困惑的是(可能是因为我对文件权限根本就不太了解)什么是 git 存储库的最佳权限设置(chown、chmod)(/home/git/repositories/
...)。
www-data(或 trac)至少需要读取权限(我认为)。并且 git(或 gitolite)显然需要读/写权限来推送变更集。
我尝试了一些方法(例如将 www-data 和/或 git 添加到 www-data/git 组),但没有成功。两者中至少有一个不起作用(git 或 trac)。
非常感谢您的任何建议。
答案1
我认为最安全的方法是建立一个名为 git-readers 的组
向其中添加 git 和 www-data,然后具有以下文件夹结构:
/home/git - git:git-readers u=rwx,g=rx,o=
/home/git/repositories - git:git u=rwx,g=rwx,o=rx
这将允许 www-data 进入文件夹进行读取,但只授予 git 用户写入权限。任何其他用户都无法执行任何操作。
如果要添加其他作者,我会添加另一个组 git-writers 并将用户和 git 以及 git-readers 组添加到其中,然后使用以下结构:
/home/git - git:git-readers u=rwx,g=rx,o=
/home/git/repositories - git:git-writers u=rwx,g=rwxs,o=rx
注意组权限中的“s”。这会使作者用户使用 git-writers 组作为其默认组。只有当作者都是 umask 0002 时,这才会正常工作。
答案2
如果是 gitolite将提交推送到 git(gitolite)存储库会弄乱文件权限(不再有 trac 访问权限)