Sudo Mastery: Privilege Escalation (Artikel 284)
Beherrschung des sudo-Befehls zur sicheren Ausführung von Administrationsaufgaben. Erfahren Sie alles über die sudoers-Konfiguration, granulare Rechtevergabe und Best-Practices zur Systemsicherheit.
# Sudo Mastery: Macht mit Verantwortung
TL;DR / Management Summary Wer unter Linux als Root arbeitet, spielt mit dem Feuer. Der Befehl sudo (substitute user do) erlaubt es uns, administrative Aufgaben mit normalen Benutzer-Accounts durchzuführen. Ein Senior Admin nutzt
sudo, um exakt zu definieren, wer welche Befehle ausführen darf – ohne das Root-Passwort preiszugeben. In diesem Modul lernen wir das Härten der sudoers Datei und die Vermeidung von Sicherheitsrisiken bei der Rechte-Eskalation.
# 1. Einführung & Architektur
Warum sudo statt su?
- su (substitute user): Wechselt komplett zum Root-User. Erfordert das Root-Passwort. Keine Kontrolle, was der User danach tut.
- sudo: Führt nur einen Befehl mit Root-Rechten aus. Erfordert das Passwort des Benutzers. Erlaubt detailliertes Logging und granulare Regeln.
# Der Privileg-Fluss (Mermaid)
graph LR
A[Standard User: admin] -->|Command: sudo systemctl restart nginx| B{Sudo Check}
B -->|Check 1| C[Is User in Group wheel/sudo?]
B -->|Check 2| D[Is Password correct?]
B -->|Check 3| E[Is command allowed in sudoers?]
C/D/E -->|Success| F[Execute as Root]
C/D/E -->|Fail| G[Log Incident & Deny]
F --> H[Log: /var/log/secure]
# 2. Konfiguration mit visudo
Der einzige sichere Weg.
Editieren Sie die Datei /etc/sudoers niemals direkt mit einem normalen Editor! Nutzen Sie immer visudo. Es prüft die Syntax vor dem Speichern und verhindert, dass Sie sich aus dem System aussperren.
# Beispiel: Granulare Berechtigungen
Anstatt einem User “alles” zu geben, erlauben wir nur Nginx-Restarts:
# User 'webadmin' darf Nginx ohne Passwort neustarten
webadmin ALL=(ALL) NOPASSWD: /usr/bin/systemctl restart nginx
# 3. Best Practices für Enterprise-Umgebungen
Sicherheit durch Einschränkung.
- Defaults: Setzen Sie Timeouts für Sudo-Sitzungen.
Defaults timestamp_timeout=5(Sudo fragt nach 5 Minuten Inaktivität erneut). - No Aliases: Vermeiden Sie komplexe User-Aliase in Sudoers bei großen Flotten; nutzen Sie stattdessen Gruppen-Zuweisungen (z.B.
%wheel). - Logging: Stellen Sie sicher, dass jede Sudo-Aktion in das System-Log fließt (Standard in RHEL/SLES).
# 4. Day-2 Operations: Sudo-Session Management
Komfort vs. Sicherheit.
# Das Passwort-Timeout zurücksetzen
Wenn Sie eine Sudo-Sitzung sofort beenden wollen (z.B. bevor Sie den Platz verlassen):
sudo -k
# Als anderer User (nicht Root) agieren
Sudo kann auch genutzt werden, um zu einem anderen Service-Account zu wechseln:
sudo -u www-data php /var/www/html/cron.php
# 5. Troubleshooting & “War Stories”
Wenn Sudo den Dienst verweigert.
# Story 1: “Der Syntax-Fehler in Sudoers”
Symptom: Ein Admin hat die /etc/sudoers manuell editiert und einen Tippfehler gemacht. Jetzt kann niemand mehr sudo oder visudo ausführen. Der Server ist administrativ “tot”.
Ursache: Fehlende Syntax-Prüfung.
Lösung: Booten Sie in den Single-User Mode (Artikel 012) oder nutzen Sie die Proxmox-Konsole, loggen Sie sich als Root ein und fixen Sie die Datei. Lektion: Nutzen Sie IMMER visudo.
# Story 2: “Die interaktive Falle”
Symptom: Ein Skript mit sudo bricht in einem Cronjob ab.
Ursache: sudo versucht, nach einem Passwort zu fragen, hat aber kein Terminal (tty).
Lösung: Nutzen Sie das Flag -n (non-interactive) in Skripten. Sudo bricht dann sofort ab, wenn ein Passwort nötig wäre, statt zu hängen. Oder nutzen Sie NOPASSWD für die spezifischen Skript-Befehle.
# 6. Fazit & Empfehlung
- Sicherheit: Deaktivieren Sie den direkten Root-Login via SSH komplett.
- Audit: Überwachen Sie
/var/log/secure(RHEL) oder/var/log/auth.log(Debian) auf Fehlversuche bei Sudo. - Wahl: Nutzen Sie Gruppen für Sudo-Berechtigungen, um das Management via LDAP/AD (Artikel 136) zu vereinfachen.
# Anhang: Cheatsheet
| Aufgabe | Befehl |
|---|---|
| Config editieren | sudo visudo |
| Eigene Sudo-Rechte prüfen | sudo -l |
| Sudo Session löschen | sudo -k |
| Als User X ausführen | sudo -u <user> <cmd> |
| Root-Shell (mit Environment) | sudo -i |
| Root-Shell (ohne Env) | sudo -s |
| Befehl im Hintergrund | sudo -b <cmd> |
| Hilfe anzeigen | sudo --help |
| Letzter Befehl mit Sudo | sudo !! |