對象:擔心 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 更安全』才能成立。