
Ich versuche, einen Fake-Benutzer zu erstellen (einen Benutzer, der sich über SSH anmelden kann, aber im System nicht existiert), der einige Einschränkungen hat (zum Beispiel kann er nur einen Befehl verwenden und wenn er das tut, wird auch ein anderer Befehl ausgeführt). Gibt es eine Möglichkeit, dies zu erreichen? Ich kann keine Möglichkeit finden, einen Fake-Benutzer auf dem OpenSSH-Server zu erstellen, geschweige denn den Teil mit den Einschränkungen.
Antwort1
Es ist üblich, dass SSH-Server in Linux in das System integriert werden und keine weitere Benutzerebene einführen. Es ist nicht wie bei Samba oder FTP, wo eine solche Ebene von Samba-spezifischen oder FTP-spezifischen Benutzern existiert. Ich denke, es ist keine triviale Aufgabe, sshd
aus OpenSSH einen unabhängigen Benutzersatz zu definieren (aber vielleicht überrascht mich eine andere Antwort).
Vielleicht liegt Ihre Absicht, einen Fake-Benutzer zu erstellen, daran, dass Sie auf dem SSH-Server kein Root sind und dort keinen echten Benutzer erstellen können. In diesem Fall können Sie Folgendes tun :
Sehen Sie nach man 5 authorized_keys
, wo das Format beschrieben wird. In meinem Debian heißt es im Handbuch [Hervorhebung von mir]:
AuthorizedKeysFile
gibt die Dateien an, die öffentliche Schlüssel für die Authentifizierung mit öffentlichem Schlüssel enthalten; wenn diese Option nicht angegeben ist, ist der Standardwert~/.ssh/authorized_keys
und~/.ssh/authorized_keys2
. Jede Zeile der Datei enthält einen Schlüssel (leere Zeilen und Zeilen, die mit einem „#“ beginnen, werden als Kommentare ignoriert). Öffentliche Schlüssel bestehen aus den folgenden durch Leerzeichen getrennten Feldern: Optionen, Schlüsseltyp, base64-codierter Schlüssel, Kommentar. Das Optionsfeld ist optional. […]Die Optionen (sofern vorhanden) bestehen aus kommagetrennten Optionsspezifikationen. Leerzeichen sind nicht zulässig, außer in Anführungszeichen. Die folgenden Optionsspezifikationen werden unterstützt (beachten Sie, dass bei Optionsschlüsselwörtern die Groß-/Kleinschreibung nicht beachtet wird):
[…]
command="command"
Gibt an, dass der Befehl ausgeführt wird, wenn dieser Schlüssel zur Authentifizierung verwendet wird. Der vom Benutzer angegebene Befehl (sofern vorhanden) wird ignoriert.Der Befehl wird auf einem PTY ausgeführt, wenn der Client ein PTY anfordert; andernfalls wird er ohne TTY ausgeführt. Wenn ein sauberer 8-Bit-Kanal erforderlich ist, darf kein PTY angefordert werden oder es sollte angegeben werdenno-pty
. Ein Anführungszeichen kann in den Befehl eingefügt werden, indem es mit einem Backslash zitiert wird.Diese Option kann nützlich sein, um bestimmte öffentliche Schlüssel auf die Ausführung einer bestimmten Operation zu beschränken. Ein Beispiel hierfür wäre ein Schlüssel, der Remote-Backups zulässt, aber sonst nichts.Beachten Sie, dass der Client TCP- und/oder X11-Weiterleitung angeben kann, sofern diese nicht ausdrücklich verboten ist, z. B. durch Verwendung der
restrict
Schlüsseloption.[…]
Auf diese Weise können Sie als normaler Benutzer einer anderen Person (im Folgenden: einem Gast) erlauben, sich anzumeldenwie duund um einen bestimmten Befehl auszuführenwie duautomatisch. Registrieren Sie einfach Ihren öffentlichen Schlüssel in Ihrem ~/.ssh/authorized_keys
auf dem Server, indem Sie die command="command"
Option verwenden.
Der Befehl kann ein benutzerdefiniertes Programm oder ein Skript sein, das dem Gast ermöglicht, eine Aufgabe aus einer Liste auszuwählen oder ein Schlüsselwort einzugeben, um eine Aufgabe auszuwählen; oder einen „inneren“ Befehl einzugeben, der validiert und zugelassen oder verboten wird; das Programm führt dann entsprechend etwas aus. Es liegt an Ihnen, was der Befehl/das Programm/das Skript ist.
Beachten Sie aus der Sicht des SSH-Servers und seiner Administratoren den GastIstSie. Es ist Ihr Konto, das den Befehl ausführt, und wenn Ihr benutzerdefiniertes Programm oder Skript dem Gast erlaubt, einen beliebigen Befehl irgendwie auszuführen (z. B. indem es zuerst irgendwie eine Shell erzeugt), dann wird es so sein, als obDuFühren Sie den Befehl aus.
Denken Sie auch daran, dass der Befehl in einer nicht interaktiven Shell ausgeführt wird. Es wird Ihre Shell (die, die Sie mit auswählen chsh
) mit Ihrer Konfiguration sein. Die Shell kann einige Dateien als Quelle verwenden (siehewie sich Bash verhält), stellen Sie daher sicher, dass der Zugriff auf diese sicher ist, wenn der Gast eine Verbindung herstellt.
Im Handbuch steht, dass „der vom Benutzer eingegebene Befehl (sofern vorhanden) ignoriert wird“. Trotzdem konnte die erzwungene ausführbare Datei ihn in meinen Tests aus ihrer Umgebung abrufen, die Variable heißt SSH_ORIGINAL_COMMAND
. Das bedeutet, dass Sie dem Gast erlauben können, einige Informationen (z. B. Optionen) direkt bei seinem Aufruf von zu übergeben ssh
; auf der Serverseite ruft Ihr Programm sie aus der Variable ab. In einem Shell-Codenicht eval
die VariableUndverwenden Sie keine $SSH_ORIGINAL_COMMAND
unzitierten, es sei denn, Sie überprüfen vorher seine Sicherheit oder desinfizieren es.
Eine Beispielzeile, ~/.ssh/authorized_keys
die es dem Besitzer eines bestimmten Schlüssels ermöglicht, die Ausgabe anzuzeigen, df -h
sieht folgendermaßen aus:
command="df -h",no-pty ssh-rsa AAA…(public key here)…
(Eine Beschreibung von no-pty
finden Sie unter man 5 authorized_keys
. Es gibt auch andere Optionen, die für Sie hilfreich sein könnten.) Wer nun diesen bestimmten Schlüssel zum Herstellen einer Verbindung mit dem Server verwendet (mit Ihrem Login), sieht die Ausgabe von df -h
und die Verbindung wird getrennt.
1 Wahrscheinlich. Der SSH-Server kann so konfiguriert sein, dass er verschiedene Dinge verweigert.
Antwort2
Sie sollten sich vielleicht die Bereitstellung eines SSH-Honeypots ansehen. Im Grunde genommen ein Dummy-Server, der anfällig aussieht, aber keinen echten Zugriff auf irgendetwas hat. Alles wird protokolliert und Sie können den Zugriff auf Befehle einschränken.
Die Einrichtung ist nicht schwierig und es gibt viele Online-Ressourcen mit Anleitungen zur Bereitstellung. Die Antwort hier könnte allerdings etwas lang sein!
BEARBEITEN :Superuser ist nicht wirklich eine Quelle für Empfehlungen, aber dies scheint ein gut genutzter Superuser mit vielen Online-Tutorials zu sein:https://github.com/cowrie/cowrie Aus der README-Datei:
Wählen Sie die Ausführung als emulierte Shell (Standard):
- Gefälschtes Dateisystem mit der Möglichkeit, Dateien hinzuzufügen/zu entfernen. Ein vollständiges gefälschtes Dateisystem, das einer Debian 5.0-Installation ähnelt, ist enthalten
- Möglichkeit, gefälschte Dateiinhalte hinzuzufügen, sodass der Angreifer Dateien wie /etc/passwd caten kann. Es werden nur minimale Dateiinhalte eingefügt.
- Cowrie speichert mit wget/curl heruntergeladene oder mit SFTP und scp hochgeladene Dateien zur späteren Überprüfung