Bagaimana saya bisa mendaftar izin setiap komponen di jalur file?

10

Kadang-kadang perlu untuk menentukan direktori mana di jalur hak akses terbatas. Berikut ini sebuah contoh:

$ 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

Juga lstidak catmenunjukkan di mana hak pengguna dibatasi.

Apa cara paling sederhana untuk menunjukkan hak akses untuk setiap komponen (direktori dan file) di jalur? Saya terutama tertarik pada solusi untuk sistem seperti Unix.

pabouk
sumber

Jawaban:

17

Untuk izin dasar UNIX (pemilik / grup / lainnya), gunakan nameiyang merupakan bagian dari util-linux :

# namei -l / sys / kernel / debug / usb / devices
f: / sys / kernel / debug / usb / perangkat
drwxr-xr-x root root /
sys root xr-xr-xr-x
kernel root drwxr-xr-x root
drwx ------ debug root root
root usb root drwxr-xr-x
-r - r - r-- perangkat root root
pengguna1686
sumber
1

Di bawah ini adalah skrip Bourne-like-shell sederhana. Itu melintasi jalan dengan secara bertahap menghapus komponen terakhir menggunakan dirnameperintah sampai jalur berhenti berubah. Anda mendapatkan salah satu /atau .pada akhirnya.

#!/bin/sh

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

Dalam satu baris dengan sudountuk dapat melihat komponen dengan hak akses terbatas:

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

Contoh 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

Jika string izin dari ls -lacara +di bagian akhir Anda harus mendaftar ACL getfacluntuk melihat hak akses lengkap:

#!/bin/sh

f="$1"
p=
while test "$f" != "$p" ; do
    getfacl "$f"
    p="$f"
    f="$(dirname "$f")"
done
pabouk
sumber