su — Benutzer in einer laufenden Sitzung wechseln

Praxis-Guide zu su: Identität in einer laufenden Shell wechseln, Login-Shell mit su -, Befehle als anderer Nutzer ausführen und der Unterschied zu sudo.

su (substitute user) wechselt mitten in einer laufenden Sitzung die Benutzeridentität – ohne dich ab- und neu anzumelden. Ohne Argument wirst du zu root, mit su - <user> schlüpfst du komplett in die Umgebung eines anderen Kontos. Anders als sudo verlangt su das Passwort des Zielnutzers, nicht dein eigenes. Dieser Guide zeigt dir die Login-Shell, das Ausführen einzelner Befehle und warum sudo auf modernen Systemen oft die bessere, auditierbare Wahl ist.

Grundlegende Verwendung

su — Wechselt zu root. Fragt nach dem root-Passwort. Ändert weder Arbeitsverzeichnis noch Umgebung.

su

su - — Wechselt zu root mit vollwertiger Login-Shell. Lädt die Umgebung von root (.profile, .bashrc). Gegenüber dem reinen 'su' empfohlen.

su -

su <user> — Wechselt zu einem bestimmten Benutzer. Fragt nach dessen Passwort.

su deploy

su - <user> — Wechselt zu einem bestimmten Benutzer mit vollwertiger Login-Shell. Wechselt ins Home-Verzeichnis des Ziels und lädt dessen Umgebung.

su - www-data

su -l <user> — Identisch zu 'su - '. Das Flag -l fordert eine Login-Shell an.

su -l postgres

Befehle ausführen ohne Shell-Wechsel

su -c '<command>' <user> — Führt einen einzelnen Befehl als anderer Benutzer aus, ohne eine interaktive Shell zu öffnen.

su -c 'whoami' deploy

su - -c '<command>' — Führt einen einzelnen Befehl als root mit Login-Umgebung aus.

su - -c 'systemctl restart nginx'

su -s /bin/bash <user> — Wechselt zu einem Benutzer mit einer bestimmten Shell, auch wenn dessen Login-Shell eine andere ist (z. B. /sbin/nologin).

su -s /bin/bash www-data

su -s /bin/bash -c '<command>' <user> — Führt einen Befehl als Systembenutzer aus, der keine interaktive Login-Shell hat.

su -s /bin/bash -c 'php artisan queue:work' www-data

Umgebung steuern

su (ohne -) — Behält die Umgebungsvariablen des aktuellen Benutzers (PATH, HOME usw.). Nur die Benutzeridentität ändert sich.

su root

su - (mit -) — Erzeugt eine frische Login-Umgebung für den Zielbenutzer. HOME, PATH, SHELL und USER werden auf dessen Werte gesetzt.

su - root

su -m <user> — Identisch zu -p. Behält beim Wechsel die aktuelle Umgebung bei.

su -m deploy

su -p <user> — Behält beim Wechsel die aktuelle Umgebung bei (PATH, HOME usw.).

su -p deploy

su vs. sudo

su - root — Verlangt das root-Passwort. Öffnet eine vollwertige root-Login-Shell.

su - root

sudo -i — Verlangt das Passwort des aktuellen Benutzers. Öffnet eine vollwertige root-Login-Shell. Auf modernen Systemen die bevorzugte Variante.

sudo -i

sudo su - — Wird root über sudo, ohne das root-Passwort zu kennen. Übliches Muster, wenn der root-Login deaktiviert ist.

sudo su -

sudo -u <user> -s — Öffnet eine Shell als anderer Benutzer über sudo (ohne dessen Passwort zu kennen).

sudo -u www-data -s

Optionen & Flags

su --help — Zeigt die Hilfe und die verfügbaren Optionen.

su --help

su -w VAR <user> — Erlaubt gezielt einzelne Umgebungsvariablen, die beim Wechsel erhalten bleiben (util-linux su).

su -w TERM,COLORTERM deploy

exit — Beendet die gewechselte Benutzersitzung und kehrt zum vorherigen Benutzer zurück.

exit

Ctrl+D — Sendet EOF, um die gewechselte Benutzer-Shell zu beenden. Gleichbedeutend mit 'exit'.

Ctrl+D

Fazit

Der wichtigste Unterschied steckt im Bindestrich: su - startet eine echte Login-Shell und lädt die komplette Zielumgebung (HOME, PATH, SHELL), während su <user> nur die Identität tauscht und deine aktuelle Umgebung behält – das führt sonst zu überraschenden Pfad- und Konfigurationsproblemen. Für einzelne Aufgaben reicht su -c '<cmd>', und mit su -s /bin/bash kommst du auch in Systemkonten wie www-data, deren Login-Shell auf /sbin/nologin steht. Sicherheitsentscheidend ist: su verlangt das Passwort des Zielnutzers (bei root also das root-Passwort), sudo dagegen dein eigenes. Deshalb ist sudo auf modernen Systemen meist die bessere Wahl – feingranular pro Befehl autorisierbar, vollständig auditierbar, und der direkte root-Login bleibt mit einem gesperrten Passwort (!) zugunsten von sudo deaktiviert. Geh mit beiden bewusst um: Jeder Wechsel ist eine Privilegien-Eskalation.

Verwandte Kommandos

  • sudo – einzelne Befehle mit erhöhten Rechten ausführen, mit eigenem Passwort und Audit-Log
  • id – aktuelle Benutzer- und Gruppen-IDs anzeigen, etwa zur Kontrolle nach einem Wechsel
  • useradd – Benutzerkonten anlegen, zu denen du anschließend wechseln kannst