【问题标题】:Some users in git prevent other users to push commits to the remote using git with SSHgit 中的某些用户阻止其他用户使用 git 和 SSH 将提交推送到远程
【发布时间】:2020-05-15 20:33:31
【问题描述】:

我们使用 git 进行源代码管理,并拥有一个 SLES 服务器,我们将其用作 git 存储库的远程。我们通过 SSH 访问 git,使用 真实用户名,而不是单个 git 用户替代方案,后者将通过 git 用户的 authorized_keys 文件进行身份验证。

不久前,我发现推送到我们的遥控器有问题。一位用户能够推送,而另一位用户无法推送。于是我开始分析,为什么某些用户不能推送。我终于弄清楚根本原因是什么:远程上的裸存储库总是有一个名为objects的目录,提交最终通过推送过程保存在其中。该目录包含带有哈希值前两个字符的子目录。如果尚未创建目录,则会在推送到远程时创建。

这就是它的神秘之处,我无法对自己解释:一些用户使用rwxrwsr-x 权限创建这些目录,而其他用户使用rwxr-swr-x 创建它们。可以看到,设置了set-gid位,就OK了。但我无法真正解释为什么有些用户创建具有组写入权限的目录,而其他用户则没有。

这里的陷阱是,如果用户A创建了一个没有组写权限的目录,而用户B计算了一个以用户A已经创建的目录的两个字符开头的哈希值,那么用户B就不能在其中放置文件(提交)同一目录,这使得用户 B 无法推送到远程。

我已经注意了默认的 umask 设置,它们可能不同,但找不到不同的设置。我们 SLES 服务器上的所有用户都有默认掩码 0022,这将导致使用rw-r--r-- 创建文件和使用rwxr-xr-x 创建目录。这是第二个谜团:尽管有 umask 0022,为什么有些用户在 git 中使用 rwxrwsr-x 创建目录(这对于 git 和预期是正确的)?

有没有人提示我进行进一步的故障排除?我想要实现的是用户使用rwxrwsr-x 创建objects 子目录。

【问题讨论】:

    标签: linux git permissions push sles


    【解决方案1】:

    设置

    git config core.sharedRepository 0660
    

    在服务器存储库中。见the docs

    【讨论】:

      猜你喜欢
      • 2013-04-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-10-08
      • 1970-01-01
      • 2013-03-11
      • 2013-07-06
      • 2013-09-06
      相关资源
      最近更新 更多