【问题标题】:How to globally disable git hooks如何全局禁用 git 钩子
【发布时间】:2018-06-16 12:55:29
【问题描述】:

出于安全原因,我希望默认禁用 git 挂钩。

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

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

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

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

alias git='/usr/bin/git --no-hooks'

【问题讨论】:

  • 将使用钩子的责任留给您的用户。他们正在安装这样的挂钩。重要的 git hook 目录是 git client (不是主机)机器上的目录。换句话说,根据定义,git 钩子总是“指定”并显式安装。
  • 否则git 是免费软件,因此您可以对其进行修补和分叉以添加这样的--no-hooks 选项,但您不需要它。我不明白你为什么认为存在一些额外的安全风险,因为 git hooks 在客户端机器上运行
  • 留给“我的用户”?我认为你误解了一些东西,因为你的评论对我来说毫无意义。我说的是我机器上的 git。
  • 然后改进你的问题来解释更多。给一些minimal reproducible examplereal git 命令显示漏洞;我不明白您认为有什么安全风险。展示一个实际案例(您甚至可以在github 上制作一些免费软件示例)。通常,git 用于客户端-服务器设置(例如git pull)。否则,利用 gitfree software 的优势,研究它的源代码并根据您的需要改进它
  • git的源码在github.com/git/git;你可以分叉它并根据你的需要改进它。恕我直言,您不需要任何改进(但我倾向于认为您对git 的了解不够;我也不知道)。正如我所说,钩子在 git 客户端运行。它们不会带来任何额外的安全风险。当然,在客户端,用户也会运行任意命令(因为他正在构建软件)。

标签: git security githooks


【解决方案1】:

$HOME/.gitconfig 中设置core.hooksPath 似乎对我有用

[core]
    hooksPath = $SOME_DIR_WITHOUT_HOOKS

要启用特定 repo 的挂钩,您可以在 $REPO/.git/config 中重置它

[core]
    hooksPath = $GIT_DIR/hooks

【讨论】:

    【解决方案2】:

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

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

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

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

    【讨论】:

      猜你喜欢
      • 2023-01-08
      • 2011-05-09
      • 2018-12-13
      • 2014-07-08
      • 1970-01-01
      • 2012-11-02
      • 2020-11-11
      • 2020-02-08
      • 1970-01-01
      相关资源
      最近更新 更多