* nix-Benutzerberechtigungen sind wirklich einfach, aber es kann problematisch werden, wenn Sie den gesamten Zugriff auf das übergeordnete Verzeichnis berücksichtigen müssen, bevor Sie eine bestimmte Datei erreichen. Wie kann ich überprüfen, ob der Benutzer über ausreichende Berechtigungen verfügt? Wenn nicht, welches Verzeichnis verweigert dann den Zugriff?
Angenommen, ein Benutzer joe
und die Datei /long/path/to/file.txt
. Auch wenn file.txt
es auf 777 geändert wurde, muss Joe immer noch zugreifen /long/
können und dann /long/path/
und dann /long/path/to/
vorher. Was ich brauche, ist eine Möglichkeit, dies automatisch zu überprüfen. Wenn er joe
keinen Zugang hat, würde ich auch gerne wissen, wo er abgelehnt wurde. Vielleicht kann er zugreifen /long/
, aber nicht /long/path/
.
quelle
namei <path> || exit 1
können Sie mithilfe von ein Berechtigungsproblem in einem Skript auf einfache Weise erkennen.Sie können bash verwenden, um dies zu tun.
Um dies für einen bestimmten Benutzer zu überprüfen, können Sie verwenden
sudo
.quelle
path
, um leer zu sein? oder/
?path
wird zum/long
ersten Mal um die Schleife gesetzt, was richtig ist. Soll ichpath
explizit auf nichts setzen (path=
)? Vielen Dank auch für die Vereinfachung meiner Verwendung vontr
.Wie ich aus Ihrer Frage erfahren habe, sollten Sie es für verschiedene Benutzer überprüfen (nicht nur für Joe). In diesem Fall ist es am einfachsten, es rekursiv über sudo zu überprüfen:
Verwendungszweck:
quelle
0755
,0700
und0777
). Ich gab aus./script.sh /root/test/test.txt joe
und es hallte wideroriginal file /root/test/test.txt is readable for joe
. Während ich dies versuchte, habe ich das Testverzeichnis falsch eingegeben./script.sh /root/tst/test.txt joe
und es hallte wideroriginal file /root/tst/test.txt is readable for joe
. Habe ich etwas verpasst-r $FILE
, richtig?Hier ist mein Versuch, diese Funktionalität bereitzustellen. Ich habe mich für
stat
einewhile
Schleife entschieden unddirname
.Ich habe dieses Skript erstellt
walkdir.bash
:Sie führen es so aus:
quelle