我设置了一个共享的 git 存储库,用户使用ssh
协议从中提取。
我想以一种只有特定用户组(例如git_group
)中的用户可以访问存储库的方式设置权限。我可以使用以下方法使该组可以访问创建的文件:
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 文件权限,组被授予比所有者更多的权限会导致未定义的行为。
扩展 vorac 的 commnt,细粒度的权限是使用专用 git 服务器软件的主要原因之一。
依赖linux的文件系统权限除了只读权限之外什么都不起作用。正如您所发现的,当其他用户修改存储库时,他们拥有自己上传的文件,并且完全控制这些文件的权限,因此实际上可能具有相当大的破坏性。
解决这个问题的唯一方法是强制用户通过专用的 git 服务器软件进行访问。这仍然允许用户通过 ssh 协议进行访问,但他们要么通过完全定制的 SSH 服务器,要么通过高度定制的 SSH 用户(在gitolite的情况下)进行访问。
对于非常简单的轻量级设置 gitolite 就足够了。随着时间的推移,您可能会发现自己想要迁移到更复杂的 ERM 工具,例如gitlab。