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


14

나는 그 안에 디렉토리 d와 파일을 만들었 f습니다. 그런 다음 해당 디렉토리에 대한 읽기 권한 만 부여했습니다. 나는 이것이 파일을 나열 할 수 있다는 것을 이해해야 하지만 (예 : here ) 할 수는 없습니다.

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

중복은 질문에 대답하지 않습니다. 그것은 당신이 할 수없는 것을 보여줄 수 있다는 것을 의미합니다. @ccorn의 답변은 완벽합니다.
wrgrs

와우, 물고기는 (초기) 누락 된 정보의 다소 중요한 부분입니다.
Stephen Kitt

예, 맞습니다. 추가해야하지만 alias ls='ls -G'많은 사람들이 생각하는 것처럼 bash에서도 동일한 일이 발생 합니다.
wrgrs

나를 위해한다. MacOS를 사용하고 있습니까? 여기 또 다른 질문이있을 수 있습니다. 편집 : 네, Linux에서 다른 동작을 얻습니다.
wrgrs

답변:


8

몇 가지 준비 사항만으로도 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

전통적인 유닉스 파일 시스템에서 디렉토리는 단순히 (이름, 아이 노드 번호) 쌍의 목록이었습니다. inode 번호는 파일 메타 데이터의 나머지 부분이 저장되는 파일 시스템의 inode 테이블에 대한 색인으로 사용되는 정수입니다.

r디렉토리에 권한이 있습니다 목록 등 파일 형식, 파일 길이, 파일 사용 권한을 얻고, 또는 파일을 여는 인 아이 노드 테이블에 저장된 정보를 그 안에 이름이 있지만 액세스 할 수 있습니다. 이를 위해서는 x디렉토리에 대한 권한 이 필요합니다 .

이유입니다 ls -l, ls -F, ls색상 코드 출력 등으로하지 않고 실패 x의 허가 단순한는 반면, ls성공합니다.

x권한 만, 그 디렉토리 내에서 명시 적으로 이름이 지정됩니다 아이 노드 액세스를 허용 x의 아이 노드 및 디렉토리 항목의 메타 데이터에 대한 액세스를 조회 할 수 있습니다 :

$ 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권한.

당연히 디렉토리 항목을 작성하려면 wx권한 이 모두 필요합니다 .

$ 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는 파일 시스템 사용 권한 에 대한 기사를 간략하게 소개 합니다 .


놀랄 만한. /bin/ls d나에게 내용을 보여줍니다. 감사!
wrgrs

따라서 재정의 문제였습니다 ( -G색상 출력의 경우 메타 데이터가 필요하므로 x파마). 따라서와 unalias ls와의 준비 unset CLICOLOR. unset -f ls그러한 함수 정의를 제거하기 위해 추가해야 합니다. 편집했습니다.
ccorn


4

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


2
아닙니다. 디렉토리가 실행 가능하지 않더라도 디렉토리에 파일 ls을 계속 나열 할 수 있어야합니다 .
Stephen Kitt

읽기 권한을 해제 할 수 있습니다. 그러면 파일에 액세스 할 수는 있지만 디렉토리의 내용을 나열 할 수는 없습니다.
Kusalananda

@ Kusalananda-좋은 지적, 실제로 나는 이것을 때때로 사용합니다.
Soruk

@Stephen Kitt-어쩌면 그것은 구현되어야하지만 구현은 그렇지 않습니다.
Soruk

1
@ Sooruk과 질문은 여전히 ​​남아 있습니다. 왜 그렇지 않습니까?
Stephen Kitt
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.