Kann man eine Datei löschen, für die man keine Schreibrechte hat?
Kurzantwort
Ja, das kann möglich sein. Das Löschen einer Datei (unlink) ändert das übergeordnete Verzeichnis, daher prüft Linux Schreib- (und Such-)Rechte auf das Verzeichnis, nicht auf die Datei. Eine schreibgeschützte Datei in einem beschreibbaren Verzeichnis lässt sich löschen. In geteilten Verzeichnissen wie /tmp ändert das Sticky-Bit die Regel: Nur der Dateieigentümer, der Verzeichniseigentümer oder ein privilegierter Prozess dürfen Einträge löschen oder umbenennen.
Viele Kandidaten antworten instinktiv „nein": Wer eine Datei nicht beschreiben kann, kann sie nicht löschen. Unter Linux stimmt das nicht, und der Grund erklärt, wie Dateisysteme funktionieren.
Ein Dateiname ist ein Verzeichniseintrag
Löschen ist der Systemaufruf unlink(2), der einen Namen aus einem Verzeichnis entfernt. Entscheidend ist daher die Berechtigung am Verzeichnis. Die Man-Page nennt als Fehlerfall, dass der Schreibzugriff auf das Verzeichnis, das den Pfad enthält, für den Prozess nicht erlaubt ist. Die Modus-Bits der Datei selbst (auch „nur lesen") entscheiden nicht über das Löschen.
Das Sticky-Bit schränkt das in geteilten Verzeichnissen ein
Verzeichnisse wie /tmp sind für alle beschreibbar; ohne Schutz könnte jeder fremde Dateien löschen. Das Sticky-Bit (S_ISVTX) verhindert das: Laut inode(7) darf eine Datei in einem solchen Verzeichnis nur vom Dateieigentümer, vom Verzeichniseigentümer oder von einem privilegierten Prozess umbenannt oder gelöscht werden. Erkennbar am abschließenden t in ls -ld /tmp (drwxrwxrwt).
Warum das für Security relevant ist
- Ein beschreibbares Verzeichnis mit einem root-eigenen Skript oder einer Konfiguration erlaubt einem unprivilegierten Nutzer, es zu ersetzen (löschen, eigene Version anlegen), auch ohne die Datei bearbeiten zu können. Das taucht in Privilege-Escalation-Reviews auf.
- Hardening-Checklisten markieren deshalb weltbeschreibbare Verzeichnisse ohne Sticky-Bit.
Warum die Distraktoren verlockend sind
„Schreibrecht auf die Datei" ist das intuitive, aber falsche Modell. „Nur root" ignoriert, dass jeder eigene Dateien löscht. „Nur Eigentum" vermischt die Sticky-Bit-Regel mit der allgemeinen Regel.
Was Interviewer hören wollen
„Löschen ist eine Verzeichnisoperation, also entscheidet das Schreibrecht auf das Verzeichnis, und das Sticky-Bit schränkt es in geteilten Verzeichnissen ein." Ein Privesc-Beispiel gibt Extrapunkte.
Wahrscheinliche Anschlussfragen
- Was bewirkt das Sticky-Bit auf /tmp und woran erkennt man es in ls -l?
- Was bedeutet das für einen Angreifer, der in ein Verzeichnis mit einem root-eigenen Skript schreiben darf?
- Welches Verzeichnisrecht braucht man zum Auflisten von Namen und welches zum Öffnen von Dateien?