Erstellen Sie einen SSH-Benutzer mit eingeschränkten Berechtigungen, um nur das Git-Repository zu verwenden

11

Ich habe ein Git-Repository auf meinem SunOS-Server gehostet, das ich über ssh remote verwende

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

Jetzt muss ich weitere Benutzer hinzufügen, um auf dieses Repository zugreifen zu können, bin mir aber nicht sicher, wie.

Ich habe ssh einen testUser hinzugefügt , aber ich kann diese Benutzerrechte anscheinend nicht darauf beschränken, nur git zu verwenden.

testUser kann den gesamten Server durchsuchen und durchsuchen.

Wie kann ich Benutzer erstellen, die nur remote auf git zugreifen können, um zu klonen / ziehen / pushen usw.

Vielen Dank

Bach
quelle

Antworten:

11

Sie können in Betracht ziehen, gitolite unter einem einzelnen Benutzer zu verwenden, anstatt mehrere Git-Shell- Benutzer einzurichten (und die erforderlichen Gruppen- und Gruppenberechtigungen, damit diese den Zugriff auf die Repositorys gemeinsam nutzen können).

gitolite wird unter einem einzelnen, normalen Benutzer auf dem Server ausgeführt und verwendet öffentliche SSH-Schlüssel, um den Zugriff auf Git-Repositorys zu differenzieren (siehe „ Wie gitolite ssh verwendet “ für einige Details darüber, wie gitolite seine SSH-basierte Identifizierung durchführt). gitolite bietet pro Repository, pro Zweig und sogar einige Zugriffskontrollen pro Pfad.

Chris Johnsen
quelle
1
+1 für Gitosis ... Es wurde genau für dieses Setup gemacht.
Jeremy Bouse
12

Sie haben grundsätzlich zwei Möglichkeiten.

  1. Wie oben erwähnt, setzen Sie beim Erstellen von Benutzern auf dem Server deren Shell auf git-shell ( Bucheintrag hier ). Auf diese Weise kann sich der Benutzer über SSH anmelden. Statt jedoch eine normale Shell mit vollem Funktionsumfang (z. B. sh, bash usw.) Auszuführen, wird git-shell ausgeführt, die nur Zugriff auf die git-Funktionalität bietet.

  2. Alternativ können Sie Ihre Repositorys über ein anderes Protokoll wie TCP (mit git-deamon ) oder HTTP / HTTPS verfügbar machen . Ich würde ein solches Szenario jedoch nur für den schreibgeschützten Zugriff empfehlen.

Sie erwähnen, dass Sie die Push-Funktionalität für Ihre Benutzer unterstützen möchten, daher sollten Sie sich wirklich für Option 1 entscheiden.

Chuckx
quelle
5

Sie müssen ihre Shell in Git-Shell ändern, damit sie nur auf Git-Funktionen zugreifen können.

Platzhirsch
quelle
Danke Topdog. Grundsätzlich verwendet der Benutzer seine eigene Git-Shell auf seinem Mac. Ich möchte nicht, dass er zum Server ssh kann. Wenn sich das Git-Repo auf mydomain.com von testUser computer / Mac befindet, kann er im Terminal einfach den Klon ssh: //[email protected]/path/to/git zur Eingabe seines Passworts auffordern und dann das Repo herunterladen. Ich habe gerade versucht, seine Shell auf Git-Shell zu setzen. Beim Aufrufen von clone wird eine Eingabeaufforderung angezeigt, das Kennwort wird jedoch abgelehnt.
Bach
Sie müssen die myUsers-Shell auf git-shell setzen, wenn Sie auf dem Server nur git-Befehle ausführen möchten und nicht in der Lage sind, Shell zu verwenden. Für die Kennwortabfragen verwenden Sie bitte Schlüssel. Weitere Informationen zu
topdog
danke für die buchreferenz! sehr hilfreich. Endete mit Capitolit, hatte aber immer noch Probleme mit dem Setup.
Bach
git-shell : "Dies ist eine Anmeldeshell für SSH-Konten, die einen eingeschränkten Git-Zugriff bietet. Sie ermöglicht nur die Ausführung von serverseitigen Git-Befehlen, die die Pull / Push-Funktionalität implementieren, sowie von benutzerdefinierten Befehlen, die in einem Unterverzeichnis mit dem Namen git-shell-Befehle in vorhanden sind das Home-Verzeichnis des Benutzers. " Fügen Sie unter Linux "/ bin / git-shell" zu "/ etc / shells" und dann "usermod --shell / bin / git-shell $ USER" hinzu. Übrigens ist das Git-Buch jetzt unter git-scm.com/book/en/ch4-0.html
David Tonhofer
0

Eine andere Möglichkeit besteht darin, den Zugriff der Benutzer innerhalb von ssh zu beschränken.

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

Das Beispiel besteht nur darin, nur einen Benutzer zu verwenden. Wenn sich die Benutzer jedoch in derselben Gruppe befinden, können Sie sie mithilfe der Gruppenanweisung herausfiltern. Etwas wie

AllowTcpForwarding yes
X11Forwarding yes

Match Group Users
         AllowTcpForwarding no
         X11Forwarding no
         $Here is a directive for git$
Nikolaidis Fotis
quelle