对象:担心 GitHub 的「仓库误公开」或密钥泄露,纠结是否该用自建 Git 服务器(bare git 或 Gitea/Forgejo/GitLab)运营的个人开发者、小规模运营者。这里不涉及攻击手法,只讨论在你自己的架构下哪个更安全这一判断。
本站视角:自建运营必须『连同代价一起』,否则无法成立
本站自身也使用自建 Git 服务器运营。不过理由不只是「害怕误公开」,主要目的是受害范围(爆炸半径)的隔离——即使一个服务被攻陷,也不波及其他服务。而既然选择自建,就必须连同向另一台服务器的离站备份、绝不把密钥放进 git 的运营纪律、依赖 CVE 的自动监控一起付诸实践。自建运营的安全性,不是由「不用 GitHub」决定,而是由「把消失的代为承担部分自己补上」决定。
1. 自建运营真正能消除的风险
你的担忧有正当的依据。GitHub 上典型的「公开事故」,在自建运营下从结构上就不可能发生。
公开仓库会被全球的自动扫描 bot 持续爬取。一旦误把 .env 或 API 密钥提交上去,往往在人察觉之前 bot 就已捡到,几分钟内被滥用并不罕见(实例 → 密钥经公开仓库泄露被恶意扣费的案例 / .env 被整个公开的案例)。自建运营能消除这个公开面本身。「本以为是私有却是公开」「以为删掉的密钥还残留在公开 fork 里」这一类事故,在设计上就不会发生。这不是含糊的安慰,而是实在的优势。
2. 你将转而背负的东西(盲点)
这才是正题。GitHub 在你看不见的地方默认代为承担了许多防御。一旦转向自建,除非你自己去做,否则它们就不存在。
GitHub 代为承担的
- 在提交时拦截密钥混入(push protection)
- 依赖 CVE 的自动通知(Dependabot)
- 服务器本体的运营、补丁、TLS
- 两步验证、细粒度权限、审计日志
- 高可用性、冗余备份
自建下成了你的工作
- 自己装上提交前的密钥检测钩子
- 自己跑依赖 CVE 监控(cron)
- Git 服务器的漏洞也得自己堵
- 密钥管理=实际上的全权访问控制
- 丢了就完了——自己备好能恢复的方案
尤其容易忽视的有两点。其一是个悖论:你最害怕的「密钥泄露」,其实 GitHub 更能用机器替你拦住。GitHub 的 push protection 会直接拒绝包含疑似 API 密钥字符串的提交。而裸的自建 git 没有这道安全网。误公开消失了,但误提交不会消失——所以一旦自建,提交前的密钥检测钩子是必须的。
其二是,Git 服务器本体会成为攻击目标。像 GitLab 这样的多功能服务器,过去就有过多个严重漏洞(无需认证的远程代码执行=RCE 级别),放任不打补丁的自建服务器,本身就会成为入侵口。功能越多,攻击面越大。裸的 bare git+SSH 攻击面最小,GitLab/Gitea 等虽然方便,但要持续自己追补丁的负担也随之增加。
3. 让自建「比 GitHub 更安全」的条件
这是让自建运营不是图个安心、而是真正安全的最小集合。满足这些,才能说比 GitHub 更安全。
在提交前拦住密钥
最小化 Git 服务器本体并打补丁
向异地做离站备份+恢复测试
密钥分离,以最小权限、非 root 运行
自己跑依赖的 CVE 监控
4. 该选哪一个
不是「自建=老手」「GitHub=新手」。要以能否持续运营来决定。
适合自建(如果满足条件)
- 想消除误公开、公开 bot 滥用的面本身
- 能自己持续做服务器补丁、备份
- 不想把代码托付给第三方/想隔离受害范围
- 能连同密钥检测钩子和依赖监控一起引入
有时 GitHub 更安全
- 没有余力持续做补丁、备份 → 放任的自建最危险
- 想依赖 push protection / Dependabot 的自动防御
- 无法自己准备高可用、冗余备份
- 能彻底管好私有仓库(误公开可以靠设置运营来防)
说到底,自建运营是一份**「把原本 GitHub 代为承担的工作,由自己接过来」的契约**。如果接过来并执行,它就是能消除误公开这一大类事故的强力选择。如果以为接过来了却放任不管,那就会落到补丁缺失的服务器+密钥的误提交+无法恢复的备份这种比 GitHub 更糟的状态。经由供应链的混入(如xz-utils 后门那样的),无论托付给谁,持续做依赖监控都是防线。
本站自己是怎么做的
本站使用自建 Git 服务器(裸的 bare git+SSH)运营,并接线让推送的同时也自动飞向另一台服务器的备份。密钥(密钥文件、密码、连接信息)严格做到既不写进 git 也不写进文档,依赖的 CVE 监控则用 pnpm audit 在每次部署前+每日运行。也就是说,目的不是「不用 GitHub」本身,而是在消除误公开这一类事故的同时,把消失的代为承担部分全部自己补上——两者都做到,本站才认为自建运营是安全的。
接下来阅读
FAQ
Q自建 Git 服务器比 GitHub 更安全吗?
不能一概而论说更安全。自建运营在结构上能消除『仓库误公开』这一类事故,但服务器补丁、备份、提交前密钥检测等原本由 GitHub 代为承担的责任会转移到你身上。如果你愿意付出代价,那是个好选择;放任不管则会比 GitHub 更危险。
QGitHub 的什么让很多人害怕到要转向自建?
主要是『本以为是私有却被设成了公开』『把 API 密钥提交到公开仓库后几分钟内就被滥用』这类事故。公开仓库会被全球的自动扫描 bot 持续爬取,因此密钥泄露会立刻直接造成实际损失。自建运营能彻底消除这个公开面本身。
Q如果要自建,最低限度应该做什么?
①提交前检测密钥的钩子(gitleaks 等)②为 Git 服务器本体和操作系统打补丁+最小化攻击面③向异地的离站备份与恢复测试④密钥分离、非 root、最小权限⑤自己监控依赖的 CVE(osv-scanner/pnpm audit)。做到这些,『比 GitHub 更安全』才能成立。