# 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.

Source: https://www.jpkc.com/db/cheatsheets/shell-system/su/

<!-- PROSE:intro -->
`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.
<!-- PROSE:intro:end -->

## Grundlegende Verwendung

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

```bash
su
```

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

```bash
su -
```

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

```bash
su deploy
```

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

```bash
su - www-data
```

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

```bash
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.

```bash
su -c 'whoami' deploy
```

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

```bash
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).

```bash
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.

```bash
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.

```bash
su root
```

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

```bash
su - root
```

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

```bash
su -m deploy
```

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

```bash
su -p deploy
```

## su vs. sudo

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

```bash
su - root
```

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

```bash
sudo -i
```

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

```bash
sudo su -
```

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

```bash
sudo -u www-data -s
```

## Optionen & Flags

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

```bash
su --help
```

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

```bash
su -w TERM,COLORTERM deploy
```

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

```bash
exit
```

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

```bash
Ctrl+D
```

<!-- PROSE:outro -->
## 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.

## Weiterführende Links

- [Wikipedia: su (Unix)](https://de.wikipedia.org/wiki/Su_(Unix)) – Hintergrund zum Kommando und seiner Geschichte
- [ubuntuusers-Wiki: Rootrechte](https://wiki.ubuntuusers.de/sudo/) – deutschsprachige Erläuterung zu su, sudo und Root-Rechten unter Ubuntu
<!-- PROSE:outro:end -->

## Verwandte Kommandos

- [sudo](https://www.jpkc.com/db/cheatsheets/shell-system/sudo/) – einzelne Befehle mit erhöhten Rechten ausführen, mit eigenem Passwort und Audit-Log
- [id](https://www.jpkc.com/db/cheatsheets/shell-system/id/) – aktuelle Benutzer- und Gruppen-IDs anzeigen, etwa zur Kontrolle nach einem Wechsel
- [useradd](https://www.jpkc.com/db/cheatsheets/shell-system/useradd/) – Benutzerkonten anlegen, zu denen du anschließend wechseln kannst

