Wie kann ich die Berechtigungen aller Komponenten in einem Dateipfad auflisten?

Wie kann ich die Berechtigungen aller Komponenten in einem Dateipfad auflisten?

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 lsnoch catzeigt 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 nameiwhich 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 dirnameBefehls 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

sudoUm 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 -langezeigt wird, +müssen Sie die ACL auflisten, getfaclum die vollständigen Zugriffsrechte anzuzeigen:

#!/bin/sh

f="$1"
p=
while test "$f" != "$p" ; do
    getfacl "$f"
    p="$f"
    f="$(dirname "$f")"
done

verwandte Informationen