Frage Warum konnte ich eine Datei löschen, deren Eigentümer root in meinem Home-Verzeichnis ist, ohne root zu sein?


Daher habe ich heute auf meinem Server einige Wartungsarbeiten durchgeführt und festgestellt, dass ich eine Datei löschen konnte, deren Eigentümer root in meinem Home-Verzeichnis ist.

Ich konnte eine Probe reproduzieren:

[cbennett@nova ~/temp]$ ls -al
total 8
drwxrwxr-x.  2 cbennett cbennett 4096 Oct  5 20:59 .
drwxr-xr-x. 22 cbennett cbennett 4096 Oct  5 20:58 ..
-rw-rw-r--.  1 cbennett cbennett    0 Oct  5 20:58 my-own-file
[cbennett@nova ~/temp]$ sudo touch file-owned-by-root
[cbennett@nova ~/temp]$ ls -al
total 8
drwxrwxr-x.  2 cbennett cbennett 4096 Oct  5 21:00 .
drwxr-xr-x. 22 cbennett cbennett 4096 Oct  5 20:58 ..
-rw-r--r--.  1 root     root        0 Oct  5 21:00 file-owned-by-root
-rw-rw-r--.  1 cbennett cbennett    0 Oct  5 20:58 my-own-file
[cbennett@nova ~/temp]$ rm file-owned-by-root
rm: remove write-protected regular empty file ‘file-owned-by-root’? y
[cbennett@nova ~/temp]$ ls -al
total 8
drwxrwxr-x.  2 cbennett cbennett 4096 Oct  5 21:00 .
drwxr-xr-x. 22 cbennett cbennett 4096 Oct  5 20:58 ..
-rw-rw-r--.  1 cbennett cbennett    0 Oct  5 20:58 my-own-file
[cbennett@nova ~/temp]$

Meine Frage ist, wie konnte ich eine Datei löschen, die von Root gehört und Berechtigungen hat -rw-r--r--, während ich nicht root bin?


38
2017-10-05 21:07


Ursprung


Sie können Entfernen Sie den Eintrag in dem Verzeichnis, das auf die Datei verweist weil Sie Schreibzugriff auf das Verzeichnis haben. Sie können die Datei nicht unbedingt löschen. Die Datei hat möglicherweise eine andere feste Verbindung woanders. - immibis
Lustige Erweiterung: Sie können die Datei auch umbenennen oder feste Verknüpfungen erstellen. - peterh
Bitte überdenken Sie Ihre Entscheidung für die akzeptierte Antwort, da die aktuelle irreführend ist: Sie sind nicht erlaubt zu tun Sie etwas dazu und den Inhalt darin basierend auf den Berechtigungen des Verzeichnisses. - Cthulhu
@Cthulhu Fertig! Vielen Dank für alle Kommentare zu diesem Q & A, auf jeden Fall viele nützliche Informationen hier! - Carl Bennett


Antworten:


Die Berechtigungen, Inhalt und alle Attribute sind Teil des Inode. Der Name steht im Verzeichniseintrag. Die Berechtigungen werden nicht rekursiv übernommen.

Wenn Sie eine Datei löschen, entfernen Sie intern nur einen festen Link vom Verzeichniseintrag zum Inode. Wenn alle Hardlinks entfernt sind und der Inode nicht verwendet wird, wird das Dateisystem den Speicherplatz zurückfordern. Sie benötigen nur Schreibrechte für den Ordner, unabhängig davon, welche Berechtigungen für die Datei festgelegt sind (mit Ausnahme der Berechtigung für unveränderliche Ext.). Gleiches gilt für einen leeren Ordner.

Wenn Sie einen Ordner löschen, der nicht leer ist, benötigen Sie Schreibrechte für den zu löschenden Ordner und den übergeordneten Ordner.


32
2017-10-05 22:30



Also sind die Berechtigungen auf dem Inode oder die Berechtigungen sind auf dem Link zum Inode, und ich entferne gerade diesen Link (und somit wird der einzige Link zu ihm entfernt, so dass der Inode aufhört zu existieren)? - Carl Bennett
Berechtigungen sind auf dem Inode. Dies lässt sich leicht überprüfen, indem Sie eine feste Verknüpfung zu einer Datei erstellen, die Berechtigungen dafür ändern und dann die Berechtigungen für das Original überprüfen. - Wouter Verhelst
aber sagen wir, es gibt ein Verzeichnis und eine Datei, die beide zu root gehören, wobei sich das Verzeichnis in einem Verzeichnis befindet, das dem Benutzer gehört. Du könntest sie dann nicht entfernen, oder? - njzk2
Es ist ein Attribut, das für ext2, ext3 und ext4 spezifisch ist. Beispiel: sudo touch test_file;sudo chattr +i test_file;rm -f test_file Sehen: man chattr - Mircea Vutcovici
Das Attribut "Immutable" schützt eine Datei vor Änderungen, selbst wenn sie von root stammen. - Mircea Vutcovici


Wenn Sie Eigentümer des Verzeichnisses sind, dürfen Sie alles und den darin enthaltenen Inhalt basierend auf den Berechtigungen des Verzeichnisses ausführen. Obwohl Sie die Datei nicht besitzen, konnten Sie sie dennoch löschen, da Sie Lese- / Schreibberechtigung für das Verzeichnis hatten, in dem sich die Datei befand.


19
2017-10-05 21:10



Nicht genau. Zum Beispiel wäre OP nicht in der Lage, diese root-eigene Datei zu ändern. Die Sache ist, eine Datei löschen ist nicht betrachtete eine Operation in der Datei, aber eher im Verzeichnis (Entfernen des Zeigers in eine Datei) und deshalb waren Berechtigungen für das Verzeichnis wichtig. - Cthulhu
@Cthulhu, also könnten Sie eine root-eigene Datei löschen und danach eine neue mit demselben Namen erstellen? - KDEx
@Morgoroth könntest du ja, aber das wäre nicht mehr die selbe Datei. Für ein anderes (vielleicht offensichtlicheres) Beispiel wäre es nicht möglich, die Datei in Ihrem Verzeichnis zu lesen, wenn sie zum Stamm gehört und nur ihr Besitzer sie lesen könnte. - Cthulhu
@inetknght Dies sollte geklärt werden. Ich verstehe, dass Sie versuchen, die Dateien selbst als Entitäten zu manipulieren, aber das ist nicht klar. Sie können den Inhalt beispielsweise nicht ändern. Und Sie erwähnen keine Attribute, die Verzeichnisberechtigungen trumpfen können. - Mike S
@ captcha Das ist weil vi speichert die Datei zuerst in einer temporären Kopie, löscht dann die Originaldatei und benennt die Kopie in das Original um (oder etwas Ähnliches). - Cthulhu