읽기 권한이 있는 디렉토리를 나열할 수 없는 이유는 무엇입니까?

읽기 권한이 있는 디렉토리를 나열할 수 없는 이유는 무엇입니까?

그 안에 디렉토리 d와 파일을 만들었습니다. f그런 다음 나 자신에게 디렉토리에 대한 읽기 권한만 부여했습니다. 나는 이것이 파일을 나열할 수 있다는 것을 의미한다는 것을 이해합니다(예:여기),하지만 나는 못해.

will@wrmpb /p/t/permissions> ls -al
total 0
drwxr-xr-x   3 will  wheel  102  4 Oct 08:30 .
drwxrwxrwt  16 root  wheel  544  4 Oct 08:30 ..
dr--------   3 will  wheel  102  4 Oct 08:42 d
will@wrmpb /p/t/permissions> ls d
will@wrmpb /p/t/permissions>

쓰기 및 실행 권한을 변경하면 파일을 볼 수 있습니다.

will@wrmpb /p/t/permissions> chmod 500 d
will@wrmpb /p/t/permissions> ls d
f
will@wrmpb /p/t/permissions> 

왜 이런거야? 저는 MacOS를 사용하고 있습니다.

편집: @ccorn의 답변을 참조하면 저는 물고기를 사용하고 있으며 type ls다음을 제공합니다.

will@wrmpb /p/t/permissions> type ls
ls is a function with definition
function ls --description 'List contents of directory'
    command ls -G $argv
end

답변1

ls너무 많은 것을 시도하지 않도록 몇 가지 준비 사항 :

$ unalias ls 2>/dev/null
$ unset -f ls
$ unset CLICOLOR

디렉토리 권한 데모 r:

$ ls -ld d
dr--------  3 ccorn  ccorn  102  4 Okt 14:35 d
$ ls d
f
$ ls -l d
ls: f: Permission denied
$ ls -F d
ls: f: Permission denied

전통적인 Unix 파일 시스템에서 디렉토리는 (이름, inode 번호) 쌍의 목록일 뿐입니다. inode 번호는 나머지 파일 메타데이터가 저장되는 파일 시스템의 inode 테이블에 대한 인덱스로 사용되는 정수입니다.

디렉토리 권한 r허용목록이름은 있지만 inode 테이블에 저장된 정보(예: 파일 형식, 파일 길이, 파일 권한 등을 가져오거나 파일을 열거나)에는 액세스하지 않습니다. 이렇게 하려면 x디렉터리에 대한 권한이 필요합니다.

그렇기 때문에 ls -l, ls -F, ls색으로 구분된 출력 등은 허가 없이 실패 x하고 그냥 ls성공합니다.

x권한은 inode 액세스만 허용합니다. 즉, 디렉토리에 명시적인 이름이 주어지면 x해당 inode를 찾고 디렉토리 항목의 메타데이터에 액세스할 수 있습니다.

$ chmod 100 d
$ ls -l d/f
-rw-r--r--  1 ccorn  ccorn  0  4 Okt 14:35 d/f
$ ls d
ls: d: Permission denied

따라서 파일을 열거 /a/b/c/f나 해당 메타데이터를 나열하려면 , 및 디렉토리에 권한 을 부여 해야 합니다 /./a/a/b/a/b/cx

당연히 디렉토리 항목을 생성하려면 다음 w과 같은 x권한이 필요합니다.

$ chmod 100 d
$ touch d/g
touch: d/g: Permission denied
$ chmod 200 d
$ touch d/g
touch: d/g: Permission denied
$ chmod 300 d
$ touch d/g
$

Wikipedia에는 ​​기사에 간략한 개요가 있습니다.파일 시스템 권한.

답변2

디렉터리를 읽으려면 디렉터리를 탐색할 수도 있어야 합니다(x비트). 따라서 어떤 방식으로든 디렉토리에 액세스할 수 있도록 하려면 최소한 rx가 필요합니다.

관련 정보