Як я можу переглянути список дозволів кожного компонента на шляху до файлу?


10

Іноді доводиться визначати, в якому каталозі в шляху доступу права обмежені. Ось приклад:

$ 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

Ні, lsні catпоказує, де права користувача були обмежені.

Який найпростіший спосіб відображення прав доступу для кожного компонента (каталогу та файлу) на шляху? Мене в основному цікавлять рішення для Unix-подібних систем.

Відповіді:


17

Для основних дозволів UNIX (власник / група / інші) використовуйте, nameiщо є частиною util-linux :

# namei -l / sys / kernel / debug / usb / пристрої
f: / sys / kernel / debug / usb / devices
root root drwxr-xr-x /
dr-xr-xr-x root root sys
root root ядро ​​drwxr-xr-x
drwx ------ налагодження кореневих коренів
drwxr-xr-x root root usb
-r - r - r-- кореневі кореневі пристрої

1

Нижче наведено простий сценарій, подібний до оболонки Борна. Він проходить шлях шляхом поступового видалення останніх компонентів за допомогою dirnameкоманди, поки шлях не перестане змінюватися. Ви отримуєте /або .в кінці, або в кінці.

#!/bin/sh

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

В одному рядку, sudoщоб мати можливість бачити компоненти з обмеженими правами доступу:

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

Приклад виведення

-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

Якщо рядок дозволу ls -lвідображається +в кінці, вам потрібно перерахувати ACL, використовуючи getfaclдля перегляду повних прав доступу:

#!/bin/sh

f="$1"
p=
while test "$f" != "$p" ; do
    getfacl "$f"
    p="$f"
    f="$(dirname "$f")"
done
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.