![Wie kann ich die Berechtigungen aller Komponenten in einem Dateipfad auflisten?](https://rvso.com/image/1388804/Wie%20kann%20ich%20die%20Berechtigungen%20aller%20Komponenten%20in%20einem%20Dateipfad%20auflisten%3F.png)
Manchmal ist es notwendig, festzulegen, auf welches Verzeichnis in einem Pfad die Zugriffsrechte beschränkt sind. Hier ein Beispiel:
$ ls /sys/kernel/debug/usb/devices
ls: cannot access /sys/kernel/debug/usb/devices: Permission denied
$ cat /sys/kernel/debug/usb/devices
cat: /sys/kernel/debug/usb/devices: Permission denied
Weder ls
noch cat
zeigt an, wo die Benutzerrechte eingeschränkt wurden.
Wie kann man am einfachsten die Zugriffsrechte für alle Komponenten (Verzeichnis und Datei) im Pfad anzeigen? Mich interessieren vor allem Lösungen für Unix-ähnliche Systeme.
Antwort1
Für grundlegende UNIX-Berechtigungen (Besitzer/Gruppe/andere) verwenden Sie namei
which ist Teil vonutil-linux:
# namei -l /sys/kernel/debug/usb/devices f: /sys/kernel/debug/usb/devices drwxr-xr-x Wurzel Wurzel / dr-xr-xr-x Wurzel Wurzel sys drwxr-xr-x root Wurzel Kernel drwx------ root root debug drwxr-xr-x rooten USB -r--r--r-- root Root-Geräte
Antwort2
Unten sehen Sie ein einfaches Shell-Skript ähnlich der Bourne-Methode. Es durchläuft den Pfad, indem es mithilfe des dirname
Befehls nach und nach die letzten Komponenten entfernt, bis sich der Pfad nicht mehr ändert. Am Ende erhalten Sie entweder „ /
oder“ ..
#!/bin/sh
f="$1"
p=
while test "$f" != "$p" ; do
ls -ld "$f"
p="$f"
f="$(dirname "$f")"
done
sudo
Um auch Komponenten mit eingeschränkten Zugriffsrechten sehen zu können, in einer Zeile :
f=/sys/kernel/debug/usb/devices p= ; while test "$f" != "$p" ; do sudo ls -ld "$f" ; p="$f" ; f="$(dirname "$f")" ; done
Beispielausgabe
-r--r--r-- 1 root root 0 Dec 5 10:36 /sys/kernel/debug/usb/devices
drwxr-xr-x 3 root root 0 Dec 5 10:36 /sys/kernel/debug/usb
drwx------ 19 root root 0 Dec 5 10:36 /sys/kernel/debug
drwxr-xr-x 7 root root 0 Dec 5 10:37 /sys/kernel
drwxr-xr-x 13 root root 0 Dec 5 10:37 /sys
drwxr-xr-x 27 root root 4096 Dec 3 09:39 /
POSIX-ACL
Wenn die Berechtigungszeichenfolge am Ende ls -l
angezeigt wird, +
müssen Sie die ACL auflisten, getfacl
um die vollständigen Zugriffsrechte anzuzeigen:
#!/bin/sh
f="$1"
p=
while test "$f" != "$p" ; do
getfacl "$f"
p="$f"
f="$(dirname "$f")"
done