如何防止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仓库refusing to merge unrelated histories