Sudo Grundlagen
- Was macht sudo
Führt einen Befehl mit den Rechten eines anderen Benutzers aus (Standard: root), basierend auf Berechtigungen in /etc/sudoers.
sudo systemctl restart httpd
- Als anderer Benutzer ausführen
sudo -u benutzername befehl
- Root-Shell öffnen
sudo -i
(lädt die Root-Umgebung, im Gegensatz zu sudo -s, das die aktuelle Shell-Umgebung behält)
- sudoers-Datei sicher bearbeiten
visudo
Niemals direkt mit einem Editor öffnen — visudo prüft die Syntax vor dem Speichern und verhindert, dass man sich aussperrt.
- Benutzer zur sudo-Gruppe hinzufügen (Admin-Rechte vergeben)
Damit ein Benutzer sudo nutzen darf, muss er Mitglied der entsprechenden Gruppe sein. Diese Gruppe ist standardmäßig bereits in /etc/sudoers mit vollen Rechten eingetragen.
usermod -aG wheel benutzername
wheel bei Rocky/RHEL-Systemen, sudo bei Debian/Ubuntu. Der Schalter -a (append) ist entscheidend — ohne ihn werden alle bisherigen Gruppen des Benutzers überschrieben.
- Warum das funktioniert — Analyse der sudoers-Zeile
In /etc/sudoers steht standardmäßig eine Zeile wie:
%wheel ALL=(ALL) ALL
Das ist die erste Frage, die man sich hier stellen sollte: was bedeuten diese Teile eigentlich? Aufgeschlüsselt:
| Teil | Bedeutung |
|---|---|
%wheel |
Gilt für alle Mitglieder der Gruppe wheel (das % markiert eine Gruppe, kein einzelner Benutzer)
|
ALL (1.) |
Gilt auf allen Hosts (relevant bei einer sudoers-Datei, die auf mehrere Maschinen verteilt wird) |
(ALL) |
Darf als jeder beliebige Zielbenutzer ausführen (auch als root) |
ALL (2.) |
Darf jeden beliebigen Befehl ausführen |
Wer der Gruppe wheel beitritt, wird dadurch effektiv zum Admin — ganz ohne eigenen Eintrag in der sudoers-Datei. Bei jedem sudo-Aufruf muss sich der Benutzer aber mit seinem eigenen Passwort authentifizieren. Das ist die Standard-Einstellung auf den meisten Distributionen (Rocky, Debian, Ubuntu) und der empfohlene Ausgangspunkt.
- Variante mit NOPASSWD — und warum das gefährlich ist
Manche Systeme (z. B. Cloud-Images) tragen stattdessen ein:
%wheel ALL=(ALL) NOPASSWD:ALL
Gleiche Struktur, nur mit einem zusätzlichen vierten Teil: NOPASSWD:ALL bedeutet, kein Passwort nötig, für ALLE Befehle. Jedes Gruppenmitglied bekommt damit vollständige Root-Rechte für beliebige Befehle, ganz ohne Passwortabfrage.
Kritischer Punkt: Wird ein solches Konto kompromittiert, ist sofort das ganze System kompromittiert — es gibt keine zweite Hürde. Von dieser Konfiguration wird abgeraten.
- Bessere Alternative
- NOPASSWD nur für ausgewählte Befehle, mit benanntem Alias
Cmnd_Alias SERVICE_MGMT = /usr/bin/systemctl restart httpd, /usr/bin/systemctl restart sshd %wheel ALL=(ALL) ALL %wheel ALL=(ALL) NOPASSWD: SERVICE_MGMT
Hier wird das Prinzip der minimalen Rechtevergabe sichtbar gemacht:
- Zeile 1 definiert einen
Cmnd_Alias— eine benannte Gruppe von Befehlen, die dokumentiert, wofür NOPASSWD überhaupt gilt. - Zeile 2 verlangt für alle Befehle weiterhin ein Passwort (Standardschutz).
- Zeile 3 hebt diese Passwortpflicht gezielt nur für die in
SERVICE_MGMTgelisteten Befehle auf, z. B. für automatisierte Neustarts eines Dienstes.
Der Vorteil gegenüber NOPASSWD:ALL: Selbst bei kompromittiertem Account bleibt der Schaden auf die explizit freigegebenen Befehle begrenzt, und der Cmnd_Alias-Name macht in der Datei selbst dokumentiert sichtbar, welche Ausnahme warum existiert.
- Gruppenmitgliedschaft prüfen
groups benutzername
oder
id benutzername
- Admin-Rechte wieder entziehen
gpasswd -d benutzername wheel
- Eigene Rechte prüfen
sudo -l
- Letzte sudo-Aktionen nachvollziehen
journalctl _COMM=sudo
oder distributionsabhängig:
grep sudo /var/log/auth.log