Shl*_*nts 188 git cve-2022-24765
更新 Git 后,v2.35.2.windows.1
出现以下错误:
致命:不安全的存储库('F:/GitHub/my-project' 由其他人拥有)
要为此目录添加例外,请调用:
git config --global --add safe.directory F:/GitHub/my-project
我尝试将项目的父目录添加到.gitconfig
,但它不起作用。
[safe]
directory = F:/GitHub/
directory = F:/Private/
Run Code Online (Sandbox Code Playgroud)
我不想将我正在处理的每个项目都添加到该.gitconfig
文件中。
Mar*_*dor 173
从 Git v2.35.3 开始,可以禁用安全目录检查,这将结束所有“不安全存储库”错误(这也适用于最新的补丁版本 2.30-34)。
\n这可以通过运行来完成:
\ngit config --global --add safe.directory \'*\'
1
它将向您的全局.gitconfig
文件添加以下设置:
[safe]\n directory = *\n
Run Code Online (Sandbox Code Playgroud)\n在禁用之前,请确保您了解此安全措施及其存在的原因。如果您的存储库存储在共享驱动器上,则不应执行此操作。
\n但是,如果您 100% 的时间都是计算机的唯一用户,并且您的存储库存储在本地,那么从理论上讲,禁用此检查不会增加风险。
\n另请注意,您当前无法将其与文件路径组合,因为该命令不会将通配符解释*
为每个 \xe2\x80\x93 的运算符,它只需要"*"
来表示“禁用安全存储库检查/认为所有存储库都是安全的”。
1 - 如果在 Windows 中的特定终端程序中失败,请尝试用双引号而不是单引号括起通配符(通过此 GitHub 问题):
\ngit config --global --add safe.directory "*"
der*_*pda 99
这似乎与此漏洞公告有关:\n https://github.blog/2022-04-12-git-security-vulnerability-announced/
\n我认为这与您的电子邮件关系不大,而与文件系统上目录的所有者关系更大。\n您当前登录的用户也是该文件夹的所有者吗?\n父文件夹怎么样?\另外,您是否从存储库目录中调用 git?\n更新才几个小时,所以我猜事情仍在不断变化。
\n现在,正如 git 的消息所示,执行
\ngit config --global --add safe.directory F:/GitHub/my-project\n
Run Code Online (Sandbox Code Playgroud)\n并确保您现在是git
从内部拨打电话。F:/GitHub/my-project
编辑:正如我们在下面的评论中发现的那样,包含该文件.git
夹(git 存储库)的目录的父目录的所有者是问题所在。
\n重新克隆项目是一种独立于平台的方法,可确保您是所有者。
我在 Linux 上使用 flutter 遇到了同样的问题,它在我的发行版上安装在/opt/flutter
. 我不是以 root 身份工作,因此遇到了同样的问题。\n运行git config --global --add safe.directory /opt/flutter
确实为我解决了问题。
经过一夜良好的睡眠后,再次浏览有关该漏洞的帖子,我认为需要进行一些澄清。我将保留其余答案不变。
\n让我们看一下下面的简单目录结构。
/home/\n\xe2\x94\x9c\xe2\x94\x80 tommy/\n\xe2\x94\x82 \xe2\x94\x9c\xe2\x94\x80 .git/\n\xe2\x94\x82 \xe2\x94\x9c\xe2\x94\x80 rental_space/\n\xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x9c\xe2\x94\x80 mary/\n\xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x9c\xe2\x94\x80 projects/\n\xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x9c\xe2\x94\x80 phone_app/\n\xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x9c\xe2\x94\x80 .git/\n\xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x9c\xe2\x94\x80 anthony/\n
Run Code Online (Sandbox Code Playgroud)\n在本例中,用户tommy
在 下拥有自己的目录/home
,但(由于某种原因)将空间出租给其他用户,在本例中mary
为 和anthony
。
\nmary
如果错误地在她的目录中执行git
,但在她的项目之外phone_app
,那么 oldgit
将沿着目录树搜索.git
存储库。它找到的第一个是来自 的/home/tommy/.git
。这是一个安全风险,因为另一个用户(在本例中是任何可以充当 的用户tommy
)都可能影响mary
git 的执行并可能造成麻烦。
\n从 Git v2.35.2 开始,只要输入的目录属于 以外的用户,遍历就会停止mary
。假设mary
执行git
了/home/tommy/rental_space/mary/projects
,然后git会签入projects
,但发现没有.git
。它将上升一个目录,签入mary
,但再次找不到.git
。然后它会再次上涨,但rental_space
属于tommy
,不mary
。新的 git 版本将在这里停止并打印我们在问题中看到的消息。
\n将目录添加/home/tommy/rental_space
到safe.directory
变量将允许 git 继续进行,但正如所解释的那样,存在安全风险。
我这里使用了类似Linux的目录结构,但在Windows上也是如此。
\nweb*_*are 20
正如@derpda 所说,它与已修复的Git 安全漏洞有关。
至少在 Linux 上,您可以通过确保 Git 存储库的父文件夹归您所有来解决该问题。safe.directory
如果您可以适当设置文件夹所有权,则无需添加配置设置。
如果您需要不同的所有权(例如,处理以不同用户身份运行的服务),请将您的文件夹添加到多值safe.directory
配置设置中:
git config --global --add safe.directory /path/to/project
Run Code Online (Sandbox Code Playgroud)
cam*_*ohe 19
升级到版本 2.35.2.windows.1 后,我在 Windows 上发现了同样的问题。
我能够通过获取包含 .git 文件夹及其中所有文件的文件夹的所有权来修复它。
这是假设您已经位于存储库文件夹中的命令:
takeown.exe /f . /r
Run Code Online (Sandbox Code Playgroud)
注意:如果工作文件夹内有多个存储库文件夹,您可能需要递归地获取工作文件夹及其子文件夹的所有权。执行需要更多时间,但您只需执行一次。
该命令在cmd.exe下如下所示:
takeown.exe /f C:\Users\%USERNAME%\Work /r
Run Code Online (Sandbox Code Playgroud)
或者在powershell.exe或 pwsh.exe下像这样:
takeown.exe /f $HOME\Work /r
Run Code Online (Sandbox Code Playgroud)
小智 8
这是我的设置:
\n2.36.0.windows.1
\\\\MyNas\\User
X:\\
X:\\
.到目前为止的问题:
\n由于我的 NAS 和 PC 不在同一域中,因此我无法将我的 PC 用户设置为 NAS 目录的所有者。
\n在 Visual\xc2\xa0Studio 中打开存储库时,控制台中显示此错误:
\nOpening Repository:\nX:\\Repo\nGit failed with a fatal error.\nfatal: unsafe repository (\'//MyNas/User/Repo\' is owned by someone else)\nTo add an exception for this directory, call:\n\n git config --global --add safe.directory \'%(prefix)///MyNas/User/Repo\'\n
Run Code Online (Sandbox Code Playgroud)\n经过长时间的测试:
\n问题是 Visual Studio 的便携式 Git 安装,其版本为2.35.2
. 即使未选中“Git for Windows”组件,Visual Studio 仍使用其自己的 Git 安装,而不是我的全局 Git 安装。
解决方案 :
\n使用推荐的命令将存储库目录添加为安全目录:
\ngit config --global --add safe.directory \'%(prefix)///MyNAS/User/Repo\'\n\n# Or just trust any directory (not really recommended)\ngit config --global --add safe.directory *\n
Run Code Online (Sandbox Code Playgroud)\n更新 Visual Studio 使用的 Git 版本。\n(我刚刚从位于 的全局 Git 安装中获取文件C:\\Program Files\\Git\\mingw64\\bin
并将它们粘贴到C:\\Program Files\\Microsoft Visual Studio\\2022\\Preview\\Common7\\IDE\\CommonExtensions\\Microsoft\\TeamFoundation\\Team Explorer\\Git\\mingw64\\bin
)
也许复制/粘贴文件的替代方法是让 Visual Studio 使用 Git 的全局安装,如 Stack\xc2\xa0Overflow 问题中所述:\n配置 Visual Studio 以使用系统安装的 Git.exe。
\n注意:我尚未测试此替代方案,因为我已经覆盖了 Visual\xc2\xa0Studio 安装目录中的 Git 文件。
主要注意事项:
\n小智 7
我的 Windows PC 上有一个本地存储库映射到网络文件夹:
n:\文件夹
这指向
\windows 服务器\文件夹\工作文件夹
当我尝试做的时候
n:\folder> git status
Run Code Online (Sandbox Code Playgroud)
出现了这个已知错误:
致命:不安全的存储库('//windows-server/folder/working-folder'由其他人拥有)要为此目录添加例外,请调用:
Run Code Online (Sandbox Code Playgroud)git config --global --add safe.directory '%(prefix)///windows-server/folder/working-folder'
在我的情况下,更改文件权限是不可能的。所以我尝试了
git config --global --add safe.directory '%(prefix)///windows-server/folder/working-folder'
Run Code Online (Sandbox Code Playgroud)
但这没有用。我必须删除''!
解决方案:
git config --global --add safe.directory %(prefix)///windows-server/folder/working-folder
Run Code Online (Sandbox Code Playgroud)
使用此 PPA 更新 Git 提供了最新的稳定上游 Git 版本,修复了此问题。
sudo add-apt-repository ppa:git-core/ppa
sudo apt update
sudo apt install git
Run Code Online (Sandbox Code Playgroud)
参考: https: //git-scm.com/download/linux
小智 6
这发生在我身上,因为我重新安装了 Windows 系统,并且某些存储库文件夹的所有者是以前安装中的旧用户。所以 Git 不会让你直接使用这些文件夹。
\n您可以通过Properties \xe2\x86\x92 Security \xe2\x86\x92 Advanced \xe2\x86\x92 Owner进行检查。如果当前所有者是类似“S-1-blah-blah”的东西,那么你遇到了和我一样的问题。
\n如果您确定您是这些文件夹的真正所有者,则可以使用以下takeown
命令:
cd F:/GitHub/\ntakeown /f *\n
Run Code Online (Sandbox Code Playgroud)\n/r
我的情况似乎不需要该开关。
在 Android 上的Termux中,您必须添加实际的git
存储库,而不是父目录。
git config --global --add safe.directory /storage/emulated/0/src/go2null-dotfiles
Run Code Online (Sandbox Code Playgroud)
您也可以禁用该检查。
git config --global --add safe.directory '*'
Run Code Online (Sandbox Code Playgroud)
小智 6
在windows上,我用这个
git config --global --add safe.directory *
Run Code Online (Sandbox Code Playgroud)
或者
git config --global --replace-all safe.directory *
Run Code Online (Sandbox Code Playgroud)
小智 5
在这里添加这个,因为似乎没有其他人这样做,它对我有帮助。您可以通过以 root 身份运行来设置此系统范围,--system
而不是--global
,例如:
sudo git config --system --add safe.directory '*'