GitHub作为全球最大的交友平台而被我们所熟知,但是我们有时候会将某些不适当的信息发布到网络上去,而GitHub并没有良好的交互界面让我们能在两分钟内撤回错误。

作为世界上比较有名的犬种,在将个人的某些账号信息以及某些资源(捂脸)完全公开之后,内心没有丝毫波动,甚至有点想笑,我为什么会出现这种破问题。

本着万事开头难,中间难,结尾难的想法,在被世人所不齿之前,踏上自救之路。


方案一:删库

方案二:使用 BFG Repo-Cleaner 删除(三个步骤,前两步可直接跳过,着急自救的同学可直接到 开始删除数据

首先:将当前版本的某些数据删掉(做完这一步之后突然意识到我可能连有名的犬种都不算);

其次:将仓库设为私有(此时已经能免费设置私有仓库了,先谢谢一下微软),打开GitHub Help(GitHub对我这种曾经没用功读书的人非常不友好,学霸读到这就可以跳过阅读原文),输入 removing sensitive 的时候,出现了几个提示引起我的注意:

GitHub Help

最后:删除敏感数据,文章大概意思如下:

清除仓库中的敏感数据

如果你提交了敏感数据,例如密码或者SSH秘钥之类的到Git仓库, 你可以从历史中删掉他们。想完全删除不想要的文件历史记录你可以使用 git filter-branch 命令或者 BFG Repo-Cleaner 开源社区工具。

git filter-branch 命令和 BFG Repo-Cleaner 可以重写你的仓库历史,他们可以更改目前存在的任何单独提交记录的或者有依赖的提交记录(SHA意思为哈希算法,可理解为提交记录)。修改提交记录可能会影响正在使用的 pull request,我们建议在进行清除敏感数据之前进行必要的合并或关闭请求。

你也可以使用 git rm 命令来删除文件。关于删除最新提交文件的信息可移步“Removing files from a repository's history”。

警告:一旦你提交到GitHub,应该考虑到数据可能会受到的任何影响。如果提交了密码,修改密码,提交了秘钥,及时换一个新的。

本文将阐述……(到这已经记不清英语老师长什么样了)

清除仓库的文件历史记录

使用 BFG

BFG Repo-Cleaner 是一个由开源社区开发且维护的工具,它提供了比git filter-branch更加简便快捷的方法来删除不想要的数据。比如,删除你文件中的敏感数据且不影响最新的提交,执行:

$ bfg --delete-files YOUR-FILE-WITH-SENSITIVE-DATA

可以在password.txt中列出所有文本来进行替换,执行:

$ bfg --replace-text passwords.txt

具体使用文档和下载说明请移步 https://rtyley.github.io/bfg-...


开始删除数据

读到这正文终于要开始了,但GitHub惜字如金,好在BFG托管在GitHub上,在官网上下载bfg.jar,并安装Java环境,Java环境的安装非常简单,我就不在此说明了。

首先克隆你的项目,并使用--mirror

$ git clone --mirror git://example.com/repo.git

克隆完后接着就可以执行之前下载的bfg.jar,将jar放到克隆项目后的文件夹内,和repo.git(此处项目名会不同)同级,YOUR-FILE-WITH-SENSITIVE-DATA是你包含敏感信息的文件名,不用写明路径:

java -jar bfg.jar --delete-files YOUR-FILE-WITH-SENSITIVE-DATA repo.git

执行结束后会出现如下结果(我们以删除application.yml文件为例)

执行结果

进入到repo.git下,我们还需执行git gc命令:

cd repo.git

$ git reflog expire --expire=now --all && git gc --prune=now --aggressive

最后,我们将修改结果提交:

$ git push

理论上到这已经是清除掉记录了,我的提交记录确实也变了,但是还是能找到某些羞羞的数据,因为之前在第一步的时候将这个文件给删掉了,于是又把文件提交到仓库,然后在执行上述步骤,终于危机解除,英雄又一次拯救了世界,散花之前还想提醒一下,执行完 bfg-1.13.0.jar 及相关命令后结果会有几行“奇怪”的文字,让我再复现一下。

奇怪文字

最后撒花(下文主要翻译了删除敏感数据策略的部分内容,该策略主要针对filter-branch)。


使用 filter-branch

由于使用filter-branch还需要提交删除请求,毕竟要解释删除的数据是干嘛的(捂脸),况且BFG自称速度是filter-branch的10~720倍。感兴趣的同学可以对下面这种复杂的方法了解一下。

以下是数据移除策略的部分内容,官方列举了什么是敏感数据以及一些注意事项,以及解释了GitHub如何移除这些数据,还有如何发送移除数据请求以及请求内容应包含事项(下图)等。

Sending A Sensitive Data Removal Request

图中的大概意思是:

发送一份删除敏感数据的请求

由于连接GitHub主机的内容以及管理方式的不同,我们需要你提供的信息越具体越好,为了确保我们核实用户并能够彻底移除敏感数据,我们需要知道从哪开始。

以下几点简单说明了移除敏感数据的步骤。

你的请求内容应该有:

  1. 每一个包含敏感数据的文件都有一个能正常指向该文件的链接。(注意,GitHub不能通过搜索结果,示例以及截屏来处理你的请求)
  2. 详细说明你的每个文件中敏感数据所在的行数。
  3. 简要描述敏感信息可能带来的风险,并且着重说明它是如何产生安全风险的
  4. 如果你是第三方或者其他代理机构所面临安全风险,请提供合法的授权表明你有执行权利。
  5. 可选项:让GitHub知道在删除数据请求前所面临的紧急情况和原因,我们会尽快处理你的删除请求;如果你的请求对时间敏感性有特殊的要求,例如公开最近的凭证等,请做出解释。

如何提交请求

你可以将删除请求发送到 support@github.com 或者通过GitHub的 Contact form 提交,请在邮件正文中包含一份纯文本格式的请求,邮件携带附件的话可能会存在处理延迟。


如需转载,请注明文章出处:https://segmentfault.com/a/11...
原创不易,感谢支持。

Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐