linux-security security shell rbash restriction hardening administration

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:

  1. Kein cd (Change Directory).
  2. Kein Ändern von $PATH, $SHELL oder $ENV.
  3. Kein Ausführen von Programmen mit / im Namen.
  4. 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:

  1. Erlauben Sie niemals Editoren oder Pager (less, more).
  2. Nutzen Sie spezialisierte restricted-Versionen (z.B. rvim).
  3. 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 rbash fü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)