Come posso elencare le autorizzazioni di ogni componente in un percorso di file?


10

A volte è necessario determinare su quale directory in un percorso i diritti di accesso sono limitati. Ecco un esempio:

$ 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

lscatspettacoli in cui i diritti degli utenti sono stati limitati.

Qual è il modo più semplice di mostrare i diritti di accesso per ogni componente (directory e file) nel percorso? Sono principalmente interessato a soluzioni per sistemi simili a Unix.

Risposte:


17

Per le autorizzazioni UNIX di base (proprietario / gruppo / altro), utilizzare ciò nameiche fa parte di util-linux :

# namei -l / sys / kernel / debug / usb / devices
f: / sys / kernel / debug / usb / devices
drwxr-xr-x root root /
dr-xr-xr-x root root sys
kernel root root drwxr-xr-x
drwx ------ debug root root
Drwxr-xr-x root root usb
-r - r - r-- dispositivi root root

1

Di seguito è riportato un semplice script Bourne-like-shell. Attraversa il percorso rimuovendo gradualmente gli ultimi componenti usando il dirnamecomando fino a quando il percorso smette di cambiare. Ottieni /o .alla fine.

#!/bin/sh

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

In una sola riga con sudoper poter vedere i componenti con diritti di accesso limitati:

f=/sys/kernel/debug/usb/devices p= ; while test "$f" != "$p" ; do sudo ls -ld "$f" ; p="$f" ; f="$(dirname "$f")" ; done

Esempio di output

-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

Se la stringa di autorizzazione di ls -lmostra +alla fine devi elencare ACL usando getfaclper vedere i diritti di accesso completi:

#!/bin/sh

f="$1"
p=
while test "$f" != "$p" ; do
    getfacl "$f"
    p="$f"
    f="$(dirname "$f")"
done
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.