Restricted Shells: rbash & rzsh (Artikel 329)
Konfiguration und Einsatz von eingeschränkten Shells unter Linux. Erfahren Sie, wie Sie Benutzern gezielten Zugriff auf Befehle gewähren, ohne die Systemsicherheit zu gefährden.
# Restricted Shells: Den User sicher einsperren
TL;DR / Management Summary Manchmal müssen wir Benutzern oder externen Dienstleistern SSH-Zugriff gewähren, wollen aber nicht, dass sie das gesamte System durchsuchen oder beliebige Befehle ausführen können. Restricted Shells (wie rbash) sind die Lösung. Sie verbieten das Ändern des Pfades (
PATH), das Wechseln des Verzeichnisses (cd) und das Ausführen von Befehlen mit Schrägstrichen. In diesem Modul lernen wir, wie wir eine “Sandbox” bauen, in der ein User nur exakt die drei Befehle sieht, die er für seine Arbeit braucht.
# 1. Einführung & Architektur
Die Logik der Beschränkung.
Eine restricted shell ist meist nur ein spezieller Modus der normalen Shell. Wenn Bash als rbash gestartet wird, aktiviert sie folgende Verbote:
- Kein
cd(Change Directory). - Kein Ändern von
$PATH,$SHELLoder$ENV. - Kein Ausführen von Programmen mit
/im Namen. - Keine Redirects (
>,>>).
# Der Sandboxing-Prozess (Mermaid)
graph TD
A[User SSH Login] --> B[Shell: /bin/rbash]
B --> C[Set PATH to /home/user/bin]
subgraph "The Sandbox"
C --> D[Link: /usr/bin/ls]
C --> E[Link: /usr/bin/ping]
end
B --x|Deny| F[Command: /bin/bash]
B --x|Deny| G[Command: cd /etc]
B --> H[Allowed: ls /data]
# 2. Praxis: rbash einrichten
Die kontrollierte Umgebung.
# Schritt 1: Shell zuweisen
sudo useradd -m -s /bin/rbash limited-user
# Schritt 2: Den Pfad (PATH) einsperren
Das ist der wichtigste Schritt. Wir erstellen einen Ordner, der nur die erlaubten Binaries enthält.
sudo mkdir /home/limited-user/bin
# Nur lesbar für den User
sudo chown root:root /home/limited-user/.bash_profile
sudo chmod 755 /home/limited-user/.bash_profile
In /home/limited-user/.bash_profile fixieren wir den Pfad:
PATH=$HOME/bin
export PATH
# Schritt 3: Befehle freischalten (White-Listing)
Erstellen Sie Symlinks für die erlaubten Tools:
sudo ln -s /usr/bin/ls /home/limited-user/bin/
sudo ln -s /usr/bin/top /home/limited-user/bin/
# 3. Day-2 Operations: Escape-Prävention
Die Mauer lückenlos halten.
Gefahr: Wenn Sie einem rbash-User Tools wie vim, less oder man erlauben, kann er aus der Shell ausbrechen! (Befehle wie :!bash in Vim).
Best Practices:
- Erlauben Sie niemals Editoren oder Pager (
less,more). - Nutzen Sie spezialisierte restricted-Versionen (z.B.
rvim). - Prüfen Sie mit GTFOBins, ob ein Tool zum Ausbrechen geeignet ist.
# 4. Troubleshooting & “War Stories”
Wenn der User aus der Box springt.
# Story 1: “Der bash-Aufruf”
Symptom: Ein Admin hat rbash konfiguriert, aber der User kann trotzdem alles tun.
Ursache: Der User hat ein eigenes Skript hochgeladen oder gefunden, das /bin/bash aufruft. Da rbash nur die aktuelle Shell einschränkt, ist die gerufene Sub-Shell wieder voll funktionsfähig.
Lösung: Stellen Sie sicher, dass der User keine Schreibrechte in seinem $PATH hat und keine Compiler (gcc) oder Script-Interpreter (Python/Perl) ausführen darf.
# Story 2: “Das leere Home-Verzeichnis”
Symptom: Der User loggt sich ein und bekommt sofort Connection closed.
Ursache: rbash braucht beim Start Zugriff auf bestimmte Initialisierungsdateien. Wenn der Pfad zu restriktiv ist oder .bashrc Fehler wirft, bricht die Shell ab.
Lösung: Kopieren Sie eine minimale .bash_profile ins Home und setzen Sie die Rechte korrekt (Root-Besitz!), damit der User sie nicht selbst ändern kann.
# 5. Fazit & Empfehlung
- Wahl: Nutzen Sie
rbashfür einfache Aufgaben. - Sicherheit: Für wirklich kritische Isolation nutzen Sie lieber Docker-Container mit einem SSH-Einstiegspunkt oder LXC-Container (Artikel 040).
- Alternative: Schauen Sie sich Shell In A Box oder lshell an, wenn Sie noch feingranularere Regeln (Regex-basiert) brauchen.
# Anhang: Cheatsheet
| Aufgabe | Befehl |
|---|---|
| User mit rbash anlegen | useradd -s /bin/rbash <user> |
| Bestehenden User ändern | usermod -s /bin/rbash <user> |
| Pfad festsetzen | export PATH=$HOME/bin |
| Symlinks erstellen | ln -s /usr/bin/cmd /home/user/bin/ |
| Prüfen ob rbash aktiv | echo $SHELL (sollte /bin/rbash zeigen) |
| Escape Test | !/bin/sh (sollte blockiert werden) |
| Hilfe zu Bash-Modi | man bash (Suche nach RESTRICTED SHELL) |