我注意到 git 確實允許用戶使用任意時間戳和作者進行提交,因此我可以想到一些潛在的濫用行為:
- 情況 1:如果我們使用 git 生成活動日志,我們如何確保時間戳是真實的?人們很久以前就可以使用假時間戳進行提交,有沒有辦法驗證?
- 情況2:萬一其他人使用我的名字作為作者進行破壞和破壞,有沒有辦法找出來?
uj5u.com熱心網友回復:
情況1 情況2:
對于當前和未來的提交,您可以創建 *-hook(我建議 precommit-),它檢查提交的日期和作者(來自元資料)并與實際日期和(登錄?已驗證?)用戶進行比較,如果不同則拒絕.
沒有歷史提交。
情況2:
禁止非 GPG 簽名的提交(簽名很容易,對于任何平臺和作業系統)
uj5u.com熱心網友回復:
大多數 git 服務器使用經過身份驗證的用戶進行“推送”操作,該用戶進行了推送,并且其中包含了哪些提交。這很難偽造,除非您對服務器具有管理員權限或訪問服務器的存盤。
在客戶端進行提交時,會捕獲提交元資料,但不能保證資料是正確的。即使用戶在提交上簽名,該簽名也可能在錯誤的日期進行。GPG/PGP 不使用外部時間服務器權限將時間簽名到簽名中。不過,它將阻止用戶更改其他用戶的提交(及其時間)。
滿足您所有要求的解決方案是針對時間服務器使用 SMIME 簽名。為此,您的每個開發人員都需要一個代碼簽名證書,并讓他們配置它和一個時間服務器來驗證簽名人和簽名時間。
客戶端上的預提交鉤子可以防止時間設定不正確的意外提交問題,但是由于需要在每次克隆之后安裝鉤子(并且可以輕松洗掉),因此它對攻擊者的安全性很小。
服務器上的 pre-receive 掛鉤可以防止意外推送到包含“舊”提交的中央服務器,但是當您從另一個位置(fork、鏡像等)匯入存盤庫時可能會導致問題。
兩者都不會阻止本地 repo 已更改時間到服務器安全時間視窗內的推送。
您最好的方法是信任服務器上的“推送”元資料,以便準確計時資料何時進入您的組織以及何時強制推送舊資料。可能結合使用 SMIME 證書和時間服務器簽署提交。
見:https ://www.glennwatson.net/posts/code-signing-github
GitHub 設定
我將假設您想對所有存盤庫使用 S/MIME 簽名。GitHub 指南中還有其他選項。由于時間戳權限的持續問題,我們將生成一個批處理檔案來運行 smimesign。
- 安裝 S/MIME 標志。
- 創建一個位于 smimesign 路徑中的批處理檔案。對于 Windows,批處理檔案示例(您可以將其命名為 sign.cmd)
Copy to clipboard@echo off smimesign.exe --timestamp-authority http://timestamp.digicert.com %*
- 告訴 git 使用 smimesign。從命令列運行:
git config --global gpg.x509.program c:/path/to/sign.cmd git config --global gpg.format x509 git config --global commit.gpgsign true
- 找到您要簽名的密鑰。運行
smimesign --list-keys并找到您要簽名的密鑰的序列號。復制密鑰的序列號,以便將其粘貼到下一個命令中。確保使用序列號而不是 ID。- 從命令列設定要使用的密鑰
git config --global user.signingkey a2dfa7e8c9c4d1616f1009c988bb70f現在每次提交時,它都會要求您輸入之前設定的密碼。
另請參閱:在企業環境中使用 x509 證書簽署 git commit
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/414051.html
標籤:
