# sudo — Befehle mit Root-Rechten ausführen

> Praxis-Guide zu sudo: Befehle als root oder anderer Nutzer ausführen, Shells öffnen, Timestamp steuern und sudoers sicher per visudo konfigurieren.

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

<!-- PROSE:intro -->
sudo („superuser do") führt einzelne Befehle mit erhöhten Rechten aus – meist als root – ohne dass du dich dauerhaft als root anmeldest. Wer was darf, regelt die Datei `/etc/sudoers`, und jeder Aufruf landet im Log: Das macht sudo nachvollziehbar und damit deutlich sicherer als ein offenes root-Login per `su`. Dieser Guide zeigt dir die wichtigsten Aufrufe vom Alltagsbefehl bis zur Rechtevergabe. Eine Warnung vorweg: Regeln wie `NOPASSWD: ALL` machen ein Konto faktisch zu passwortlosem root – vergib Rechte sparsam und bearbeite sudoers ausschließlich mit `visudo`.
<!-- PROSE:intro:end -->

## Grundlegende Verwendung

`sudo <command>` — Führt einen Befehl als root aus. Fragt nach dem Passwort des aktuellen Nutzers.

```bash
sudo apt update
```

`sudo -u <user> <command>` — Führt einen Befehl als bestimmter Nutzer statt als root aus.

```bash
sudo -u www-data php artisan migrate
```

`sudo -g <group> <command>` — Führt einen Befehl mit einer bestimmten primären Gruppe aus.

```bash
sudo -g docker docker ps
```

`sudo !!` — Führt den vorherigen Befehl erneut mit sudo aus (Bash-History-Expansion).

```bash
sudo !!
```

## Shell & Umgebung

`sudo -i` — Startet eine Login-Shell als root. Lädt root's Umgebung (.profile, .bashrc usw.).

```bash
sudo -i
```

`sudo -s` — Startet eine Shell als root mit der Shell des aktuellen Nutzers. Lädt root's Umgebung nicht.

```bash
sudo -s
```

`sudo su -` — Wechselt mit voller Login-Shell zu root. Äquivalent zu „sudo -i".

```bash
sudo su -
```

`sudo -E <command>` — Behält die Umgebungsvariablen des aktuellen Nutzers beim Ausführen des Befehls bei.

```bash
sudo -E env | grep PATH
```

`sudo env VAR=value <command>` — Übergibt bestimmte Umgebungsvariablen an den als root ausgeführten Befehl.

```bash
sudo env RAILS_ENV=production rails s
```

## Sitzungsverwaltung

`sudo -v` — Validiert (erneuert) den sudo-Timestamp, ohne einen Befehl auszuführen. Verlängert die Sitzung.

```bash
sudo -v
```

`sudo -k` — Macht den sudo-Timestamp sofort ungültig. Das nächste sudo verlangt wieder ein Passwort.

```bash
sudo -k
```

`sudo -K` — Entfernt den sudo-Timestamp vollständig (stärker als -k).

```bash
sudo -K
```

## Rechte auflisten & prüfen

`sudo -l` — Listet die Befehle auf, die der aktuelle Nutzer per sudo ausführen darf.

```bash
sudo -l
```

`sudo -l -U <user>` — Listet die sudo-Rechte eines bestimmten Nutzers auf (erfordert root).

```bash
sudo -l -U deploy
```

`sudo -n <command>` — Nicht-interaktiver Modus. Führt den Befehl ohne Passwortabfrage aus. Schlägt fehl, wenn ein Passwort nötig ist.

```bash
sudo -n systemctl reload nginx
```

## sudoers-Konfiguration

`visudo` — Bearbeitet /etc/sudoers sicher mit Syntaxprüfung. Immer visudo nutzen, niemals direkt editieren.

```bash
sudo visudo
```

`visudo -f /etc/sudoers.d/<file>` — Bearbeitet eine bestimmte Drop-in-sudoers-Datei. Bevorzugter Weg, um eigene Regeln hinzuzufügen.

```bash
sudo visudo -f /etc/sudoers.d/deploy
```

`<user> ALL=(ALL:ALL) ALL` — Gewährt einem Nutzer vollen sudo-Zugriff. Per visudo in sudoers einfügen.

```bash
jpk ALL=(ALL:ALL) ALL
```

`<user> ALL=(ALL) NOPASSWD: ALL` — Gewährt vollen sudo-Zugriff ohne Passwortabfrage. Mit Vorsicht einsetzen.

```bash
deploy ALL=(ALL) NOPASSWD: ALL
```

`<user> ALL=(ALL) NOPASSWD: /bin/systemctl reload nginx` — Erlaubt einen einzelnen Befehl ohne Passwort. Prinzip der minimalen Rechte.

```bash
deploy ALL=(ALL) NOPASSWD: /bin/systemctl reload nginx
```

`%<group> ALL=(ALL:ALL) ALL` — Gewährt allen Mitgliedern einer Gruppe vollen sudo-Zugriff. Das %-Präfix kennzeichnet eine Gruppe.

```bash
%sudo ALL=(ALL:ALL) ALL
```

## Optionen & Schalter

`sudo -H <command>` — Setzt HOME auf das Home-Verzeichnis des Zielnutzers (standardmäßig root).

```bash
sudo -H pip install package
```

`sudo -p '<prompt>' <command>` — Verwendet eine eigene Passwort-Eingabeaufforderung.

```bash
sudo -p 'Enter your password: ' apt upgrade
```

`sudo -- <command>` — Beendet die Verarbeitung von sudo-Optionen. Nützlich, wenn der Befehl mit einem Bindestrich beginnt.

```bash
sudo -- -mycommand
```

`sudo -b <command>` — Führt den Befehl im Hintergrund aus.

```bash
sudo -b rsync -av /src/ /dst/
```

<!-- PROSE:outro -->
## Fazit

sudo ist das Standardwerkzeug, um gezielt einzelne Aktionen mit Root-Rechten auszuführen, statt dauerhaft als root zu arbeiten – für den Alltag reichen meist `sudo <befehl>`, eine bei Bedarf geöffnete Root-Shell (`sudo -i`/`-s`) und der Blick auf die eigenen Rechte mit `sudo -l`. Drei Dinge solltest du verinnerlichen: Bearbeite sudoers **immer** mit `visudo` (oder `visudo -f` für Drop-ins unter `/etc/sudoers.d/`) – ein Syntaxfehler in `/etc/sudoers` kann sudo unbrauchbar machen und dich aus deinem eigenen System aussperren. Vergib Rechte nach dem Prinzip der minimalen Rechte: ein konkreter Befehlspfad statt `ALL`, denn `NOPASSWD: ALL` verwandelt ein Konto in passwortloses root und untergräbt den Schutz komplett. Und nutze den Vorteil gegenüber `su`: Jeder sudo-Aufruf ist auditierbar und landet im Log.

## Weiterführende Links

- [ubuntuusers-Wiki: sudo](https://wiki.ubuntuusers.de/sudo/) – ausführliche deutschsprachige Einführung in sudo und die sudoers-Konfiguration
- [Debian-Wiki: sudo](https://wiki.debian.org/sudo) – Hinweise zur Einrichtung und Nutzung von sudo unter Debian
<!-- PROSE:outro:end -->

## Verwandte Kommandos

- [su](https://www.jpkc.com/db/cheatsheets/shell-system/su/) – zu einem anderen Nutzer wechseln, inklusive vollständigem root-Login
- [id](https://www.jpkc.com/db/cheatsheets/shell-system/id/) – eigene oder fremde Nutzer-, Gruppen- und Rechte-IDs anzeigen
- [useradd](https://www.jpkc.com/db/cheatsheets/shell-system/useradd/) – neue Benutzerkonten anlegen und konfigurieren

