Auf meinem Linux-Server angemeldete Benutzer sollten in der Lage sein, mit einem Standardkonto auf einen bestimmten Remote-Computer zu sshen. Die Authentifizierung auf dem Remotecomputer verwendet den öffentlichen Schlüssel, sodass auf dem Server der entsprechende private Schlüssel verfügbar ist.
Ich möchte nicht, dass die Serverbenutzer den privaten Schlüssel tatsächlich lesen können. Die Tatsache, dass sie Zugriff auf den Server haben, ermöglicht ihnen das SSH-Recht, und das Entfernen von ihnen vom Server sollte auch die Verbindung zum Remotecomputer verhindern.
Wie kann ich Benutzern erlauben, eine SSH-Verbindung zu öffnen, ohne ihnen Lesezugriff auf den privaten Schlüssel zu gewähren?
Meine bisherigen Gedanken: Natürlich muss die ausführbare Datei ssh in der Lage sein, den privaten Schlüssel zu lesen, also muss sie unter einem anderen Benutzer auf dem Server laufen, der diese Rechte hat. Sobald die SSH-Verbindung hergestellt ist, kann ich sie an den Benutzer "weiterleiten", damit er Befehle eingeben und mit dem Remote-Computer interagieren kann.
- Ist das ein guter Ansatz?
- Wie soll ich das forward implementieren?
- Wie kann der Benutzer die Verbindung herstellen (dh die Ausführung von ssh durch den Benutzer, der über Leserechte für den Schlüssel verfügt)?
- Gibt es eine Sicherheitslücke? - Wenn die Benutzer einen ssh als einen anderen Benutzer ausführen können, können sie dann alles tun, was der andere Benutzer könnte (einschließlich des Lesens des privaten Schlüssels)?
quelle
~/.ssh/authorized_keys
Datei neue öffentliche Schlüssel hinzufügen .Antworten:
Das ist einer der Gründe
sudo
. Erlauben Sie Ihren Benutzern einfach, einen einzelnen Befehl auszuführen, wobei nur die vorautorisierten Befehlszeilenoptionen verwendet werden und die offensichtlichsten Umgehungen behoben werden. z.BRichtet ein ,
sudo
dass alle Mitglieder der Gruppeusers
den Befehl ssh als Benutzer some_uid ausführen können, ohne ein eigenes Kennwort (oder das des Kontos some_uid) einzugeben, wenn sie ausgeführt werden:Deaktivieren Sie die
NOPASSWD:
Option, um zu erzwingen, dass Benutzer ihre eigenen Kennwörter eingeben, bevor Sie sich beim Remote-Host anmelden.Richten Sie möglicherweise ein Alias- oder Wrapper-Skript ein, um Ihren Benutzern die
sudo
Arbeit zu erleichtern, da die Verwendung der richtigen Argumente äußerst wählerisch ist.quelle
Dies scheint ein guter Anwendungsfall für die hostbasierte Authentifizierung zu sein. Dies ist eine Authentifizierungsmethode, bei der SSH keinen einzelnen Benutzerschlüssel auf dem lokalen Computer (in diesem Fall Ihren Server) zur Authentifizierung verwendet. Stattdessen wird der private Schlüssel des Hosts verwendet , der in gespeichert ist
/etc/ssh/
und nur von gelesen werden kannroot
.Um dies einzurichten, müssen Sie eine Datei mit dem Namen
.shosts
auf dem Remotecomputer im Ausgangsverzeichnis des Benutzers erstellen , unter dem sich die Benutzer anmelden sollen (nicht anmelden~/.ssh
). Die Datei sollte den Inhalt habenWo
server-hostname
ist der Name Ihres Servers und+
ist ein wörtliches Pluszeichen, das als Platzhalter für "jeden Benutzer" dient.Sie müssen auch sicherstellen, dass der Remotecomputer den Hostschlüssel des Servers überprüfen kann. Dies bedeutet, dass der Hostschlüssel des Servers entweder auf dem Remotecomputer
/etc/ssh/ssh_known_hosts
oder~/.ssh/known_hosts
auf diesem aufgeführt sein muss . Wenn dies nicht bereits der Fall ist, können Sie es einrichten, indem Sie sich beim Remote-Computer anmelden und ausführenSobald Sie diese Schritte eingerichtet haben, können Sie den privaten Schlüssel auf dem Server vollständig löschen, wenn Sie ihn für nichts anderes benötigen. (Und wenn Sie dies tun, können Sie es immer so einstellen, dass es nur von
root
oder von etwas lesbar ist .)Sie können auch auf einfache Weise bestimmte Benutzer auf den Remotecomputer zugreifen lassen oder ihnen den Zugriff verweigern. Weitere Informationen finden Sie auf den Manpages von
ssh
undhosts.equiv
.Ein Problem bei dieser Konfiguration besteht darin, dass Benutzer, die sich auf dem Remotecomputer anmelden, Änderungen vornehmen können
.shosts
. Sie können nichts tun, um sich als ein anderer Benutzer bei der Remote-Maschine anzumelden, aber sie könnten den eigenen oder fremden Zugriff auf die Remote-Maschine unterbrechen. Wenn dies ein Problem ist, können Sie möglicherweise.shosts
nur beschreibbare Dateien erstellen.root
Ich bin mir nicht sicher, ob dies funktioniert, aber Sie können es versuchen und sehen. (Andere Methoden wie die mitsudo
sind dem gleichen Risiko ausgesetzt, da ein Benutzer immer löschen könnte~/.ssh/authorized_keys
.)quelle
sudo
Option könnte jedoch für eine abgeschottete Umgebung besser sein ...