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.
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.
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:
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
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.
useradd sshtunnel -m -d /home/sshtunnel -s /bin/true
.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
:Damit der Benutzer
that-restricted-guy
alle TCP-Verbindungen über Ihren SSH-fähigen Computer weiterleiten kann (Verbindung zu diesem Computer, auch zulocalhost
und 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:
Auf diese Weise kann der Benutzer
even-more-restricted-guy
nur 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/false
Befehl 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-N
demssh
Befehl 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:
quelle
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.
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
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.
quelle