Ich möchte einen Git-Server über SSH einrichten, mit einem einzigen SSH-Konto für das Projekt. Alle Projektmitglieder sollten ihre SSH-Schlüssel in authorized_keys aufgelistet haben. Lockdown sollte den Zugriff auf ausschließlich Git-Aufgaben und nur innerhalb eines dedizierten Verzeichnisses beschränken.
Wie kann ich ein solches Setup am besten erstellen? Es gibt git-shell, das anscheinend die Sperre auf die Ausführung von Git-Befehlen beschränken kann, aber ich kann nicht herausfinden, wie ich den Zugriff auf ein einzelnes Verzeichnis beschränken kann. Es gibt auch verschiedene Python- und Ruby-Wrapper – welchen davon kann ich vertrauen?
Antwort1
Antwort2
Was ist Ihr Bedrohungsmodell?
Guter Kerl zerstört versehentlich das Git-Repository oder andere Daten:Stellen Sie sicher, dass Ihre Benutzer nur in ihr Home-Verzeichnis, ihr temporäres Verzeichnis und das Git-Repository schreiben können. Sichern Sie das Repository nach jedem Commit und führen Sie regelmäßig Wiederherstellungsverfahren durch.
Ein Bösewicht stiehlt den privaten Schlüssel einer anderen Person und möchte Ihr System besitzen:Ihre Angriffsfläche ist auf Teile von sshd beschränkt, die durch Authentifizierung geschützt sind – und auf die Shell-Schnittstelle, die Sie verwenden. Machen Sie sie also so klein wie möglich. Python/Ruby-Wrapper enthalten viel Code und bieten viel Raum für Fehler. Verwenden Sie die Git-Shell oder ziehen Sie die Verwendung der Anweisungen Match und ChrootDirectory in sshd_config in Betracht, um einzuschränken, auf welche Teile des Dateisystems die Benutzer zugreifen können.
Ein Bösewicht stiehlt den privaten Schlüssel einer anderen Person und erhält Ihren Quellcode:Bringen Sie den Benutzern bei, wie sie ihre privaten Schlüssel schützen, und legen Sie Verfahren für den schnellen Widerruf von Schlüsseln fest (z. B. wen sie um 4 Uhr morgens anrufen müssen, um Schlüssel widerrufen zu lassen).
Verwenden Sie nicht .ssh/authorized_keys
, sondern das AuthorizedKeyfile
Schlüsselwort in sshd_config, um einen Pfad anzugeben, für den Benutzer keinen Schreibzugriff haben, z. B. /etc/ssh/keys/%u
. Es ist zu schwierig sicherzustellen, dass Benutzer .ssh/authorized_keys niemals mit ihrer eigenen Kopie überschreiben können.
Sorgen Sie außerdem dafür, dass die Benutzerschlüsseldateien und die SSHD-Konfiguration versionskontrolliert sind, um Audits zu ermöglichen.