致命错误“不安全的存储库('/home/repon' 由其他人拥有)”

Xia*_*gyu 208 git cve-2022-24765

我发现 Apache 2 的错误日志是致命的:

unsafe repository ('/home/repon' is owned by someone else)
Run Code Online (Sandbox Code Playgroud)

发生这种情况是因为我有git rev-parse --symbolic-full-name --abbrev-ref HEAD'PHP 代码,而且看起来新的 Git 安全更改不再允许www-data运行此 Git 命令。

运行以下命令不起作用:

git config --global --add safe.directory /homerepon
Run Code Online (Sandbox Code Playgroud)

有解决方法来解决这个问题吗?

Git 版本:2.35.3
PHP 版本:7.4
Apache2 版本:2.4.41

8ct*_*pus 159

随着 Git 2.35.2 安全更新的发布,这种情况开始出现,该更新修复了此处描述的漏洞。致谢@Juan-Kabbali

以下是四种可能的解决方案:

  • 信任 Git 目录(如果您知道目录内容是安全的,请执行此操作)
git config --global --add safe.directory /home/repon
Run Code Online (Sandbox Code Playgroud)

这会将safe组添加到文件~/.gitconfig中,如本示例所示:

[safe]
    directory = /home/repon
Run Code Online (Sandbox Code Playgroud)
  • 以正确的用户身份运行命令,例如:
sudo -u ubuntu -- git status
Run Code Online (Sandbox Code Playgroud)

注意:这需要用户www-data具有以用户身份执行 Git 命令的权限ubuntu(假设ubuntu是存储库所有者)。为此,您需要在其中添加一个/etc/sudoers.d/包含以下内容的新文件:

www-data ALL=(ubuntu) NOPASSWD: /usr/bin/git
Run Code Online (Sandbox Code Playgroud)

这可能会产生安全隐患,因此请先咨询您的安全人员。

  • 将 Git 存储库所有者更改为www-data
sudo chown -R www-data:www-data /home/repon
Run Code Online (Sandbox Code Playgroud)
  • 降级 Git 作为临时解决方案。例如,在 Ubuntu 中:
apt install git-man=1:2.17.0-1ubuntu1 git=1:2.17.0-1ubuntu1
Run Code Online (Sandbox Code Playgroud)

注意:至少在 Windows 上,可弹出驱动器上的所有 Git 存储库似乎都被认为是不安全的,并且更改所有权似乎不起作用。

  • 这是一个非常糟糕的错误消息。我希望它能告诉我,这是谁拥有的,以及谁认为它应该拥有。现在看来这完全是一个错误,因为据我所知,该消息是错误的,它不属于其他人所有。(视窗) (13认同)
  • 在 Windows 上,添加文件夹的完整路径,例如 D:/Folder/SubFolder。这个对我有用。 (2认同)

小智 151

这是因为 Git 安全更新。

要使 Git 信任任何目录,您可以在PowerShell中运行以下命令:

git config --global --add safe.directory *
Run Code Online (Sandbox Code Playgroud)

Bash中,您应该转义*以避免扩展:

git config --global --add safe.directory '*'
Run Code Online (Sandbox Code Playgroud)

仅在 Git 2.36 中添加了支持*,如:Git 2.36 的亮点评论中的 genonymous所提到的。

如果您只信任一个目录,则可以运行此命令

git config --global --add safe.directory your-directory
Run Code Online (Sandbox Code Playgroud)

  • 这是因为 [CVE-2022-24765](https://github.blog/2022-04-12-git-security-vulnerability-announced/) 安全漏洞 (5认同)
  • 这是有道理的,因为这是 git 本身所说的要做的事情,但是运行命令会给出错误:“错误:参数数量错误,应该是 2” (2认同)
  • *“Git 安全更新”* 是什么意思? (2认同)

Hub*_*mas 117

对于 Windows,我必须执行以下操作:

\n
    \n
  1. 右键单击发生错误的 Git 存储库文件夹,然后选择“属性”

    \n
  2. \n
  3. 选择安全选项卡,然后选择“高级”(左图:按“Erweitert”)

    \n
  4. \n
  5. 检查新打开的窗口顶部区域的所有者属性(右图:“Besitzer”)并进行调整(右图:按“\xc3\x84ndern”)。这必须是您的工作 Windows 帐户

    \n
  6. \n
  7. OK并等待,直到权限设置完毕,然后 Git 错误消息应该成为历史记录

    \n

    在此输入图像描述

    \n
  8. \n
\n

如果您之后移动或重命名该目录,此解决方案也适用。在我看来,你应该更喜欢这个解决方案

\n
git config --global --add safe.directory <repo-path>\n
Run Code Online (Sandbox Code Playgroud)\n

每次对目录名称进行更改时都必须执行此操作。您还可以手动调整.gitconfig文件

\n
C:\\Users\\<username>\\.gitconfig\n
Run Code Online (Sandbox Code Playgroud)\n

添加到安全列表后。

\n

  • 这应该是 Windows 上事实上的解决方案。 (18认同)
  • 这个解决方案对我有用,因为存储库文件夹由不同的用户拥有。 (7认同)
  • 虽然这可行,但并不理想。对我来说,这些存储库由管理员拥有,而不是特定帐户(但它是管理员)。此外,我是这台电脑上唯一的真实用户。我有近一百个存储库,手动更改每个存储库将非常繁琐。 (4认同)
  • 就我而言,重新格式化并重新安装 Windows 后于 2021 年恢复的文件夹不再属于我的用户帐户。显然,检查所有权是 GIT 2.35.2.windows.1 版本中声明的一项新功能。自恢复以来创建的项目继续正常工作。回收项目文件夹顶层的所有权并包括“子容器和对象”就解决了这个问题。处理需要一两分钟,但这只是一次。 (4认同)
  • 为了扩展这一点,我似乎在管理终端中运行了“git init”,它将“.git”文件夹中所有内容的所有者设置为管理员用户。在您显示的第二个窗口中,我单击左下角的“更改”按钮、“高级”以打开用户搜索,右侧的“立即查找”以填充列表,然后选择与某个用户匹配的帐户。使用非管理终端创建的新鲜 .git 文件夹。我勾选了似乎将其应用于所有子容器和对象的新选项,并且 git 停止了抱怨。 (2认同)

tlb*_*erd 11

除了Huber Thomas 对 Windows 的 回答之外,我还必须使用PowerShellCMD,因为我在源代码控制管理文件夹中有一堆文件,我已从一个位置移动到另一个位置。TAKEOWN命令很好地处理了这个问题(虽然有点慢)。

  1. 以您自己的身份打开CMD(您不需要是管理员)
  2. 导航到存储库文件夹(如果有多个,则导航到父级文件夹)
  3. 跑步takeown /f . /r /d Y

这将递归地处理当前文件夹中的所有文件夹,并将所有权设置为登录用户(大概是您)。


Ayu*_*ush 8

以前的答案中的解决方案都不适合我,但更改存储库的所有权却对我有用。我正在运行Ubuntu 20.04.4 (Focal Fossa) LTS,并且运行了以下命令:

sudo chown -R username:group directory
Run Code Online (Sandbox Code Playgroud)


小智 7

作为自动化的一部分,我们的场景涉及多次调用一个脚本,并且我们事先不知道工作区。

因此,在我们的例子中,git config --global --add safe.directory *在 中创建了多个条目~/.gitconfig

git config --global --replace-all safe.directory '*'帮助我们确保没有重复的条目。


Jer*_*ale 7

sudo git config --system --add safe.directory /homerepon
Run Code Online (Sandbox Code Playgroud)

--system将存储库标记为对所有用户都是安全的,包括www-data.


小智 5

您只需打开 Git bash 并输入以下命令即可

git config --global --add safe.directory '*'
Run Code Online (Sandbox Code Playgroud)