如何防止root运行git pull?

Posted

技术标签:

【中文标题】如何防止root运行git pull?【英文标题】:How to prevent root from running git pull? 【发布时间】:2012-10-10 16:09:13 【问题描述】:

需要防止 root 更新 git(工作)目录。推理包括但不限于:防止不希望的文件系统所有权更改。

似乎没有一个 git 钩子可以在发生之前阻止 fetch/merge/pull,类似于 pre-commit 钩子。或者至少,我在这里(或手册页)没有看到: http://www.analysisandsolutions.com/code/git-hooks-summary-cheat-sheet.htm

想法?

【问题讨论】:

“prevent root […]”——我认为这是不可能的。 为什么?您要避免的实际问题是什么?如果您试图阻止存储库中的文件归 root 所有,请不要在以 root 身份登录时拉取。 @meagar 已经在这样做了。唉,在许多人拥有 root/sudo 访问权限的团队环境中。想要特别阻止人们以 root 身份登录并无意中更改他们不应该更改的内容。有时人们会忘记旧习惯(我们过去需要 root/sudo privs 才能进行更新,但现在不再需要了),以 root 身份登录,并做他们不应该做的事情。 @poke 理论上可以放一个 'if [ "$(id -u)" == "0" ];然后退出 1' 检查预取钩子...如果存在预取钩子。 我认为答案是开始惩罚粗心使用 root 访问权限的人。第一步是撤销 root 访问权限... 【参考方案1】:

更改/root/.bashrc 以将新目录添加到PATH 的开头。在此处添加一个名为 git 的 shell 脚本,用于测试 $1 是否为少数只读命令之一(show/status/log/rev-list 等),如果该命令可接受,则调用 /usr/bin/git "$@"。这将防止您团队中的任何人意外以 root 身份运行 git pull。如果你担心他们是故意的,那你的问题就更大了……

【讨论】:

更好的是,让命令打印一条错误消息,如Please do not run git as root 在我的情况下,每当他没有权限做某事时,我部门的经理就一直在做'sudo su'。然后他做了一个 git pull 并搞砸了我的文件。我只想为任何 git 命令提供一条错误消息,上面写着“永远不要以 root 身份运行 git 命令!停止弄乱我的文件权限!”【参考方案2】:

我看到这个问题没有解决但至少“缓解”的唯一方法是通过 git 命令的包装器

如果用户 id 不是 root,所有 git 命令都会经过这个包装器。

【讨论】:

以上是关于如何防止root运行git pull?的主要内容,如果未能解决你的问题,请参考以下文章

git 执行pull错误如何撤销

git无法pull仓库refusing to merge unrelated histories

由于编辑器没有自动更新,有没有办法防止在 git pull 后意外覆盖?

在所有子目录上运行 git pull [重复]

git如何撤销pull命令。

无法“git pull” - 主机密钥验证失败