Sind die Berechtigungen des übergeordneten Verzeichnisses wichtig, wenn Sie auf ein Unterverzeichnis zugreifen?

160

Wenn ich einen Stammordner mit einer eingeschränkten Berechtigung habe, sagen wir 600, und wenn die untergeordneten Ordner / Dateien die Berechtigung 777 haben, kann jeder die untergeordnete Datei lesen / schreiben / ausführen, obwohl der Stammordner 600 hat?

Ken Li
quelle
12
Beachten Sie, dass das Ändern eines Verzeichnisses auf 600 den Zugriff auch auf den Besitzer unmöglich macht, da Sie die Ausführungsberechtigung für das
Hinzufügen

Antworten:

183

Die genaue Regel lautet: Sie können ein Verzeichnis genau dann durchlaufen, wenn Sie über die Berechtigung zum Ausführen verfügen.

Für den Zugriff dir/subdir/filebenötigen Sie beispielsweise die Ausführungsberechtigung für dirund dir/subdirsowie die Berechtigungen filefür die gewünschte Zugriffsart. Ich bin mir nicht sicher, ob es universell ist, dass Sie eine Ausführungsberechtigung für das aktuelle Verzeichnis benötigen, um über einen relativen Pfad auf eine Datei zuzugreifen (unter Linux).

Die Art und Weise, wie Sie auf eine Datei zugreifen, ist von Bedeutung. Wenn Sie beispielsweise über Ausführungsberechtigungen verfügen, /foo/barjedoch nicht über /fooIhr aktuelles Verzeichnis /foo/bar, können Sie auf Dateien /foo/barüber einen relativen Pfad zugreifen, jedoch nicht über einen absoluten Pfad. /foo/barIn diesem Szenario können Sie nicht ändern . Ein privilegierterer Prozess hat vermutlich stattgefunden, cd /foo/barbevor er unprivilegiert blieb. Wenn eine Datei mehrere feste Links hat, bestimmt der Pfad, über den Sie darauf zugreifen, Ihre Zugriffsbeschränkungen.

Symbolische Verknüpfungen ändern nichts. Der Kernel verwendet die Zugriffsrechte des aufrufenden Prozesses, um diese zu durchlaufen. Wenn es sich beispielsweise symum einen symbolischen Link zum Verzeichnis handelt dir, benötigen Sie die Ausführungsberechtigung für dirden Zugriff auf sym/foo. Die Berechtigungen für den Symlink selbst können je nach Betriebssystem und Dateisystem von Bedeutung sein oder auch nicht (einige respektieren sie, andere ignorieren sie).

Durch das Entfernen der Ausführungsberechtigung aus dem Stammverzeichnis wird ein Benutzer effektiv auf einen Teil der Verzeichnisstruktur beschränkt (in die sich ein privilegierterer Prozess ändern muss). Dies erfordert, dass Zugriffssteuerungslisten verwendet werden. Wenn zum Beispiel /und /homesind tabu joe( setfacl -m user:joe:0 / /home) und /home/joeist joe‚Home - Verzeichnis, dann joenicht in der Lage sein , den Rest des Systems zuzugreifen (einschließlich Laufe Shell - Skripten mit /bin/shoder dynamisch verknüpfte Binärdateien , die für den Zugriff benötigen /lib, so dass Sie‘ d müssen für den praktischen Gebrauch tiefer gehen, zB setfacl -m user:joe:0 /*; setfacl -d user:joe /bin /lib).

Die Leseberechtigung für ein Verzeichnis gibt das Recht, die Einträge aufzulisten. Gelegentlich ist es nützlich, Ausführungsberechtigungen ohne Leseberechtigung zu erteilen: Die Namen von Einträgen dienen als Kennwörter für den Zugriff darauf. Ich kann mir keine Verwendung vorstellen, um einem Verzeichnis eine Lese- oder Schreibberechtigung ohne Ausführungsberechtigung zu erteilen.

Gilles
quelle
32

Die Berechtigung für Stammordner beschränkt die Berechtigung für untergeordnete Dateien. Du kannst es versuchen.

$ mkdir rootdir
$ touch ./rootdir/childfile
$ chmod 777 ./rootdir/childfile
$ chmod 600 rootdir
$ cat ./rootdir/childfile

Ich verstehe das:

$ cat: ./rootfolder/childfile: permission denied
goovim
quelle
4

Sie können das untergeordnete Verzeichnis beschreibbar machen, auch wenn das übergeordnete Verzeichnis nicht beschreibbar ist. Ich mache das für Gruppen.

Beispiel: Das übergeordnete Verzeichnis gehört dem Gruppencodierer

drwxr-sr-x

untergeordnetes Verzeichnis

drwxrwsr-x

Sie (ein Mitglied der Codierungsgruppe) können weiterhin in das untergeordnete Verzeichnis schreiben, nicht jedoch in das übergeordnete Verzeichnis.

Kemin Zhou
quelle
1

Sie können eine feste Verknüpfung erstellen, um auf die Datei zuzugreifen, auch wenn Sie keine Ausführungsberechtigung für das übergeordnete Verzeichnis haben. Der Haken hier ist jedoch, dass Sie die feste Verknüpfung erstellen müssen, bevor Sie Ihre Ausführungsberechtigung für das übergeordnete Verzeichnis verlieren

$ ln foo/bar/test_privs privs_test_checking
Kamal
quelle