2011-11-23 7 views
15

Używam git i Codebase dla projektu.Zatrzymaj użytkowników popełniających błąd jako niewłaściwy użytkownik

Właśnie wykonałem test i mogę wysłać do repozytorium git inny adres e-mail i zestaw nazw, który powoduje, że oznacza to zatwierdzenie jako pochodzące od innego użytkownika. Przesłałem to do repozytorium i pojawił się, gdy ten użytkownik popełnił, mimo że to ja.

Czy istnieje sposób, aby uniemożliwić użytkownikom wysyłanie lub pchanie danych kogoś innego (skutecznie, aby nie mogli "wykuć" popełniać jako pochodzące od innego użytkownika)?

Edit:

Zakładam ten uwierzytelniania musiałby się zdarzyć na etapie popychanie zobowiązuje do serwera, ponieważ w lokalnej pracy skopiować to po prostu repozytorium, które użytkownik ma pełny dostęp do, aby zrobić cokolwiek oni chcą z. Czy jest to więc coś, o co powinienem zapytać Codebase o może?

Edycja 2:

GIT konfiguracji na żądanie:

(repo/.git/konfigurowania)

[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

Czy możesz opublikować zawartość pliku .git/config? –

+0

Czego używasz do serwera? Zwykły git, gitosis, gitolite, ...? – CodesInChaos

+1

OP używa Codebase, który jest podobny do GitHub. Jest na szczycie tego pytania. –

Odpowiedz

3

Ojej: Ta technika jest ważne, to zakłada masz pełną kontrolę nad serwerem. Jeśli korzystasz z hostowanego rozwiązania, wszystkie zakłady są wyłączone.

Możesz zweryfikować nazwisko autora i adres e-mail w haku update repozytorium. Możesz uzyskać obie wartości takie jak ta:

#!/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) 

Podstępem oczywiście jest ustalenie, czy są one ważne. Oto jedna sztuczka:

Możesz użyć opcji command="" w konfiguracji ssh, aby utworzyć opakowanie o numerze git-receive-pack, które mapuje klucze ssh do informacji o autorze. Na przykład coś takiego:

#!/bin/sh 

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

export GV_AUTHOR_EMAIL GV_AUTHOR_NAME 
eval exec $SSH_ORIGINAL_COMMAND 

I byłoby użyć czegoś authorized_keys linię:

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

Efektem tego wszystkiego jest to, że skrypt update musiałby zmienne środowiskowe GV_AUTHOR_NAME i GV_AUTHOR_EMAIL dostępne i może je sprawdzić w przypadku zatwierdzenia i wyjścia z błędem, jeśli nie pasują.

+0

Zwyczajowo zostawiasz komentarz, jeśli popierasz czyjąś odpowiedź. Pomaga to ludziom poprawić jakość ich odpowiedzi w miarę upływu czasu. Jeśli coś jest nie tak z tą odpowiedzią, daj mi znać, abym mógł to naprawić. Dzięki! – larsks

+0

(... chociaż podejrzewam, że to było po prostu odwetowe). – larsks

+0

Myślę, że zapytam chłopaków z Codebase, co to jest ich pozycja, dzięki :) – Richard

-3

Niestety mój post został usunięty zanim złożyłem ostatniej aktualizacji:

można popełnić jako kogoś innego, gdy masz ich mandatów.

Właśnie w celu wyjaśnienia, scenariusz prosicie o to następująco:

Użytkownicy i Foo Bar może zobowiązać się do repo. Chcesz uniemożliwić użytkownikowi Foo zatwierdzenie repo jako paska użytkownika.

W takim przypadku pasek użytkownika musiałby chronić swój prywatny klucz SSH, tak jak chroniłby hasło. Jest używany do uwierzytelniania Twojego zatwierdzenia.

+0

Możesz ustawić swoje imię i nazwisko oraz adres e-mail w dowolnym miejscu. Nie ma znaczenia, jakiego klucza ssh używasz (lub nawet, jeśli używasz ssh lub nie). Klucze SSH nie mają absolutnie nic wspólnego z nazwą i adresem e-mail zarejestrowanym przez git. – larsks

+0

Zaangażowania są dokonywane lokalnie przez git całkowicie niezależnie od użytego transportu. W konwencjonalnej konfiguracji, jeśli używasz ssh jako transportu, poświadczenia użyte do uwierzytelnienia użytkownika wykonującego polecenie push nie muszą mieć nic wspólnego z treścią naciśnięć. –

+0

Pyta w związku z Codebase, który jest podobny do GitHub. Patrzenie na problem w odniesieniu do tego, co jest rzeczywiście zadawane, byłoby pomocne przy ocenie odpowiedzi! –

Powiązane problemy