파일 경로에 있는 모든 구성 요소의 권한을 어떻게 나열할 수 있나요?

파일 경로에 있는 모든 구성 요소의 권한을 어떻게 나열할 수 있나요?

때로는 경로 액세스 권한이 제한되는 디렉토리를 결정해야 할 때도 있습니다. 예는 다음과 같습니다.

$ 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경우유틸리티 리눅스:

# 이름i -l /sys/kernel/debug/usb/devices
f: /sys/kernel/debug/usb/devices
drwxr-xr-x 루트 루트 /
dr-xr-xr-x 루트 루트 sys
drwxr-xr-x 루트 루트 커널
drwx------ 루트 루트 디버그
drwxr-xr-x 루트 루트 USB
-r--r--r-- 루트 루트 장치

답변2

다음은 Bourne과 유사한 쉘 스크립트입니다. 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

관련 정보