2009-08-28 163 views
12

我使用git來管理一個小項目。我一直在通過SSH執行我所有的事務(克隆,推送,拉等),但最近運行了git-update-server-info,因爲我想嘗試通過http運行git-clone。它效果很好。涼。現在我意識到,雖然任何人都可以通過http克隆我的存儲庫而無需憑證。我隱約知道通過gitosis設置http身份驗證,但那真的不是我想要的。我寧願完全禁用http克隆。可以通過http「禁用」git-clone嗎?

有沒有一種方法可以告訴git只允許通過ssh進行交易?或者我可以取消我在運行git-update-server-info以首先啓用http複製時所做的操作?

+0

使用Git 2.12(2017年第1季度),您將擁有'git config協議。 。允許...'。見[我的答案](http://stackoverflow.com/a/41369667/6309) – VonC 2016-12-28 21:05:04

回答

14

對於git倉庫是通過HTTP傳輸可用,需要通過(任何)的web服務器被「出口」。如果您的存儲庫(更確切地說它的.git目錄)在Web瀏覽器中從外部可見,則可以通過HTTP協議進行匿名克隆或提取。 git update-server-info用於生成額外的輔助信息(.git/objects/info/packs.git/info/refs),用於克隆(或獲取)以瞭解可用的內容。

所以,你需要做的是要麼以這樣的方式刪除這兩個文件(.git/objects/info/packs.git/info/refs,或只是使它所以你的倉庫無法通過網絡獲得,也許更改權限用戶哪些web服務器運行時(通常是'nobody'或'www'或'apache')無法訪問.git存儲庫。或配置網絡服務器,以便它不會導出(顯示)您的存儲庫。

HTTP協議(當前)被稱爲「啞」協議,這意味着它按原樣服務於文件,並且訪問控制由[愚蠢]服務器完成,在這種情況下由您使用的Web服務器(或通過文件系統)。

我想你的版本庫不是由web服務器導出的,所以你沒有什麼可擔心的:你的版本庫不能通過HTTP獲得。

需要注意的是報價通常爲Git倉庫有匿名未經身份驗證的只讀訪問,並要求認證只針對寫入存儲庫,即推動(至少對於開源項目)

+0

我的.git/objects/info目錄已經是空的,我仍然有同樣的問題。 – 2011-11-01 02:10:59

1

刪除.git/objects/info/packs.git/info/refs

+0

我的.git/objects/info目錄已經是空的,我仍然有同樣的問題。 – 2011-11-01 02:11:28

2

是否有我可以告訴git只允許通過ssh進行交易嗎?

6至8後,GIT中2.12(Q1 2017)將提出的配置,以允許或禁止通過GIT中所使用的協議。

git config protocol.http.allow never 
git config protocol.https.allow never 
git config protocol.git.allow never 
git config protocol.file.allow never 

git config protocol.ssh.allow always 

通過Jeff King (peff)參見commit abcbdc0(二○一六年十二月一十四日)。
請參閱commit a768a02,commit aeae4db, commit f1762d7,commit f962ddf,commit 85e4205(2016年12月14日)作者:Brandon Williams (mbrandonw)
(由Junio C Hamano -- gitster --commit 9d540e9合併,2016年12月27日)

這允許克隆/讀取/推過程中有什麼協議允許傳輸更細粒度的控制已經通過了新的配置 機制被激活。

git config現在包括:

protocol.allow 

如果設置爲不明確有政策(protocol.<name>.allow)所有協議用戶定義的默認策略。
默認情況下,如果沒有設置,

  • 已知安全協議(HTTP,HTTPS,混帳,SSH,文件)有always默認策略,
  • 已知危險協議(EXT)有一個默認的策略never
  • 所有其他協議的默認策略爲user

支持政策:

  • always - 協議總是能夠被使用。
  • never - 協議永遠無法使用。
  • user - 協議只能夠當GIT_PROTOCOL_FROM_USER未設置或具有1
    當你想要一個協議是由用戶直接使用此政策應使用的值將被使用,但不希望它使用通過在沒有用戶輸入的情況下執行clone/fetch/push命令的命令,例如遞歸子模塊初始化。
+0

我不會改變答案,但我很感激你添加這個信息!很高興知道。 – 2016-12-30 22:59:51

+0

@GeorgeMandis沒問題。無論如何它尚未發佈。 – VonC 2016-12-30 23:02:17