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?
quelle
mkdir foo ; chmod 200 foo ; touch foo/bar
ich es bekommen habetouch: cannot touch ‘foo/bar’: Permission denied
. Dies geschieht auch dann, wenn foo / bar bereits vorhanden ist. Ich teste in Bash (Arch Linux).Antworten:
Ihr Verständnis ist ziemlich richtig. Eine bessere Möglichkeit, sich die Ausführungsberechtigung vorzustellen, besteht darin, dass Sie Dinge mit einem Datei- oder Verzeichnisnamen im Verzeichnis tun können (außer nur den Namen selbst zu lesen). Die meisten dieser Dinge beinhalten das Übersetzen des Namens in einen Inode, aber auch das Erstellen neuer Namen und das Entfernen vorhandener Namen.
Eine Schreibberechtigung für das Verzeichnis ohne Ausführung ist daher ziemlich nutzlos, da Sie nichts schreiben können, wenn Sie nicht auf die darin enthaltenen Dateien zugreifen können.
quelle
Ich denke, es ist richtig, Sie benötigen wx-Berechtigung, um in einen Ordner schreiben zu können.
Möglicherweise haben Sie einen Prozess, der Informationen in einen Ordner schreibt, und ein anderer verwendet sie, aber Sie müssen verhindern, dass der Writer andere an diesem Ort gespeicherte Informationen liest.
Die zuvor beschriebene Situation ist in Einheiten zur automatischen Geschwindigkeitsüberwachung nützlich. Diese Einheiten müssen einen Überprüfungsprozess durchlaufen, bei dem der Staatsbeamte die Verfälschungsmöglichkeiten minimieren muss. Einige automatische Geschwindigkeitsüberwachungseinheiten verfügen über eine externe SD-Speicherkarte, auf der das System Verstoßregister speichert. Es könnte aber auch eine "magische" Konfigurationsdatei gespeichert werden, die das Verhalten der verifizierten Einheit illegal ändert. Der Prozess, der das Verletzungsregister schreibt, darf also nichts von der SD-Speicherkarte lesen können.
Hier ist es ein Beispiel, zuerst nur mit Schreiben, dann, wie es mit wx funktioniert:
Montieren Sie ein Gerät
Versuchen Sie dann mit User Enforcer, eine neue Datei zu schreiben
mit wx aushängen und wieder einbauen
Versuch es noch einmal
Mit dieser Konfiguration können Sie jetzt schreiben
quelle