Làm cách nào tôi có thể liệt kê quyền của mọi thành phần trong đường dẫn tệp?


10

Đôi khi cần phải xác định thư mục nào trong quyền truy cập đường dẫn bị hạn chế. Đây là một ví dụ:

$ 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

Không lsphải cũng không catcho thấy quyền người dùng bị hạn chế.

Cách đơn giản nhất để hiển thị quyền truy cập cho mọi thành phần (thư mục và tệp) trong đường dẫn là gì? Tôi chủ yếu quan tâm đến các giải pháp cho các hệ thống giống như Unix.

Câu trả lời:


17

Đối với các quyền UNIX cơ bản (chủ sở hữu / nhóm / người khác), hãy sử dụng nameimột phần của linux-linux :

# namei -l / sys / kernel / gỡ lỗi / usb / thiết bị
f: / sys / kernel / gỡ lỗi / usb / thiết bị
root root drwxr-xr-x /
hệ thống gốc root dr-xr-xr-x
kernel root drwxr-xr-x
drwx ------ gỡ lỗi root root
USB gốc drwxr-xr-x
-r - r - r-- thiết bị root

1

Dưới đây là một kịch bản đơn giản như vỏ Bourne. Nó đi qua đường dẫn bằng cách loại bỏ dần các thành phần cuối cùng bằng cách sử dụng dirnamelệnh cho đến khi đường dẫn dừng thay đổi. Bạn nhận được một /hoặc .cuối cùng.

#!/bin/sh

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

Trong một dòng duy nhất sudođể có thể thấy các thành phần có quyền truy cập hạn chế:

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

Ví dụ đầu ra

-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

Nếu chuỗi quyền từ ls -lhiển thị +ở cuối, bạn phải liệt kê ACL bằng cách sử dụng getfaclđể xem các quyền truy cập đầy đủ:

#!/bin/sh

f="$1"
p=
while test "$f" != "$p" ; do
    getfacl "$f"
    p="$f"
    f="$(dirname "$f")"
done
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.