我设置了一个共享 git 存储库,用户可以通过协议从中提取内容ssh
。
git_group
我想以只有特定用户组(例如)中的用户才能访问存储库的方式设置权限。我可以使用以下方法使创建的文件可供该组访问:
- 设置gid:
chmod g+s
.递归地:find . -type d print0 | xargs -0 chmod g+s
. - 在访问控制列表中设置默认值。
sudo setfacl -R -m g:git_group:rwx .
和sudo setfacl -R -d -m g:git_group:rwx .
这一切看起来都很好,直到您从 中删除用户git_group
。当该用户推送提交时,他们就成为 git 存储库中某些文件的所有者。从组中删除后,该用户仍然可以修改这些文件,并且某些 git 命令可能仍然会成功。
更改 git 存储库中所有文件的所有者会拒绝用户访问存储库,但是是否可以设置存储库,以便仅通过将用户从组中删除来拒绝用户访问?
据我所知,在基本的 Linux 文件权限下,组被授予比所有者更多的权限会导致未定义的行为。
答案1
扩展 vorac 的 commnt,细粒度的权限是使用专用 git 服务器软件的主要原因之一。
依赖linux的文件系统权限除了只读权限之外什么都不起作用。正如您所发现的,当其他用户修改存储库时,他们拥有自己上传的文件,并且完全控制这些文件的权限,因此实际上可能具有相当大的破坏性。
解决这个问题的唯一方法是强制用户通过专用的 git 服务器软件进行访问。这仍然可以允许用户通过 ssh 协议进行访问,但他们可以通过完全定制的 SSH 服务器进行访问,或者在以下情况下进行访问:硅藻土,一个非常定制的SSH用户。
对于非常简单的轻量级设置 gitolite 就足够了。随着时间的推移,您可能会发现自己想要迁移到更复杂的 ERM 工具,例如GitLab。