Wie kann man einen SSH-Benutzer so einschränken, dass nur SSH-Tunnel zugelassen werden?

31

Wie kann ich einen Benutzer auf dem SSH-Server so einschränken, dass er nur die Berechtigungen für SSH-TUNNELING erhält ? Das heißt, sie können keine Befehle ausführen, auch wenn sie sich über SSH anmelden.

Meine Linux-Server sind Ubuntu 11.04 und OpenWrt.

LanceBaynes
quelle

Antworten:

34

Auf der Serverseite können Sie dies einschränken, indem Sie die Benutzer-Shell auf festlegen /bin/true. Auf diese Weise können sie sich authentifizieren, aber nichts ausführen, da sie keine Shell erhalten, in der sie ausgeführt werden können. Dies bedeutet, dass sie auf alle Untermengen von Dingen beschränkt sind, die SSH ihnen anbieten kann. Wenn es eine Portweiterleitung bietet, können sie dies trotzdem tun.

Auf der Clientseite möchten Sie wahrscheinlich eine Verbindung mit dem herstellen -N. Dadurch wird der Client daran gehindert, nach einem Remote-Befehl wie z. B. einer Shell zu fragen. Er wird nur angehalten, nachdem der Authentifizierungsteil abgeschlossen ist. Vielen Dank an die Kommentatoren für die Herausgabe.

Caleb
quelle
Ich werde dieses ausprobieren: P thx!
LanceBaynes
2
Um die Antwort von Caleb zu ergänzen, müssen Sie den Client möglicherweise auch anweisen, keine Shell auszuführen. In der Befehlszeile von openssh erfolgt dies mit dem Flag -N. Es gibt eine ähnliche Option in PuTTY, aber ich erinnere mich nicht an den genauen Namen.
Bill B
hmm, das ist im Grunde genommen clientseitige Sicherheit, nein? Ich suche nach einer serverseitigen Sicherheitseinstellung, aber danke!
LanceBaynes
2
Entschuldigung, ich war nicht sicher - ich meinte in Kombination mit der Servereinstellung. Ich habe in der Vergangenheit die Erfahrung gemacht, dass Sie keine Verbindung herstellen können, wenn Sie die Shell auf etwas festlegen, das keine Shell ist, da versucht wird, eine Shell zu öffnen, dies jedoch nicht möglich ist. Daher wird die Sicherheit auf der Serverseite erzwungen (mithilfe der Caleb-Methode). Wenn Sie jedoch danach Probleme beim Herstellen einer Verbindung haben, müssen Sie möglicherweise den clientseitigen Schalter festlegen.
Bill B
3
Sie erstellen einen solchen Benutzer mit useradd sshtunnel -m -d /home/sshtunnel -s /bin/true.
Fracz
13

Das Folgende hat den Vorteil, dass X11- und SSH-Agentensocketweiterleitungen ebenfalls nicht zulässig sind, was in Calebs Weise möglicherweise noch zulässig ist. Ein weiterer Vorteil ist, dass der Benutzer seinen SSH-Zugriff nur auf TCP-Weiterleitungen beschränkt, wenn er seine Standard-Shell auf andere Weise ändern kann.

Fügen Sie Folgendes ein /etc/ssh/sshd_config:

Match User that-restricted-guy
  AllowTcpForwarding yes
  X11Forwarding no
  AllowAgentForwarding no
  ForceCommand /bin/false

Damit der Benutzer that-restricted-guyalle TCP-Verbindungen über Ihren SSH-fähigen Computer weiterleiten kann (Verbindung zu diesem Computer, auch zu localhostund sogar Verbindung von diesem Computer zu anderen Computern).

Wenn Sie es noch restriktiver wollen (was eine gute Idee ist), können Sie auch Folgendes tun:

Match User even-more-restricted-guy
  PermitOpen 127.0.0.1:12345
  X11Forwarding no
  AllowAgentForwarding no
  ForceCommand /bin/false

Auf diese Weise kann der Benutzer even-more-restricted-guynur Verbindungen an den 127.0.0.1-TCP-Port 12345 weiterleiten (wie dies auf Ihrem SSH-fähigen Computer sichtbar ist).

Wenn der Benutzer normalerweise eine Verbindung herstellt, wird die Verbindung sofort getrennt, da der /bin/falseBefehl ausgelöst wird, der nur mit dem Code 1 beendet wird. Wenn Sie dies vermeiden und die Weiterleitungsverbindung offen halten möchten, fügen Sie -Ndem sshBefehl das Flag hinzu . Dadurch wird nicht versucht, einen Befehl auszuführen, es können jedoch TCP-Weiterleitungen eingerichtet werden.

Ein Beispiel für einen Weiterleitungsbefehl, der in der letzteren Konfiguration funktionieren sollte:

ssh -L 12345:127.0.0.1:12345 -N even-more-restricted-guy@insert-your-machine
aef
quelle
1
Ich habe die Antwort als verbesserte Lösung gegenüber Calebs Antwort umformuliert.
14.
Sicher. Ich habe auch aufgeräumt. Gut zu sehen, dass das Missverständnis behoben ist. Gute Nacht.
Jakuje
1

Sie können steuern, was Benutzer in ssh tun können, indem Sie Gruppen zuordnen, vorausgesetzt, Ihre Version von ssh ist neu genug, um sie zu unterstützen (openssh 5.x +).

Grundsätzlich behandeln wir sie so, als wären sie SFTP-Benutzer, erlauben jedoch die TCP-Weiterleitung und geben optional die Ziele an, an die sie weiterleiten dürfen. Wenn Sie ihnen ein Ausgangsverzeichnis geben, aber keine Verzeichnisse darunter erstellen, können sie keine Dateien übertragen, da sie keine Berechtigung dazu haben.

Match Group                     nicepeople
    PubkeyAuthentication        yes
    PasswordAuthentication      yes
    PermitEmptyPasswords        no
    GatewayPorts                no
    ChrootDirectory             /opt/dummy_location/%u
    ForceCommand                internal-sftp
    AllowTcpForwarding          yes
        PermitOpen              192.168.0.8:22
        PermitOpen              192.168.0.5:8080
    # Or leave out the PermitOpen to allow forwarding to anywhere.
    HostbasedAuthentication     no
    RhostsRSAAuthentication     no
    AllowAgentForwarding        no
    Banner                      none

Sie können diese Übereinstimmungsgruppenblöcke für jede Gruppe wiederholen , für die Sie ein anderes Verhalten oder andere Einschränkungen festlegen möchten.

Mithilfe von iptables können Sie weiter steuern, wo diese Person im Netzwerk erreichbar ist

/sbin/iptables -I OUTPUT -m owner --gid-owner 500 -j REJECT
/sbin/iptables -I OUTPUT -m owner --gid-owner 500 -m tcp -p tcp -d 192.168.0.0/24 -j ACCEPT

Dies setzt voraus, dass die Gruppe "nicepeople" GID 500 ist.

Einige der oben genannten ssh-Optionen sind in älteren Versionen von openssh verfügbar, jedoch nicht im Abschnitt "Match Group". Match Group ist in OpenSSH 4.x und früheren Versionen stark eingeschränkt.

Aaron
quelle