我们使用git进行源代码管理,并拥有一个SLES服务器,作为git存储库的远程设备。我们使用SSH访问git,使用的是真实用户名,而不是单个git用户选项,这将通过git用户的authorized_keys文件进行身份验证。
不久前,我发现了推到遥控器上的问题。一个用户能够推送,而另一个用户不能推送。所以我开始分析,为什么某些用户不能推送。我终于找到了根本原因:远程上的裸存储库总是有一个名为objects的目录,提交最终通过推送过程保存。该目录包含带有哈希值前两个字符的子目录。如果尚未创建目录,则在向远程推送时创建该目录。
关于它的神秘之处在于,我无法向自己解释:一些用户使用rwxrwsr-x权限创建这些目录,而其他用户则使用rwxr-swr-x创建它们。如您所见,设置了set-gid位,这是可以的。但是,我无法真正解释为什么有些用户创建具有组写入权限的目录,而其他用户则不这样做。
这里的缺陷是,如果用户A创建了一个没有组写权限的目录,用户B计算了一个哈希值,该哈希值以用户A已经创建的目录的两个字符开始,用户B不能将文件(提交)放在同一个目录中,这使得用户B无法推送到远程的用户B。
我已经注意到默认的umask设置,这些设置可能是不同的,但找不到不同的设置。我们的SLES服务器上的所有用户都有默认的掩码0022,这将导致用rw-r--r--创建文件,用rwxr-xr-x创建目录。这是第二个谜团:为什么一些用户使用rwxrwsr-x在git中创建目录(这对于git是正确的,并且是有意的),尽管使用umask 0022。
有谁为我提供进一步故障排除的提示?我想要实现的是用户使用objects创建rwxrwsr-x子目录。
发布于 2020-01-30 12:02:26
https://stackoverflow.com/questions/59982432
复制相似问题