Utwórz użytkownika SSH z ograniczonymi uprawnieniami do korzystania tylko z repozytorium Git

12

Mam repozytorium git hostowane na moim serwerze SunOS, z którego korzystam zdalnie przez ssh

git clone ssh://[email protected]/path/to/git

Teraz muszę dodać więcej użytkowników, aby uzyskać dostęp do tego repozytorium, ale nie jestem pewien, jak to zrobić.

Dodałem jeden testUser do ssh, ale nie wydaje się ograniczać uprawnień tego użytkownika do używania tylko git.

testUser jest w stanie ssh przeglądać i przeglądać cały serwer.

Jak mogę utworzyć użytkowników, którzy mogą uzyskiwać dostęp do git tylko zdalnie, aby klonować / wyciągać / wypychać itp

dzięki

Kawaler
źródło

Odpowiedzi:

12

Możesz rozważyć użycie gitolitu dla jednego użytkownika zamiast konfigurowania wielu użytkowników powłoki git (i wymaganych uprawnień grupy i grupy, aby mogli oni współużytkować dostęp do repozytoriów).

gitolite działa pod jednym, normalnym użytkownikiem na serwerze i używa kluczy publicznych SSH w celu różnicowania dostępu do repozytoriów Git (zobacz „ jak gitolite używa ssh ”, aby uzyskać szczegółowe informacje o tym, w jaki sposób gitolite dokonuje identyfikacji na podstawie SSH). gitolite oferuje kontrolę dostępu dla poszczególnych repozytoriów, gałęzi, a nawet niektórych ścieżek.

Chris Johnsen
źródło
1
+1 za gitozę ... Zostało wykonane dokładnie dla tej konfiguracji.
Jeremy Bouse
12

Zasadniczo masz dwie opcje.

  1. Jak wspomniano topdog, kiedy tworzysz użytkowników na serwerze, ustaw ich powłokę na git-shell ( wpis książki tutaj ). Pozwoli to użytkownikowi zalogować się przez SSH, ale zamiast uruchamiać normalną, w pełni funkcjonalną powłokę (np. Sh, bash itp.), Uruchomi git-shell, który zapewnia dostęp tylko do funkcji git.

  2. Alternatywnie możesz udostępnić swoje repozytoria za pomocą innego protokołu, takiego jak TCP (przy użyciu git-deamon ) lub HTTP / HTTPS. Poleciłbym tylko taki scenariusz dla dostępu tylko do odczytu.

Wspominasz, że chcesz obsługiwać funkcję „push” dla swoich użytkowników, więc naprawdę powinieneś wybrać opcję nr 1.

chuckx
źródło
5

musisz zmienić ich powłokę na git-shell, co da im dostęp tylko do funkcji git.

topdog
źródło
Dzięki topdog. Zasadniczo użytkownik będzie używał własnej powłoki git na swoim komputerze Mac. Naprawdę nie chcę, żeby mógł ssh do serwera. Więc jeśli repozytorium git znajduje się na mydomain.com z komputera testUser / Mac, w terminalu może po prostu poprosić o klonowanie ssh: //[email protected]/path/to/git zostanie poproszony o podanie hasła, a następnie pobierz repo. Właśnie próbowałem teraz ustawić jego powłokę na git-shell. Monituje podczas wywoływania klonowania, ale hasło jest odrzucane.
Bach,
musisz ustawić powłokę myUsers na git-shell, jeśli wszystko, co chcesz, aby działały na serwerze, to uruchamianie komend git i brak możliwości włożenia powłoki. Aby wyświetlić monit o hasło, użyj kluczy. Bardziej szczegółowe omówienie git na serwerze znajduje się w darmowej książce git progit.org/book/ch4-0.html
topdog
dzięki za odniesienie do książki! bardzo pomocny. Skończyło się na użyciu gitolitu, ale wciąż mam problemy z konfiguracją.
Bach
git-shell : "Jest to powłoka logowania dla kont SSH w celu zapewnienia ograniczonego dostępu do Git. Umożliwia wykonywanie tylko poleceń Git po stronie serwera implementujących funkcję pull / push, a także poleceń niestandardowych znajdujących się w podkatalogu o nazwie polecenia git-shell-w katalog domowy użytkownika ”. W systemie Linux dodaj „/ bin / git-shell” do „/ etc / shells”, a następnie „usermod --shell / bin / git-shell $ USER”. Przy okazji, książka git jest teraz na git-scm.com/book/en/ch4-0.html
David Tonhofer
0

Innym sposobem na to jest ograniczenie dostępu użytkowników w ssh.

( http://prefetch.net/blog/index.php/2006/09/05/limiting-access-to-openssh-directives/ )

Przykładem jest tylko jeden użytkownik, ale jeśli użytkownicy należą do tej samej grupy, możesz je odfiltrować za pomocą dyrektywy grupowej. Coś jak

AllowTcpForwarding yes
X11Forwarding yes

Match Group Users
         AllowTcpForwarding no
         X11Forwarding no
         $Here is a directive for git$
Nikolaidis Fotis
źródło