Wenn ich einen Root-Ordner mit einer eingeschränkten Berechtigung habe, sagen wir 600, und wenn die untergeordneten Ordner/Dateien die Berechtigung 777 haben, kann dann jeder die untergeordnete Datei lesen/schreiben/ausführen, obwohl der Root-Ordner 600 hat?
Akzeptierte Antwort:
Die genaue Regel lautet:Sie können ein Verzeichnis nur dann durchsuchen, wenn Sie die Ausführungsberechtigung dafür haben.
Also zum Beispiel um auf dir/subdir/file
zuzugreifen , benötigen Sie die Ausführungsberechtigung für dir
und dir/subdir
, plus die Berechtigungen für file
für die gewünschte Zugriffsart. Um in Grenzfälle zu kommen, bin ich 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).
Es kommt darauf an, wie Sie auf eine Datei zugreifen. Zum Beispiel, wenn Sie Ausführungsberechtigungen für /foo/bar
haben aber nicht auf /foo
, aber Ihr aktuelles Verzeichnis ist /foo/bar
, können Sie auf Dateien in /foo/bar
zugreifen durch einen relativen Pfad, aber nicht durch einen absoluten Pfad. Sie können nicht zu /foo/bar
wechseln In diesem Szenario; ein privilegierterer Prozess hat vermutlich cd /foo/bar
ausgeführt bevor er unprivilegiert wird. Wenn eine Datei mehrere feste Links hat, bestimmt der Pfad, den Sie für den Zugriff verwenden, Ihre Zugriffsbeschränkungen.
Symbolische Links ändern nichts. Der Kernel verwendet die Zugriffsrechte des aufrufenden Prozesses, um sie zu durchlaufen. Wenn beispielsweise sym
ist ein symbolischer Link auf das Verzeichnis dir
, benötigen Sie die Ausführungsberechtigung für dir
um auf sym/foo
zuzugreifen . 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).
Das Entfernen der Ausführungsberechtigung aus dem Stammverzeichnis beschränkt einen Benutzer effektiv auf einen Teil des Verzeichnisbaums (in den ein privilegierterer Prozess wechseln muss). Dies erfordert Zugriffskontrolllisten, um von Nutzen zu sein. Wenn beispielsweise /
und /home
sind für joe
tabu (setfacl -m user:joe:0 / /home
) und /home/joe
ist joe
’s Home-Verzeichnis, dann joe
wird nicht auf den Rest des Systems zugreifen können (einschließlich der Ausführung von Shell-Skripten mit /bin/sh
oder dynamisch gelinkte Binärdateien, die auf /lib
zugreifen müssen , also müssten Sie für die praktische Anwendung tiefer gehen, z. setfacl -m user:joe:0 /*; setfacl -d user:joe /bin /lib
).
Die Leseberechtigung für ein Verzeichnis gibt das Recht, die Einträge aufzuzählen. Es ist gelegentlich nützlich, eine Ausführungserlaubnis zu erteilen, ohne eine Leseerlaubnis zu erteilen:Die Namen von Einträgen dienen als Passwörter für den Zugriff auf sie. Ich kann mir keinen Nutzen vorstellen, einem Verzeichnis Lese- oder Schreibberechtigungen ohne Ausführungsberechtigung zu erteilen.