ファイルパス内のすべてのコンポーネントのアクセス許可を一覧表示するにはどうすればよいですか?


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

また、ユーザー権限が制限されている場所lscat示していません。

パス内のすべてのコンポーネント(ディレクトリとファイル)のアクセス権を表示する最も簡単な方法は何ですか?私は主にUnixライクなシステムのためのソリューションに興味があります。

回答:


17

基本的なUNIX権限(所有者/グループ/その他)の場合nameiは、util-linuxの一部であるwhichを使用します。

#namei -l / sys / kernel / debug / usb / devices
f:/ sys / kernel / debug / usb / devices
drwxr-xr-x root root /
dr-xr-xr-xルートルートシステム
drwxr-xr-xルートルートカーネル
drwx ------ルートルートデバッグ
drwxr-xr-xルートルートUSB
-r--r--r--ルートルートデバイス

1

以下は、単純なBourne-like-shellスクリプトです。dirnameパスの変更が停止するまで、コマンドを使用して最後のコンポーネントを徐々に削除することにより、パスをトラバースします。どちらか、/または.最後に取得します。

#!/bin/sh

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

sudoアクセス権が制限されたコンポーネントを表示できるようにするには、1行で:

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表示+される場合はgetfacl、完全なアクセス権を確認するために使用するACLをリストする必要があります。

#!/bin/sh

f="$1"
p=
while test "$f" != "$p" ; do
    getfacl "$f"
    p="$f"
    f="$(dirname "$f")"
done
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.