Unter Ubuntu 11.10 konnte ich SSH-Befehle blockieren, die mit und ohne -T gesendet wurden, und das Kopieren von SCP blockieren, während die Portweiterleitung durchlaufen wurde.
Insbesondere habe ich einen Redis-Server auf "somehost", der an localhost: 6379 gebunden ist und den ich sicher über ssh-Tunnel an andere Hosts weitergeben möchte, die eine Schlüsseldatei haben und mit ssh zusammenarbeiten:
$ ssh -i keyfile.rsa -T -N -L 16379:localhost:6379 someuser@somehost
Dies führt dazu, dass der Redis-Server "localhost" -Port 6379 auf "somehost" lokal auf dem Host angezeigt wird, der den Befehl ssh ausführt, der dem "localhost" -Port 16379 neu zugeordnet ist.
Auf der Fernbedienung "somehost" Folgendes habe ich für autorisierte Schlüssel verwendet:
cat .ssh/authorized_keys (portions redacted)
no-pty,no-X11-forwarding,permitopen="localhost:6379",command="/bin/echo do-not-send-commands" ssh-rsa rsa-public-key-code-goes-here keyuser@keyhost
Das No-Pty löst die meisten SSH-Versuche aus, die ein Terminal öffnen möchten.
Das allowopen erklärt, welche Ports weitergeleitet werden dürfen, in diesem Fall Port 6379 der Redis-Server-Port, den ich weiterleiten wollte.
Der Befehl = "/ bin / echo Befehle nicht senden" gibt "Befehle nicht senden" zurück, wenn es jemandem oder etwas gelingt, Befehle über ssh -T oder auf andere Weise an den Host zu senden.
In einem aktuellen Ubuntu-Modus man sshd
wird authorized_keys / command wie folgt beschrieben:
command = "command" Gibt an, dass der Befehl immer dann ausgeführt wird, wenn dieser Schlüssel zur Authentifizierung verwendet wird. Der vom Benutzer angegebene Befehl (falls vorhanden) wird ignoriert.
Versuche, das Kopieren sicherer scp-Dateien zu verwenden, schlagen ebenfalls mit einem Echo von "Nicht senden-Befehlen" fehl. Ich habe festgestellt, dass SFTP auch bei dieser Konfiguration fehlschlägt.
Ich denke, der eingeschränkte Shell-Vorschlag, der in einigen früheren Antworten gemacht wurde, ist auch eine gute Idee. Ich würde auch zustimmen, dass alles, was hier detailliert beschrieben wird, durch Lesen von "man sshd" und Suchen darin nach "autorisierten_ Schlüsseln" bestimmt werden kann.
no-pty
Öffnen der interaktiven Ansicht ist zwar nicht möglich, verhindert jedoch nicht die Ausführung des Befehls, sodass der Benutzer dieauthorized_keys
Datei bearbeiten kann, wenn er Zugriff auf etwas wie hatssh server 'sed -i -e s/no-pty// ~/.ssh/authorized_keys'
.~user/.ssh/authorized_keys
werdenuser
, unduser
verwaltet diese. SSH ist wählerisch in Bezug auf Berechtigungen und kann Erwartungen~/.ssh/
und deren Inhalt auferlegen . Ich habe eine gemachtsudo chown root: .ssh/authorized_keys
und es scheint mich daran gehindert zu haben, mich anzumelden, aber ich weiß aus früheren Erfahrungen, dass der Benutzer diese Datei nicht besitzen muss -root
kann sie verwalten, wenn Sie es vorziehen.Möglicherweise möchten Sie die Shell des Benutzers auf die eingeschränkte Shell setzen . Deaktivieren Sie die PATH-Variable im ~ / .bashrc oder ~ / .bash_profile des Benutzers, und er kann keine Befehle ausführen. Wenn Sie später entscheiden, dass Sie den Benutzern erlauben möchten, einen begrenzten Satz von Befehlen auszuführen, wie
less
odertail
zum Beispiel, können Sie die zulässigen Befehle in ein separates Verzeichnis (z. B./home/restricted-commands
) kopieren und den Pfad aktualisieren, auf den sie zeigen dieses Verzeichnis.quelle
ssh use@host "/bin/bash"
.user@host
hat rbash als Shell. Siehe The Restricted Shell/bin/bash
schlägt die Ausführung fehl, da er Schrägstriche enthält.less
wahrscheinlich eine schlechte Idee ist, weil man von dort aus zu einer uneingeschränkten Shell mit entkommen kann!/bin/bash
. Weitere Beispiele finden Sie unter pen-testing.sans.org/blog/2012/06/06/… . Das Zulassen einzelner Befehle sollte daher, wenn überhaupt, sehr, sehr sorgfältig erfolgen.Neben der Option "authorized_keys" wie "no-X11-forwarding" gibt es genau eine, nach der Sie fragen: allowopen = "host: port". Mit dieser Option kann der Benutzer nur einen Tunnel zum angegebenen Host und Port einrichten.
Einzelheiten zum Dateiformat AUTHORIZED_KEYS finden Sie unter man sshd.
quelle
no-pty
Shell-Zugriff wird auch nicht eingeschränkt. Sie gelangen trotzdem zur Shell. Die Eingabeaufforderung wird nur nicht angezeigt. Sie können weiterhin Befehle erteilen und die Ausgabe gut sehen. Sie benötigen diecommand="..."
Option, wenn Sie den Shell-Zugriff von einschränken möchten.ssh/authorized_keys
.Meine Lösung besteht darin, dem Benutzer, der möglicherweise nur ohne interaktive Shell tunnelt, die Möglichkeit zu geben, diese Shell in / etc / passwd auf / usr / bin / tunnel_shell zu setzen .
Erstellen Sie einfach die ausführbare Datei / usr / bin / tunnel_shell mit einer Endlosschleife .
Vollständig erklärt hier: http://blog.flowl.info/2011/ssh-tunnel-group-only-and-no-shell-please/
quelle
tunnel_shell
, haben Sieshell -> /bin/bash tunnel_shell
so können Sie natürlich an die Shell entkommen zurück, aber wenn Sie festgelegt haben ,tunnel_shell
wie die Shell des Benutzers, werden Sie nur haben/bin/bash tunnel_shell
laufen, ohne Schale , um zu entkommen , soweit ich das beurteilen kann. Ich habe es getestet und konnte mit Strg-Z nicht entkommen. Wenn Sie es versucht haben und entkommen könnten, könnten Sie das Setup veröffentlichen? Wenn Sie eine Dokumentation kennen, die besagt, dass es so funktionieren sollte, können Sie das auch posten?Sie möchten eine Zeile in Ihrer Datei "authorized_keys", die so aussieht.
quelle
Wenn Sie den Zugriff nur für einen bestimmten Befehl zulassen möchten - wie z. B. svn - können Sie diesen Befehl auch in der Datei mit den autorisierten Schlüsseln angeben:
Von http://svn.apache.org/repos/asf/subversion/trunk/notes/ssh-tricks
quelle
Hier haben Sie einen schönen Beitrag, den ich nützlich fand: http://www.ab-weblog.com/de/creating-a-restricted-ssh-user-for-ssh-tunneling-only/
Die Idee ist: (mit dem neuen eingeschränkten Benutzernamen als "sshtunnel")
Beachten Sie, dass wir rbash (eingeschränkte Bash) verwenden, um die Möglichkeiten des Benutzers einzuschränken: Der Benutzer kann keine CD (Verzeichnis ändern) und keine Umgebungsvariablen festlegen.
Dann bearbeiten wir die PATH env-Variable des Benutzers in
/home/sshtunnel/.profile
nichts - ein Trick, mit dem bash keine auszuführenden Befehle findet:Schließlich verbieten wir dem Benutzer, Dateien zu bearbeiten, indem wir die folgenden Berechtigungen festlegen:
quelle
Ich habe ein C-Programm gemacht, das so aussieht:
Ich habe die Shell des eingeschränkten Benutzers auf dieses Programm eingestellt.
Ich glaube nicht, dass der eingeschränkte Benutzer irgendetwas ausführen kann, selbst wenn
ssh server command
dies der Fall ist, da die Befehle mit der Shell ausgeführt werden und diese Shell nichts ausführt.quelle
Siehe diesen Beitrag zur Authentifizierung öffentlicher Schlüssel .
Die beiden wichtigsten Dinge, an die Sie sich erinnern müssen, sind:
chmod 700 ~/.ssh
quelle
Sie generieren einen Schlüssel auf dem Computer des Benutzers über den von ihm verwendeten SSH-Client. pUTTY hat zum Beispiel ein Dienstprogramm, um genau das zu tun. Es wird sowohl ein privater als auch ein öffentlicher Schlüssel generiert.
Der Inhalt der generierten öffentlichen Schlüsseldatei wird in der Datei authorized_keys abgelegt.
Als Nächstes müssen Sie sicherstellen, dass der SSH-Client für die Verwendung des privaten Schlüssels konfiguriert ist, der den öffentlichen Schlüssel generiert hat. Es ist ziemlich einfach, aber je nach verwendetem Client etwas anders.
quelle