Wenn ich eine Datei erstelle und dann ihre Berechtigungen auf 444
ändere (schreibgeschützt), wie kommt es zu rm
kann es entfernen?
Wenn ich das mache:
echo test > test.txt
chmod 444 test.txt
rm test.txt
…rm
fragt, ob ich die schreibgeschützte Datei test.txt
entfernen möchte . Ich hätte erwartet, dass rm
kann eine solche Datei nicht entfernen und ich müsste eine chmod +w test.txt
machen Erste. Wenn ich rm -f test.txt
mache dann rm
wird die Datei ohne Nachfrage entfernen, obwohl sie schreibgeschützt ist.
Kann jemand klären? Ich verwende Ubuntu 12.04/bash.
Akzeptierte Antwort:
Alle rm
benötigt eine Schreib- und Ausführungsberechtigung für das übergeordnete Verzeichnis. Die Berechtigungen der Datei selbst sind irrelevant.
Hier ist eine Referenz, die das Berechtigungsmodell klarer erklärt, als ich es je könnte:
Jeder Versuch, auf die Daten einer Datei zuzugreifen, erfordert eine Leseberechtigung. Jeder
Versuch, die Daten einer Datei zu ändern, erfordert eine Schreibberechtigung. Jeder
Versuch, eine Datei (ein Programm oder ein Skript) auszuführen, erfordert die Ausführungsberechtigung
…
Da Verzeichnisse nicht wie normale Dateien verwendet werden, funktionieren die
Berechtigungen etwas (aber nur geringfügig) anders. Ein Versuch,
die Dateien in einem Verzeichnis aufzulisten, erfordert eine Leseberechtigung für das
Verzeichnis, aber nicht für die darin enthaltenen Dateien. Der Versuch, eine Datei zu einem
Verzeichnis hinzuzufügen, eine Datei aus einem Verzeichnis zu löschen oder eine Datei umzubenennen, alle
erfordern eine Schreibberechtigung für das Verzeichnis, aber (vielleicht überraschenderweise)
nicht dafür die Dateien darin. Die Ausführungsberechtigung gilt nicht für
Verzeichnisse (ein Verzeichnis kann nicht gleichzeitig ein Programm sein). Aber dieses
Berechtigungsbit wird für Verzeichnisse zu anderen Zwecken wiederverwendet.
Die Ausführungserlaubnis ist für ein Verzeichnis erforderlich, um in dieses Verzeichnis cd zu können
(das heißt, um ein Verzeichnis zu Ihrem aktuellen Arbeitsverzeichnis zu machen).
Execute wird in einem Verzeichnis benötigt, um auf die „Inode“-Informationen
der darin enthaltenen Dateien zuzugreifen. Sie benötigen dies, um ein Verzeichnis zu durchsuchen, um die
Inodes der darin enthaltenen Dateien zu lesen. Aus diesem Grund wird die Ausführungsberechtigung für
ein Verzeichnis oft stattdessen als Suchberechtigung bezeichnet.