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