![Как перечислить разрешения каждого компонента в пути к файлу?](https://rvso.com/image/1388804/%D0%9A%D0%B0%D0%BA%20%D0%BF%D0%B5%D1%80%D0%B5%D1%87%D0%B8%D1%81%D0%BB%D0%B8%D1%82%D1%8C%20%D1%80%D0%B0%D0%B7%D1%80%D0%B5%D1%88%D0%B5%D0%BD%D0%B8%D1%8F%20%D0%BA%D0%B0%D0%B6%D0%B4%D0%BE%D0%B3%D0%BE%20%D0%BA%D0%BE%D0%BC%D0%BF%D0%BE%D0%BD%D0%B5%D0%BD%D1%82%D0%B0%20%D0%B2%20%D0%BF%D1%83%D1%82%D0%B8%20%D0%BA%20%D1%84%D0%B0%D0%B9%D0%BB%D1%83%3F.png)
Иногда необходимо определить, на какой каталог в пути права доступа ограничены. Вот пример:
$ 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-подобных систем.
решение1
Для основных разрешений UNIX (владелец/группа/другие) используйте , namei
который является частьюutil-linux:
# имяi -l /sys/kernel/debug/usb/devices f: /sys/kernel/debug/usb/devices drwxr-xr-x корень корень / dr-xr-xr-x root корневая система drwxr-xr-x root корневое ядро drwx------ root root отладка drwxr-xr-x root корневой usb -r--r--r-- root корневые устройства
решение2
Ниже приведен простой скрипт Bourne-like-shell. Он проходит по пути, постепенно удаляя последние компоненты с помощью 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-список контроля доступа
Если строка разрешений ls -l
отображается +
в конце, вам необходимо перечислить ACL, getfacl
чтобы увидеть полные права доступа:
#!/bin/sh
f="$1"
p=
while test "$f" != "$p" ; do
getfacl "$f"
p="$f"
f="$(dirname "$f")"
done