TL; DR - Gehen Sie zum Ende der Antwort "Anwenden der Einschränkungen".
Das Hinzufügen eines eingeschränkten Benutzers besteht aus zwei Teilen: 1. Erstellen des Benutzers 2. Konfigurieren des SSH-Dämons (sshd)
Sshd konfigurieren
Der beste Ort, um sich mit den Möglichkeiten von SSH vertraut zu machen, ist das Lesen der entsprechenden Handbuchseiten:
Wo kann der SSH-Client Aktionen ausführen?
Bevor Sie etwas einschränken können, müssen Sie die Funktionen von SSH kennen. Das Durchblättern der Manualseiten ergibt:
- Ausführung von Shell-Befehlen
- Datei-Upload über SFTP
- Port-Weiterleitung
- Der Client leitet einen (nicht) genutzten Port an den Server weiter
- Der Server leitet seinen Port an den Client weiter
- Der Server leitet einen Port eines anderen Hosts an den Client weiter (proxy-ish)
- X11-Weiterleitung (Display-Weiterleitung)
- Weiterleitung des Authentifizierungsagenten
- Weiterleitung eines Tunnelgerätes
Von dem Authentifizierung Abschnitt der Manpage von sshd (8) :
Wenn der Client sich erfolgreich authentifiziert hat, wird ein Dialogfeld zum Vorbereiten der Sitzung aufgerufen. Zu diesem Zeitpunkt fordert der Client möglicherweise die
Zuweisung einer Pseudotty, die Weiterleitung von X11-Verbindungen, die Weiterleitung von TCP-Verbindungen oder die Weiterleitung der Authentifizierungsagentenverbindung über den sicheren Kanal an.
Danach fordert der Client entweder eine Shell an oder führt einen Befehl aus . Die Seiten wechseln dann in den Sitzungsmodus. In diesem Modus kann jede Seite jederzeit Daten senden, und diese Daten werden an die Shell oder den Befehl auf der Serverseite und an das Benutzerterminal auf der Clientseite weitergeleitet.
Optionen zum Einschränken der SSH-Funktionen
Dateien und ihre Optionen, die das Verhalten ändern, sind:
~/.ssh/authorized_keys
- enthält Schlüssel, die eine Verbindung herstellen dürfen und denen Optionen zugewiesen werden können:
command="command"
- Der vom Benutzer eingegebene Befehl (falls vorhanden) wird ignoriert. Beachten Sie, dass der Client TCP- und / oder X11-Weiterleitungen festlegen kann, sofern dies nicht ausdrücklich untersagt ist . Beachten Sie, dass diese Option für die Ausführung von Shell-, Befehls- oder Subsystemen gilt.
no-agent-forwarding
- Verbietet die Weiterleitung von Authentifizierungsagenten, wenn dieser Schlüssel zur Authentifizierung verwendet wird.
no-port-forwarding
- Verbietet die TCP-Weiterleitung, wenn dieser Schlüssel zur Authentifizierung verwendet wird
no-X11-forwarding
- "Verbietet X11-Weiterleitung, wenn dieser Schlüssel zur Authentifizierung verwendet wird."
permitopen="host:port"
- Begrenzen Sie die lokale 'ssh-L'-Portweiterleitung so, dass nur eine Verbindung zum angegebenen Host und Port hergestellt werden kann.
~/.ssh/environment
- Diese Datei wird beim Login in die Umgebung eingelesen (falls vorhanden). Die Umgebungsverarbeitung ist standardmäßig deaktiviert und wird über die Option PermitUserEnvironment gesteuert
~/.ssh/rc
- Enthält Initialisierungsroutinen, die ausgeführt werden müssen, bevor auf das Basisverzeichnis des Benutzers zugegriffen werden kann.
/etc/ssh/sshd_config
- die systemweite Konfigurationsdatei
AllowAgentForwarding
- Gibt an, ob die Weiterleitung von ssh-agent (1) zulässig ist.
AllowTcpForwarding
ForceCommand
- "Erzwingt die Ausführung des von ForceCommand angegebenen Befehls, wobei alle vom Client und ~ / .ssh / rc (sofern vorhanden) bereitgestellten Befehle ignoriert werden. Der Befehl wird mithilfe der Anmeldeshell des Benutzers mit der Option -c aufgerufen."
GatewayPorts
- "Gibt an, ob Remotehosts Verbindungen zu für den Client weitergeleiteten Ports herstellen dürfen. Standardmäßig bindet sshd (8) Remoteportweiterleitungen an die Loopback-Adresse. Dadurch wird verhindert, dass andere Remotehosts Verbindungen zu weitergeleiteten Ports herstellen. GatewayPorts kann zum Festlegen verwendet werden dass sshd zulassen sollte, dass Remote-Port-Weiterleitungen an Nicht-Loopback-Adressen gebunden werden, damit andere Hosts eine Verbindung herstellen können. "
PermitOpen
:
Gibt die Ziele an, an die die TCP-Portweiterleitung zulässig ist. Die Speditionsspezifikation muss eine der folgenden Formen haben:
PermitOpen host:port
PermitOpen IPv4_addr:port
PermitOpen [IPv6_addr]:port
Mehrere Weiterleitungen können durch Leerzeichen getrennt angegeben werden. Ein Argument von 'any' kann verwendet werden, um alle Einschränkungen zu entfernen und Weiterleitungsanforderungen zuzulassen. Standardmäßig sind alle Portweiterleitungsanforderungen zulässig.
PermitTunnel
- Gibt an, ob die Weiterleitung von tun (4) -Geräten zulässig ist. Der Standardwert ist "Nein".
X11Forwarding
- Gibt an, ob die X11-Weiterleitung zulässig ist. Der Standardwert ist "Nein".
Anwenden der Einschränkungen
Durch Ändern der systemweiten Konfigurationsdatei /etc/ssh/sshd_config
kann die Konfiguration auch dann angewendet werden, wenn die kennwortbasierte Authentifizierung angewendet wird oder wenn die Einschränkungen ~/.ssh/authorized_keys
versehentlich entfernt wurden. Wenn Sie die globalen Standardeinstellungen geändert haben, sollten Sie die Optionen entsprechend auskommentieren.
Match User limited-user
#AllowTcpForwarding yes
#X11Forwarding no
#PermitTunnel no
#GatewayPorts no
AllowAgentForwarding no
PermitOpen localhost:62222
ForceCommand echo 'This account can only be used for [reason]'
Fügen Sie nun einen Benutzer hinzu:
sudo useradd -m limited-user
Die Option ForceCommand
kann weggelassen werden, wenn die Shell auf eine Nicht-Shell wie /bin/false
(oder /bin/true
) gesetzt ist, da /bin/false -c [command]
sie nichts bewirkt.
Jetzt kann der Client nur über SSH eine Verbindung zu Port 62222 über die Loopback-Adresse des Servers herstellen (die öffentliche IP-Adresse wird nicht überwacht).
Das Deaktivieren AllowTcpForwarding
würde auch die Verwendung von verbieten -R
und somit die Verwendung eines solchen eingeschränkten Kontos zum Weiterleiten eines einzelnen Ports verhindern. PermitOpen localhost:62222
Es wird davon ausgegangen, dass der Port 62222 auf dem Server nie verwendet wird, da der Client eine Verbindung herstellen und diese auch überwachen kann.
Wenn die systemweite Konfiguration die TCP-Weiterleitung zulässt und die kennwortbasierte Authentifizierung deaktiviert ist, können Sie auch die Einstellungen für einzelne Schlüssel verwenden. Bearbeiten ~/.ssh/authorized_keys
und fügen Sie die nächsten Optionen vor dem ssh-
(mit einem Leerzeichen zwischen den Optionen und ssh-
) hinzu:
command="echo 'This account can only be used for [reason]'",no-agent-forwarding,no-X11-forwarding,permitopen="localhost:62222"
Überprüfen
Um sicherzustellen, dass es wie erwartet funktioniert, müssen einige Testfälle ausgeführt werden. In den folgenden Befehlen host
sollte durch das tatsächliche Login ersetzt werden, wenn es nicht eingestellt ist ~/.ssh/config
. Hinter dem Befehl wird ein Befehl angezeigt, der entweder auf dem Client oder auf dem Server ausgeführt werden soll (wie angegeben).
# connection closed:
ssh host
# connection closed (/bin/date is not executed):
ssh host /bin/date
# administratively prohibited (2x):
ssh host -N -D 62222 # client: curl -I --socks5 localhost:62222 example.com
ssh host -N -L 8080:example.com:80 # client: curl -I localhost:8080
sftp host
# should be possible because the client should forward his SSH server
ssh host -N -R 8080:example.com:80 # server: curl -I localhost:8080
# This works, it forwards the client SSH to the server
ssh host -N -R 62222:localhost:22
# unfortunately, the client can listen on that port too. Not a big issue
ssh host -N -L 1234:localhost:62222
Fazit
Checkliste: Der SSH-Benutzer sollte nicht in der Lage sein:
- Shell-Befehle ausführen - fertig
- auf Dateien zugreifen oder Dateien auf den Server hochladen - fertig
- benutze den Server als Proxy (zB Webproxy) - fertig
- Zugriff auf lokale Dienste, die ansonsten aufgrund einer Firewall nicht öffentlich zugänglich waren - teilweise kann der Client nicht auf andere Ports als 62222 zugreifen, sondern kann den Port 62222 auf dem Server überwachen und eine Verbindung herstellen
- Server beenden - erledigt
(Beachten Sie, dass diese Überprüfungen auf den SSH-Server beschränkt sind. Wenn auf dem Computer ein anderer anfälliger Dienst vorhanden ist, kann ein möglicher Angreifer Befehle ausführen, den Server beenden usw.)