
Às vezes é necessário determinar em qual diretório em um caminho os direitos de acesso são limitados. Aqui está um exemplo:
$ 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
Nem ls
mostra cat
onde os direitos do usuário foram limitados.
Qual é a maneira mais simples de mostrar os direitos de acesso de cada componente (diretório e arquivo) no caminho? Estou interessado principalmente em soluções para sistemas do tipo Unix.
Responder1
Para permissões básicas do UNIX (proprietário/grupo/outro), use namei
which faz parte deutilitário-linux:
# namei -l /sys/kernel/debug/usb/devices f: /sys/kernel/debug/usb/devices raiz drwxr-xr-x raiz / sistema raiz dr-xr-xr-x raiz kernel raiz drwxr-xr-x drwx ------ depuração raiz raiz drwxr-xr-x raiz raiz usb -r--r--r-- dispositivos raiz raiz
Responder2
Abaixo está um script simples do tipo Bourne. Ele percorre o caminho removendo gradualmente os últimos componentes usando o dirname
comando até que o caminho pare de mudar. Você obtém /
ou .
no final.
#!/bin/sh
f="$1"
p=
while test "$f" != "$p" ; do
ls -ld "$f"
p="$f"
f="$(dirname "$f")"
done
Em uma única linha para sudo
poder ver componentes com direitos de acesso limitados:
f=/sys/kernel/debug/usb/devices p= ; while test "$f" != "$p" ; do sudo ls -ld "$f" ; p="$f" ; f="$(dirname "$f")" ; done
Exemplo de saída
-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 /
ACL POSIX
Se a string de permissão for ls -l
exibida +
no final, você deverá listar a ACL usando getfacl
para ver os direitos de acesso completos:
#!/bin/sh
f="$1"
p=
while test "$f" != "$p" ; do
getfacl "$f"
p="$f"
f="$(dirname "$f")"
done