Advanced File Security: SUID, SGID & umask (Artikel 313)
Sicherheitsanalyse von Dateiberechtigungen. Erfahren Sie alles über die Gefahren von SUID-Bit-Missbrauch, die Konfiguration sicherer umask-Standards und das Aufspüren von Sicherheitslücken im Dateisystem.
# File Security Deep Dive: Wenn Berechtigungen zur Waffe werden
TL;DR / Management Summary Ein einfaches
chmodkann über die Sicherheit des gesamten Unternehmens entscheiden. In diesem Modul verlassen wir die Grundlagen und betrachten Dateirechte aus der Angreifer-Sicht. Wir analysieren, wie ein falsch gesetztes SUID-Bit zur vollständigen Systemübernahme (Privilege Escalation) führt, warum eine zu lockere umask Geheimnisse in Log-Files verrät und wie man mit automatisierten Scans “faule Eier” in der Berechtigungsstruktur findet.
# 1. Einführung & Architektur
Die Macht des SUID-Bits.
SUID (Set User ID) ist ein mächtiges Feature: Es erlaubt einem Programm, mit den Rechten des Besitzers zu laufen.
- Legitim:
/usr/bin/passwd(muss/etc/shadowändern). - Gefährlich:
/usr/bin/pythonoder/usr/bin/vimmit SUID-Bit (erlaubt Root-Shell).
# Der Angriffs-Vektor (Mermaid)
graph TD
A[Unprivileged User: bob] --> B[Find SUID Binary: /opt/tools/helper]
B -->|Owned by| C[User: root]
B -->|Exploit / Escape| D[Execute Shell within Binary]
D --> E[Result: Root Shell for bob]
subgraph "Hardening"
F[Search for SUID]
G[Remove unnecessary bits]
H[Secure umask]
end
F/G/H --- B
# 2. Sicherheits-Audit: SUID/SGID finden
Was darf als Root laufen?
Ein Senior Admin scannt sein System regelmäßig nach verdächtigen SUID-Dateien.
# Suchbefehl
# Findet alle Dateien mit SUID-Bit (4000) oder SGID-Bit (2000)
find / -type f \( -perm -4000 -o -perm -2000 \) -ls 2>/dev/null
Wichtig: Jede Datei, die hier auftaucht und nicht zum Standard-OS gehört, muss hinterfragt werden. Ein bash oder python mit SUID-Bit ist ein kapitaler Security-Fehler.
# 3. umask: Sicherheit ab der ersten Sekunde
Default-Rechte einschränken.
Die umask entscheidet, welche Rechte eine neu erstellte Datei nicht bekommt.
| umask | Effekt | Dateirechte | Verzeichnisrechte |
|---|---|---|---|
| 022 (Standard) | Gruppe/Andere dürfen nicht schreiben. | 644 | 755 |
| 027 (Sicher) | Andere dürfen gar nichts. | 640 | 750 |
| 077 (Paranoid) | Nur der Besitzer darf alles. | 600 | 700 |
# Systemweit setzen
Datei: /etc/profile oder /etc/login.defs
UMASK 027
# 4. Day-2 Operations: World-Writeable Files
Das Scheunentor schließen.
Dateien, in die jeder schreiben darf, sind ideale Verstecke für Malware.
# Suche nach ‘World-Writeable’
# Findet Dateien, die für 'Others' beschreibbar sind
find / -type f -perm -o+w -ls 2>/dev/null
Ausnahme: /tmp und /var/tmp – diese müssen beschreibbar sein, sollten aber das Sticky Bit (Artikel 283) haben.
# 5. Troubleshooting & “War Stories”
Wenn die Härtung den Betrieb stört.
# Story 1: “Der Backup-Restore ohne Metadaten”
Symptom: Nach einem Restore läuft das System, aber User können ihre Passwörter nicht mehr ändern (passwd schlägt fehl).
Ursache: Das Backup-Tool hat das SUID-Bit von /usr/bin/passwd nicht mitgesichert oder wiederhergestellt.
Lösung: chmod u+s /usr/bin/passwd. Lerneffekt: Nutzen Sie für Backups immer Tools, die SELinux-Labels und Special-Bits unterstützen (rsync -aX, tar --xattrs).
# Story 2: “Das Log-Geheimnis”
Symptom: Ein unprivilegierter User kann in /var/log/myapp/ Datenbank-Passwörter aus den Logs lesen.
Ursache: Die Applikation wurde mit umask 022 gestartet. Die Logs sind für alle lesbar (644).
Lösung: Starten Sie den Dienst mit einer restriktiven Umask (z.B. via systemd UMask=0027) oder nutzen Sie ACLs (Artikel 314).
# 6. Fazit & Empfehlung
- SUID: Entfernen Sie das SUID-Bit von allen Programmen, die es nicht zwingend brauchen (
chmod u-s). - umask: Setzen Sie in Enterprise-Umgebungen standardmäßig
027. - Automation: Nutzen Sie Tools wie Lynis oder OpenSCAP (Artikel 179), um Berechtigungsfehler automatisch zu finden.
# Anhang: Cheatsheet
| Aufgabe | Befehl |
|---|---|
| SUID setzen | chmod 4755 <file> |
| SGID setzen | chmod 2755 <file> |
| Sticky Bit setzen | chmod 1755 <file> |
| Alle SUID Files | find / -perm /4000 |
| Alle SGID Files | find / -perm /2000 |
| Aktuelle umask | umask |
| Umask symbolisch | umask -S |
| No-Root Mount | mount -o nosuid ... (Sehr sicher!) |