如何全局禁用git钩子

Jer*_*auw 6 git security githooks

出于安全原因,我希望默认情况下禁用 git hooks。

更具体地说,当我在我的 (Kubuntu) 操作系统帐户上的任何 git 存储库中运行 git 命令时,不应执行任何 git 钩子,除非以某种方式指定。

在 Vagrant 或 Docker 中运行我的所有代码时,我想避免的攻击是虚拟机中的恶意代码写入 git hooks 目录,从而将自身带到主机上的攻击。默认情况下禁用 git hooks 是一种防线。

我正在寻找一种不需要每个存储库工作和状态的解决方案。在我的搜索中,我遇到了这个脚本,它打破了这两个要求。

理想情况下,有一个简单的解决方案,例如将其放入.bash_aliases

alias git='/usr/bin/git --no-hooks'
Run Code Online (Sandbox Code Playgroud)

小智 8

设置core.hooksPath$HOME/.gitconfig似乎为我工作

[core]
    hooksPath = $SOME_DIR_WITHOUT_HOOKS
Run Code Online (Sandbox Code Playgroud)

要为特定的 repo 启用钩子,你可以在 $REPO/.git/config

[core]
    hooksPath = $GIT_DIR/hooks
Run Code Online (Sandbox Code Playgroud)


小智 4

钩子并不是具有目录写入权限的攻击者.git攻击目录用户的唯一方式.git,例如可以将选项diff.external设置为执行任何内容,以及谁跟踪所有新的 Git 功能?

如果您的开发环境在其中查找配置文件,或者如果它有一些在本地执行的脚本,那么即使让攻击者对存储库具有写访问权限也可能是不好的。

保护.git仍然是一个好主意,我提出以下解决方案:

  • 在虚拟机中设为.git只读。
  • 将该.git目录放置在与虚拟机共享的工作目录之外。该--git-dir标志或GIT_DIR环境变量控制 Git 查找.git目录的位置。缺点是,.git如果需要的话,该目录不会与虚拟机共享,并且在使用每个不同的存储库之前需要设置命令行标志或环境变量。