Wie kann ich Berechtigungen für jede Komponente in einem Dateipfad auflisten?

10

Manchmal muss festgelegt werden, für welches Verzeichnis in einem Pfad die Zugriffsrechte eingeschränkt sind. Hier ist 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, wo die Benutzerrechte eingeschränkt waren.

Wie lassen sich die Zugriffsrechte für jede Komponente (Verzeichnis und Datei) im Pfad am einfachsten anzeigen? Ich interessiere mich hauptsächlich für Lösungen für Unix-ähnliche Systeme.

Pabouk
quelle

Antworten:

17

Verwenden Sie für grundlegende UNIX-Berechtigungen (Eigentümer / Gruppe / Andere) Folgendes , nameidas Teil von util-linux ist :

# namei -l / sys / kernel / debug / usb / Geräte
f: / sys / kernel / debug / usb / Geräte
drwxr-xr-x root root /
dr-xr-xr-x root root sys
drwxr-xr-x root root Kernel
drwx ------ root root debug
drwxr-xr-x root root usb
-r - r - r-- Root-Root-Geräte
user1686
quelle
1

Unten finden Sie ein einfaches Bourne-ähnliches Shell-Skript. Es durchläuft den Pfad, indem die letzten Komponenten mit dem dirnameBefehl schrittweise entfernt werden, bis sich der Pfad nicht mehr ändert. Du bekommst entweder /oder .am Ende.

#!/bin/sh

f="$1"
p=
while test "$f" != "$p" ; do
    ls -ld "$f"
    p="$f"
    f="$(dirname "$f")"
done

In einer einzigen Zeile mit sudo, um Komponenten mit eingeschränkten Zugriffsrechten sehen zu können:

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 von ls -lShows +am Ende haben Sie zur Liste ACL mit getfaclden vollständigen Zugriffsrechte , um zu sehen:

#!/bin/sh

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