Nachdem ich jahrelang mit Linux gearbeitet hatte und etwas Freizeit hatte, beschloss ich, einige Grundlagen zu überdenken. Also las ich das Zeug über Berechtigungen (ohne den Quellcode zu überprüfen) und seine Sonderfälle für Ordner erneut und fand eine neue (zumindest für mich ...) Denkweise über Ordnerberechtigungen (für einen bestimmten Benutzer /). Gruppe / andere): Ich stelle mir einen Ordner als Tabelle mit zwei Spalten vor:
filename | inode
foo | 111
bar | 222
Die Leseberechtigung bedeutet, dass Sie die linke Spalte der Tabelle lesen (und auflisten) können, die Schreibberechtigung dem Hinzufügen und Entfernen von Einträgen zur Tabelle entspricht und die Ausführungsberechtigung dem Übersetzen vom Dateinamen zum Inode entspricht. dh Sie können auf den Inhalt des Ordners zugreifen .
Ich habe einige Experimente durchgeführt, und die Ergebnisse stimmen alle mit meiner "Weltanschauung" überein, aber eine Schlussfolgerung scheint unausweichlich: Ein Ordner mit Berechtigungen d-w-------
ist völlig nutzlos. Ausarbeitung: Sie können den Inhalt nicht auflisten, Sie können keine Dateien lesen, von denen Sie wissen, dass sie darin vorhanden sind (weil Sie keine Namen in Inodes übersetzen können), Sie können keine Dateien entfernen oder umbenennen oder hinzufügen, da dies wiederum eine Übersetzung implizieren würde und Sie können nicht einmal Hardlinks hinzufügen (da dies vermutlich das Hinzufügen eines Namens sowie einer Inode-Nummer bedeuten würde, was bedeutet, dass Sie beide kennen würden, was wiederum den Zweck des Aufhebens der Ausführungsberechtigung verletzt). . Und wenn sich Dateien in einem solchen Ordner befinden, können Sie diesen Ordner natürlich auch nicht löschen, da Sie seinen Inhalt nicht löschen können.
Also ... ich möchte zwei Fragen stellen:
- Ist meine Analogie richtig oder ist es ein großer Fehler?
- Gibt es eine Situation, in der es unabhängig von der vorherigen Antwort angemessen ist, einen Ordner mit den beschriebenen Berechtigungen zu haben?
mkdir foo ; chmod 200 foo ; touch foo/bar
ich es bekommen habe touch: cannot touch ‘foo/bar’: Permission denied
. Dies geschieht auch dann, wenn foo / bar bereits vorhanden ist. Ich teste in Bash (Arch Linux).