그 안에 디렉토리 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/c
x
당연히 디렉토리 항목을 생성하려면 다음 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가 필요합니다.