In meinem CMS habe ich festgestellt, dass für Verzeichnisse das ausführbare Bit ( +x
) gesetzt sein muss, damit der Benutzer sie öffnen kann. Warum ist die Ausführungsberechtigung erforderlich, um ein Verzeichnis zu lesen, und wie funktionieren Verzeichnisberechtigungen unter Linux?
linux
permissions
directory
Nick.h
quelle
quelle
chmod 771 dirOne
) gesetzt haben, können Sie keinen dirOne-Inhalt auflisten. ABER wenn es ein Unterverzeichnis "dirTwo" mit den Rechten enthält, die wie (chmod 774 dirTwo
) eingestellt sind, können Sie seinen Inhalt wirklich verzeichnen!Antworten:
Beim Anwenden von Berechtigungen auf Verzeichnisse unter Linux haben die Berechtigungsbits eine andere Bedeutung als bei normalen Dateien.
r
) ermöglicht es dem betroffenen Benutzer, die Dateien innerhalb des Verzeichnisses aufzulistenw
) kann der betroffene Benutzer Dateien im Verzeichnis erstellen, umbenennen oder löschen und die Verzeichnisattribute ändernx
) ermöglicht es dem betroffenen Benutzer, in das Verzeichnis zu gelangen und auf darin enthaltene Dateien und Verzeichnisse zuzugreifenT
odert
wenn das Execute-Bit für andere gesetzt ist) besagt, dass Dateien und Verzeichnisse in diesem Verzeichnis nur von ihrem Eigentümer (oder Root) gelöscht oder umbenannt werden dürfen.quelle
+x
Im Verzeichnis wird der Zugriff auf Dateien über Inodes in diesem bestimmten Verzeichnis gewährt (nicht weniger, nicht mehr, naja, vielleicht auchchdir
nötig+x
). Um den Inhalt einer Datei zu lesen oder zu schreiben, benötigt der Benutzer auch+r
/+w
für diese Datei, dies sind jedoch unterschiedliche Berechtigungen (sie setzen nichts außer Kraft).+x
im Verzeichnis gewährt Zugriff auf Dateien Inodes" - Dies scheint eine gute Nemonik, aber vielleicht nicht die ganze Geschichte zu erzählen? Ohne das in einem Verzeichnis gesetzte Ausführungsbit können Sie den Dateinamen einer Datei in diesem Verzeichnis nicht ändern. Ich frage mich, warum das so ist, weil der Dateiname in einem Verzeichniseintrag und nicht in einer Inode gespeichert ist.Denken Sie zuerst: Was ist ein Verzeichnis? Es ist nur eine Liste der Elemente (Dateien und andere Verzeichnisse), die sich innerhalb befinden. Also: Verzeichnis = Liste der Namen.
Lesebit = Wenn gesetzt, können Sie diese Liste lesen. Wenn Sie beispielsweise ein Verzeichnis mit dem Namen haben
poems
:ls poems
und Sie erhalten eine Liste der darin lebenden Gegenstände (-l
geben keine Details preis!).touch poems/so <TAB> poems/somefile
.poems
Ihr Arbeitsverzeichnis nicht erstellen (dcd
. H. Darin ablegen ).Write bit = Wenn gesetzt, können Sie diese Liste ändern, dh Sie können Namen hinzufügen, umbenennen, löschen. Aber! Sie können dies tatsächlich nur tun, wenn auch das Ausführungsbit gesetzt ist.
Execute bit = Machen Sie dieses Verzeichnis zu Ihrem Arbeitsverzeichnis, dh
cd
hinein. Sie benötigen diese Berechtigung, wenn Sie:Interessanter Fall 1 : Wenn Sie über Schreib- und Ausführungsberechtigungen für ein Verzeichnis verfügen, können Sie Elemente, die sich in diesem Verzeichnis befinden, auch dann {löschen, umbenennen}, wenn Sie keine Schreibberechtigung für diese Elemente haben. (Verwenden Sie ein klebriges Bit, um dies zu verhindern.)
Interessanter Fall 2 : Wenn Sie die Berechtigung zum Ausführen (aber nicht zum Schreiben) eines Verzeichnisses und die Berechtigung zum Schreiben für eine darin befindliche Datei haben, können Sie die Datei nicht löschen (da sie aus der Liste entfernt werden muss). Sie können den Inhalt jedoch löschen, z. B. wenn es sich um eine Textdatei handelt, können Sie vi verwenden, um sie zu öffnen und alles zu löschen. Die Datei bleibt dort, ist aber leer.
Zusammenfassung:
Read bit = Sie können die Namen in der Liste lesen.
Schreibbit = Sie können Namen in der Liste {hinzufügen, umbenennen, löschen}, wenn auch das Ausführungsbit gesetzt ist.
Execute bit = Sie können dieses Verzeichnis zu Ihrem Arbeitsverzeichnis machen.
PS: Der von Kusalananda erwähnte Artikel ist eine gute Lektüre.
quelle
x
Bit für jeden Zugriff auf diese Datei: fürcat a/b/c/d
, ich brauchex
etwas auf allea
,b
undc
, auch wenn ich sie nicht als cwd verwenden.x
Berechtigung für das Verzeichnis haben, wenn Sie keinex
Berechtigung für die darin enthaltene Datei haben. Sie können es nurcat
zum Beispiel, aber Sie können die Datei selbst nicht ausführen.ls -l
für einen Ordner arbeiten möchten , benötigen Sie beider
und diex
Berechtigung.Ich habe diese Tabelle mit allen möglichen Berechtigungen und deren praktischen Auswirkungen erstellt.
(*) Nur Dateinamen : Andere Attribute wie Größe oder Datum sind nicht zugänglich. Sie können beispielsweise die Tabulatortaste verwenden, um den Befehl automatisch zu vervollständigen, nicht jedoch den Befehl ls.
Einige Gedanken :
quelle
-W-
um funktionell---
für Verzeichnisse gleichwertig zu sein . Nicht sehr intuitiv. Natürlich sind diese Arten von Low-Level-Bits oft nicht.-W-
konnte ich das Verzeichnis umbenennen (in einem Verzeichnis mit einem Sticky-Bit), aber nicht mit---
. Das scheint ein Unterschied zu seinHier ist ein guter Artikel dazu.
Zusammenfassung:
Ein Verzeichnis mit
x
gesetztem Bit ermöglicht es dem Benutzer,cd
in dieses Verzeichnis zu wechseln und auf die darin enthaltenen Dateien zuzugreifen.Einzelheiten:
Lesen (
r
)Schreiben (
w
)Execute (
x
)Hier einige Beispiele, die das Verständnis erleichtern sollen:
Weitere Informationen finden Sie im Artikel Hacking Linux Exposed .
quelle
Aus Robert Loves Buch "LINUX System Programming" Kapitel 1 Abschnitt
quelle
Für jede Operation, die auf eine Datei oder ein Verzeichnis zugreift, muss zunächst der Pfad zu der Datei oder dem Verzeichnis aufgelöst werden. Die Auflösung erfordert, dass der Benutzer die Berechtigung zum Ausführen für alle Verzeichnisse entlang des Pfads mit Ausnahme der endgültigen Pfadkomponente hat. Für Verzeichnisse bedeutet das Ausführungsbit also "auflösbar".
Nehmen wir
/a/b/c.txt
als Beispiel den Pfad : Der Benutzer hat 1) die Berechtigung zum Ausführen von/
und/a
; 2) hat Leserechte auf/a/b
; 3) Lese- und Schreibberechtigung auf/a/b/c.txt
.Der Benutzer kann nicht lesen (Liste)
/a
, da er keine Leseberechtigung hat. Die Pfadauflösung schlägt jedoch nicht fehl.Der Benutzer wird in der Lage sein zu lesen (Liste)
/a/b
, da der Benutzer die Berechtigung hat ausführen auf/
,/a
und die Leseberechtigung auf/a/b
. Beachten Sie, dass beim Lesen/a/b
der Dateinamec.txt
sichtbar ist, die Metadaten (z. B. Dateigröße) und der Inhalt jedoch nicht, da der Dateiname im Verzeichnis und nicht in der Datei gespeichert ist, die Metadaten jedoch im Inode der Datei gespeichert sind.Der Benutzer wird zu lesen , fehlschlagen
/a/b/c.txt
, weil , wenn der Pfad der Lösung von/
bis/a
zu/a/b
, es scheitert ,/a/b
da der Benutzer nicht über die Berechtigung ausführen.Siehe auch, wie ein Pfadname in eine Datei aufgelöst wird .
quelle
Eine nützliche Analogie besteht darin, sich jede Datei als ein Buch und jedes Verzeichnis als einen Raum vorzustellen, in dem die Bücher aufbewahrt werden.
Es gibt Regeln, um alle Namen in einem Raum auflisten zu können: das Lesebit für Verzeichnisse. Regeln, um ein Buch aus dem Raum zu entfernen: das Schreibbit für Verzeichnisse. Und Regeln, um einen Raum zu betreten und zu erkunden: Das resultierende Verzeichnis Bit ausführen.
Diese Regeln sind getrennt und unterscheiden sich von den Regeln für jedes Buch. Es gibt Regeln, die es jemandem ermöglichen, ein Buch zu öffnen und dessen Inhalt zu lesen: die gelesenen Bits für jede Datei. Es gibt Regeln, um den Inhalt eines Buches zu ändern: die Schreibbits für jede Datei. Und um eine Datei auszuführen: das oder die Ausführungsbits für jede Datei.
Ich schreibe Bit (s), weil es für jede Aktion drei Bits gibt. Es gibt ein Lesebit für den Eigentümer, ein Lesebit für die Gruppe (n) und ein Lesebit für alle anderen. Wenn eines dieser drei Bits für einen bestimmten Benutzer gesetzt ist, ist für diesen Benutzer das Lesebit aktiv. Es spielt keine Rolle , wie das Bit gefunden wurde , aktiv zu sein , entweder durch u ser oder g ruppe oder o ther, hat es die gleichen effektiven Ergebnisse.
Auf diese Weise kann ein Benutzer einen Raum betreten und Bücher aus der Bibliothek entfernen, jedoch nicht den Inhalt desselben Buches lesen.
Deshalb ist ein Lese Bit für Verzeichnisse benötigt wird: zu steuern, die den Rauminhalt (Buchtitel) zur Liste erlaubt ist.
Und das Ausführungsbit wird verwendet, um zu steuern, wer den Raum der Bücher betreten kann.
quelle
Die Bedeutung von Execute für Verzeichnisse ist ziemlich klar. Da es im Gegensatz zu Windows keine Traverse-Berechtigung gibt, müssen Sie etwas überladen. Die Designer entschieden sich für Execute. Das sorgt für endlose Verwirrung. Als ein Computer-Sicherheitsbeauftragter, der Execute-Rechte für etwas zuweist, das Sie eigentlich nicht ausführen möchten, sieht es düster aus.
quelle
GENERIC_EXECUTE
und das, was sie ist, nicht bemerkt .