Diese Interpretation der Berechtigungen geht auf frühe Unix-Dateisysteme zurück. Am Anfang gab es nur Dateien. (Nun, und Geräte und Pipes und ... aber ich versuche hier eine Geschichte zu erzählen, nicht 100% genau zu sein; außerdem gilt alles für Geräte und Pipes und alles andere, weil alles sogar eine Datei ist Verzeichnisse).
Verzeichnisse sind nur Dateien, die das Dateisystem verwendet, um die Metadaten, die den Verzeichnisbaum beschreiben, und die darin enthaltenen Dateien zu speichern. Jede Datei in einem Verzeichnis wurde durch eine einfache Datenstruktur beschrieben, die Platz für einen Dateinamen (ursprünglich 14 Zeichen, IIRC) sowie die Inode-Nummer, in der die Daten gespeichert waren, die Größe der Datei, Zeitstempel und das Berechtigungswort enthielt . Jedes Verzeichnis begann mit zwei Einträgen mit dem Namen .
und ..
, wobei der erste auf den Inode dieses Verzeichnisses und der zweite auf den Inode des übergeordneten Verzeichnisses zeigte.
Das Berechtigungswort hatte neun Bits, um die Behandlung des Besitzers, anderer Mitglieder derselben Gruppe und der Welt zu beschreiben. Die drei Bits für jedes Flag, ob der betreffende Benutzer die Datei lesen, schreiben oder ausführen kann. (Möglicherweise stellen Sie fest, dass das 16-Bit-Berechtigungswort fünf weitere Bits enthält, die ich ignoriere. Diese wurden schließlich mit Bedeutungen versehen, aber das ist für diesen Teil der Geschichte nicht relevant.) (Auch diese Interpretation der neun Bits ist in allen Nachkommen des frühen Unix, einschließlich Linux, ziemlich gleich geblieben.)
Wenn ein Verzeichnis also wirklich nur eine spezielle Art von Datei ist und durch einen Eintrag in einem Verzeichnis beschrieben wird, hat es offensichtlich auch Berechtigungsbits, und diese Bits bedeuten wahrscheinlich etwas. Aber die Frage ist was genau. Der einfachste Weg, diesen Bits eine Bedeutung zuzuweisen, besteht darin, ihre Bedeutung überhaupt nicht zu ändern. Und genau das wurde getan.
Das Lesebit bedeutet also, dass der Benutzer das Verzeichnis selbst lesen kann. Dadurch erhält der Leser klassisch Zugriff auf den Dateinamen, die Zeitstempel, die Größe und die Inode-Nummer der Daten jeder Datei. Insbesondere mit r
set können Sie ls
die Namen aller Dateien im Verzeichnis anzeigen, dies reicht jedoch nicht aus, um eine der aufgelisteten Dateien zu öffnen (oder in irgendeiner Weise zu verwenden).
Das Ausführungsbit bedeutet, dass der Benutzer das Verzeichnis "ausführen" kann. Da Verzeichnisse etwas Besonderes sind, bedeutet Ausführen wirklich, einen Eintrag nach Namen zu suchen und ihn zu verwenden. Das bedeutet, dass Sie versuchen können, die Dateien zu öffnen, wenn dies festgelegt x
ist, ohne dass r
Sie deren Namen nicht ermitteln können. Natürlich wirken sich die Berechtigungen der angeforderten Datei auch auf den Zugriff aus. Selbst x
wenn Sie sich im Verzeichnis befinden, können Sie eine Datei nur lesen, wenn sie Ihnen auch diese bietet r
.
Das Schreibbit bedeutet, dass der Benutzer in das Verzeichnis schreiben kann, aber natürlich nur durch das Dateisystem selbst vermittelt wird. Das bedeutet, dass Sie mit w
set neue Dateien in diesem Verzeichnis erstellen oder die Verzeichniseinträge vorhandener Dateien bearbeiten können. Aber ohne x
Set können Sie keine Dateien verwenden und ohne r
sie auch nicht sehen.
Da sich in Unix und seinen Nachkommen kompliziertere Modelle der Benutzeridentität entwickelt haben, konnten dieselben grundlegenden Beschreibungen bemerkenswert unverändert bleiben.
Kurz gesagt r
bedeutet dies , dass Sie den Inhalt sehen können, x
dass Sie ihn verwenden können und w
dass Sie ihn sogar für Verzeichnisse ändern können.