2009-08-28 14 views
12

Używam gita do zarządzania małym projektem. Wszystkie moje transakcje (klon, push, pull, itp.) Wykonuję przez SSH, ale ostatnio uruchomiłem git-update-server-info, ponieważ chciałem eksperymentować z uruchamianiem git-clone przez http. To działało świetnie. Chłodny. Teraz zdaję sobie sprawę, że każdy może sklonować moje repozytorium przez http bez żadnych poświadczeń. Jestem niejasno świadomy konfigurowania uwierzytelniania http przez gitosis, ale to naprawdę nie jest to, co chcę. Wolałbym całkowicie wyłączyć klonowanie http.Czy mogę "wyłączyć" git-clone przez http?

Czy jest jakiś sposób, żeby powiedzieć gitowi, aby zezwalał na transakcje tylko przez ssh? Czy mogę cofnąć to, co zrobiłem, gdy uruchomiłem git-update-server-info, aby w pierwszej kolejności umożliwić klonowanie przez http?

+0

Z Git 2.12 (Q1 2017), będziesz miał 'git config protocol. .allow ... '. Zobacz [moja odpowiedź poniżej] (http://stackoverflow.com/a/41369667/6309) – VonC

Odpowiedz

14

Dla repozytorium git być dostępne za pośrednictwem transportu HTTP, musi być „eksportowane” przez (dowolnego) serwera WWW. Jeśli twoje repozytorium (a dokładniej jego katalog .git) jest widoczne z zewnątrz w przeglądarce internetowej, to można je sklonować lub pobrać anonimowo za pomocą protokołu HTTP. git update-server-info służy do generowania dodatkowych pomocniczych informacji pomocniczych (.git/objects/info/packs i .git/info/refs) do klonowania (lub pobierania), aby wiedzieć, co jest dostępne.

Więc co trzeba zrobić, to albo usunąć te dwa pliki (.git/objects/info/packs i .git/info/refs), lub po prostu zrobić to tak repozytorium nie jest dostępny za pośrednictwem sieci, być może przez Zmiana uprawnień w taki sposób, że użytkownik, który serwer internetowy działający jako (zwykle "nikt" lub "www" lub "apache") nie ma dostępu do repozytorium .git. Lub skonfiguruj serwer WWW, aby nie eksportował (nie wyświetlał) twojego repozytorium.

Protokół HTTP jest (obecnie) tak zwanym "niemym" protokołem, co oznacza, że ​​obsługuje pliki takie jakie są, a kontrola dostępu jest wykonywana przez [niemego] serwer, w tym przypadku przez serwer internetowy, którego używasz (lub przez system plików)).

Domyślam się, że twoje repozytorium nie zostało wyeksportowane przez serwer WWW, więc nie musisz się martwić: Twoje repozytorium nie jest dostępne przez HTTP.

Należy pamiętać, że jest to cytat zwykle dla repozytoriów Git mieć anonimowe nieautoryzowany dostęp tylko do odczytu i wymagają uwierzytelnienia tylko do zapisu do repozytorium czyli popychanie (przynajmniej dla projektów open-source)

+0

Mój katalog .git/objects/info jest już pusty i nadal mam ten sam problem. –

1

Delete .git/objects/info/packs i .git/info/refs

+0

Mój katalog .git/objects/info jest już pusty i nadal mam ten sam problem. –

2

Czy istnieje sposób mogę powiedzieć git, aby zezwolić na transakcje tylko przez ssh?

6 do 8 lat później GIT 2,12 (Q1 2017) zaproponuje konfigurację w celu umożliwienia lub wyłączyć protokół używany przez 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 

Patrz commit abcbdc0 (14 gru 2016) przez Jeff King (peff).
Zobacz commit a768a02, commit aeae4db, commit f1762d7, commit f962ddf, commit 85e4205 (14 grudnia 2016) przez Brandon Williams (mbrandonw).
(Scalony przez Junio C Hamano -- gitster -- w commit 9d540e9, 27 gru 2016)

Pozwala to na drobniejsze drobnoziarnisty kontroli jakie protokoły są dopuszczone do transportu podczas klon/pobranie/PUSH zostały włączone poprzez nową konfigurację mechanizmu.

git config obejmuje obecnie:

protocol.allow 

Jeśli zestaw, dostarczają politykę domyślny zdefiniowany przez użytkownika dla wszystkich protokołów, które wyraźnie nie mają polityki (protocol.<name>.allow).
Domyślnie, jeśli ustawione,

  • znane bezpiecznych protokołów (http, https, git, ssh, plik) posiadać politykę domyślną always,
  • znane są niebezpieczne protokoły (EXT) posiadać politykę domyślną z never i
  • wszystkie inne protokoły mają domyślną politykę user.

Obsługiwane zasady:

  • always - protokół jest zawsze mogły być wykorzystywane.
  • never - protokół nigdy nie może zostać użyty.
  • user - protokół może być używane tylko podczas GIT_PROTOCOL_FROM_USER jest albo wyłączony albo ma wartość 1.
    Polityka ta powinna być stosowana, gdy chcesz protokołem być bezpośrednio wykorzystywane przez użytkownika, ale nie chcą go stosować poleceniami wykonującymi polecenia klonowania/pobierania/wypychania bez wprowadzania danych przez użytkownika, np rekursywna inicjalizacja modułu.
+0

Nie zmieniam odpowiedzi, ale doceniam, że dodałeś tę informację! Dobrze wiedzieć. –

+0

@GeorgeMandis Bez problemu. Wciąż to nie jest wydane. – VonC

Powiązane problemy