2011-11-23 32 views
15

我對項目使用git和Codebase阻止用戶犯下git作爲錯誤的用戶

我只是做了一個測試,我可以提交到不同的電子郵件地址和名稱集的git存儲庫,這會導致它將提交標記爲由不同的用戶提交。我將它推送到存儲庫,並且它顯示爲該用戶已經提交,即使它是我。

有沒有辦法阻止用戶提交或推送別人的用戶詳細信息(有效使他們無法「僞造」提交作爲來自不同用戶的提交)?

編輯:

我認爲這個認證需要在因爲在本地工作推提交給服務器的階段發生的複製,它只是用戶有完全訪問的庫,做什麼他們想要的。因此,這是我應該問Codebase可能嗎?

編輯2:

的要求

GIT中配置:

(回購/的.git /配置)

[core] 
    repositoryformatversion = 0 
    filemode = true 
    bare = false 
    logallrefupdates = true 
    ignorecase = true 
[remote "origin"] 
    fetch = +refs/heads/*:refs/remotes/origin/* 
    url = [email protected]:<redacted company name>/<redacted project name>/test.git 
[branch "master"] 
    remote = origin 
    merge = refs/heads/master 
+0

你可以發佈你的.git/config的內容嗎? –

+0

你在服務器上使用什麼?平原git,gitosis,gitolite,...? – CodesInChaos

+1

OP使用的是Codebase,與GitHub類似。它在問題的頂部。 –

回答

3

哎呀:儘管這是一個有效的技術,它假定您可以完全控制服務器。如果您使用的是託管解決方案,則所有投注均爲關閉。

您可以在存儲庫的update鉤子中驗證作者姓名和電子郵件。你可以得到這樣的兩個值:

#!/bin/sh 
set -- refname sha1_old sha1_new 
author_name=$(git log --pretty=format:%an $sha1_new) 
author_email=$(git log --pretty=format:%ae $sha1_new) 

當然,這個技巧就是弄清楚這些是否有效。這裏有一個技巧:

您可以在您的ssh配置中使用command=""選項來創建一個圍繞git-receive-pack的包裝,它將ssh密鑰映射爲作者信息。例如,像這樣:

#!/bin/sh 

GV_AUTHOR_NAME="$1" 
GV_AUTHOR_EMAIL="$2" 

export GV_AUTHOR_EMAIL GV_AUTHOR_NAME 
eval exec $SSH_ORIGINAL_COMMAND 

你就可以使用一個authorized_keys線是這樣的:

command="~/bin/gitvalidator 'Lars Kellogg-Stedman' '[email protected]'" ssh-rsa ... 

所有這一切的結果是,你update腳本將有環境變量GV_AUTHOR_NAMEGV_AUTHOR_EMAIL可用的,並且可以檢查這些提交併退出,如果它們不匹配則出錯。

,當你有他們的憑據,則可以提交爲別人:我提交了最新的更新之前

+0

如果你倒下了某人的回答,通常會留下評論。這有助於人們提高他們的答案質量隨着時間的推移。如果這個答案有問題,請讓我知道,以便我可以修復它。謝謝! – larsks

+0

(...雖然我懷疑這只是報復性。) – larsks

+0

我想我會問在Codebase的傢伙們他們在這方面的立場是什麼,謝謝:) – Richard

-3

對不起我的帖子刪除了。

只是爲了澄清,你是問有關情況如下:

用戶Foo和酒吧可以承諾回購。您想阻止用戶Foo以用戶Bar的身份提交回購。

在這種情況下,用戶Bar必須保護他們的私人SSH密鑰,就像他們會保護密碼一樣。因爲這是用來驗證你的提交。

+0

你可以設置你的名字和電子郵件到任何你想要的。不管你使用什麼ssh密鑰(或者即使你使用的是ssh)。 SSH密鑰與git記錄的名稱和電子郵件地址完全無關。 – larsks

+0

提交由git在本地完成,完全獨立於使用的傳輸。在傳統的設置中,如果您使用ssh作爲傳輸方式,那麼用於對進行推送的用戶進行身份驗證的憑據無需與推送的提交內容有任何關係。 –

+0

他問的是Codebase,它與GitHub類似。在評估答案時,查看與實際要求相關的問題將會很有幫助! –