Warum konnte ich eine Datei von root in meinem Ausgangsverzeichnis löschen, ohne root zu sein?

40

Daher habe ich heute früher Wartungsarbeiten an meinem Server durchgeführt und festgestellt, dass ich eine Datei von root in meinem Ausgangsverzeichnis löschen konnte.

Ich konnte ein Beispiel 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 root gehört und Berechtigungen hat -rw-r--r--, während ich nicht root bin?

Carl Bennett
quelle
6
Sie können den Eintrag im Verzeichnis entfernen, der auf die Datei verweist, da Sie Schreibzugriff auf das Verzeichnis haben. Sie können die Datei nicht unbedingt löschen. Die Datei verfügt möglicherweise über einen anderen festen Link an einer anderen Stelle.
user253751
2
Lustige Erweiterung: Sie können die Datei auch umbenennen oder feste Verknüpfungen erstellen.
Peterh sagt wieder einzusetzen Monica
11
Bitte überdenken Sie Ihre Wahl für die akzeptierte Antwort, weil aktuelle geradezu irreführend ist: Sie sind nicht zu dürfen nichts tun , um es den Inhalt in sich basierend auf den Verzeichnisberechtigungen ant .
Cthulhu
@Cthulhu Fertig! Vielen Dank an alle für die Kommentare zu dieser Frage und viele nützliche Informationen hier!
Carl Bennett

Antworten:

34

Die Berechtigungen, der Inhalt und alle Attribute sind Teil des Inodes. Der Name befindet sich im Verzeichniseintrag. Die Berechtigungen werden nicht rekursiv vererbt (es sei denn, Sie verwenden die Standardeinstellung in Posix-ACLs).

Wenn Sie eine Datei löschen, entfernen Sie intern nur eine feste Verknüpfung vom Verzeichniseintrag zum Inode. Wenn alle Hardlinks entfernt wurden und der Inode nicht verwendet wird, gewinnt das Dateisystem den Speicherplatz zurück. Sie benötigen nur eine Schreibberechtigung für den Ordner, unabhängig davon, welche Berechtigungen für die Datei festgelegt wurden (mit Ausnahme der unveränderlichen ext-Berechtigung). 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 dessen übergeordneten Ordner.

Mircea Vutcovici
quelle
1
Die Berechtigungen befinden sich also auf dem Inode oder die Berechtigungen befinden sich auf dem Link zum Inode, und ich entferne nur diesen Link (und somit wird der einzige Link zu ihm entfernt, sodass der Inode nicht mehr existiert)?
Carl Bennett
3
Berechtigungen befinden sich in der Inode. Dies kann auf einfache Weise überprüft werden, indem ein fester Link zu einer Datei erstellt, die Berechtigungen für diese Datei geändert und anschließend die Berechtigungen für das Original überprüft werden.
Wouter Verhelst
Nehmen wir aber an, es gibt ein Verzeichnis und eine Datei, die beide zu root gehören, wobei sich das Verzeichnis in einem Verzeichnis befindet, dessen Eigentümer der Benutzer ist. Sie könnten sie dann nicht entfernen, oder?
njzk2
1
Es ist ein spezielles Attribut für ext2, ext3 und ext4. Beispiel: sudo touch test_file;sudo chattr +i test_file;rm -f test_fileSiehe:man chattr
Mircea Vutcovici
1
Das unveränderliche Attribut schützt eine Datei vor Änderungen, auch gegenüber dem Stammordner.
Mircea Vutcovici
19

Wenn Sie Eigentümer des Verzeichnisses sind, dürfen Sie auf der Grundlage der Berechtigungen des Verzeichnisses alles daran und dessen Inhalt ändern. Obwohl Sie nicht Eigentümer der Datei waren, konnten Sie sie dennoch löschen, da Sie Lese- / Schreibberechtigung für das Verzeichnis hatten, in dem sich die Datei befand.

inetknght
quelle
46
Nicht genau. Beispielsweise kann OP diese Root-Datei nicht ändern. Das Löschen einer Datei wird nicht als Vorgang für eine Datei betrachtet, sondern für ein Verzeichnis (Entfernen des Zeigers auf eine Datei). Deshalb waren die Berechtigungen für das Verzeichnis von Bedeutung.
Cthulhu
1
@Cthulhu Könnten Sie also eine Root-Datei löschen und anschließend eine neue, geänderte Datei mit demselben Namen erstellen?
KDEx
3
@Morgoroth ja du könntest, aber das wäre nicht mehr die gleiche Datei. Bei einem anderen (vielleicht offensichtlicheren) Beispiel könnten Sie die Datei in Ihrem Verzeichnis nicht lesen, wenn sie zum Stammverzeichnis gehört und nur der Eigentümer 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 beispielsweise den Inhalt nicht ändern. Und Sie erwähnen keine Attribute, die möglicherweise die Verzeichnisberechtigungen übersteigen.
Mike S
1
@captcha Das liegt daran, dass die viDatei zuerst in einer temporären Kopie gespeichert wird, dann die Originaldatei gelöscht und die Kopie in das Original (oder so ähnlich) umbenannt wird.
Cthulhu