r- 디렉토리 권한은 Linux에서 어떻게 작동합니까?


11

디렉토리를 만들었습니다. 생성 된 권한은 다른 사용자에게 있습니다.

drwxr--r-- 5 사용자 사용자 4096 2012-09-15 19:30 사이트

다른 사용자로 디렉토리에서 ls -l을 수행하는 경우

ls -l / home / user / sites

이것은 디렉토리 출력입니다. 해당 디렉토리에 x 비트를 설정하지 않으면 파일 이름이 전혀 표시되지 않는다고 생각했습니다.

d????????? ? ? ? ?                ? dev.user.com  
-????????? ? ? ? ?                ? user.20120914_082804.sql.gz   
d????????? ? ? ? ?                ? shared  
-????????? ? ? ? ?                ? shared.tar.gz  
-????????? ? ? ? ?                ? www.20120914_083256.tar.gz
d????????? ? ? ? ?                ? www.user.com

여기에 약간의 불일치가 있습니까?

답변:


16

x실제로 디렉토리 있고 디렉토리의 파일에 액세스 r할 수있는 권한을 부여 하고 디렉토리 의 내용을 볼 수있는 권한을 부여합니다.

디렉토리에 x비트 를 제공하고 비트를 제거 하여 상황을 되 돌리면 r사용자 shared.tar.gz는 파일 자체에 대한 적절한 권한을 가정 하여 열 수 있지만 ls디렉토리에 파일을 나열 할 수 없으므로 파일 이름을 미리 알고있는 경우에만 열 수 있습니다 .


1
나는 이것을 테스트하고 당신에게 돌아올 것입니다. 나는 항상 Linux 파일 공유의 이러한 측면이 혼란 스러웠다는 것을 발견했다.
vfclists

이 동작은 Linux 고유의 것이 아닙니다. 유닉스 호환 시스템 인 리눅스 (UNIX)의 초기 시절로 거슬러 올라갑니다. 윈도우 NT ACL 항목은 비슷한 권한 비트를 가지고 있습니다.

2

이러한 권한 해석은 초기 Unix 파일 시스템으로 거슬러 올라갑니다. 처음에는 파일 만있었습니다. (음, 장치 및 파이프, 그리고 ...하지만 여기서 100 % 엄격하게 정확하지는 않지만 스토리를 이야기하려고합니다. 게다가 모든 것이 파일이기 때문에 장치 및 파이프 및 기타 모든 것에 적용됩니다. 디렉토리).

디렉토리는 파일 시스템이 디렉토리 트리를 설명하는 메타 데이터와 그에 포함 된 파일을 보유하기 위해 사용하는 파일입니다. 디렉토리의 각 파일은 데이터가 저장된 inode 번호, 파일 크기, 타임 스탬프 및 권한 단어와 함께 파일 이름 (원래 14 자, IIRC)을위한 공간이 포함 된 간단한 데이터 구조로 설명되었습니다. . 모든 디렉토리는 이름이 .and ..인 두 항목으로 시작했습니다 . 첫 번째는이 디렉토리의 inode를 가리키고 두 번째는 상위 디렉토리의 inode를 가리 킵니다.

권한 단어에는 소유자, 같은 그룹의 다른 구성원 및 세계의 처리를 설명하는 9 비트가 있습니다. 각 플래그에 대한 3 비트는 관련 사용자가 파일을 읽거나 쓰거나 실행할 수 있는지 여부입니다. (내가 무시하고있는 16 비트 권한 단어에 5 비트가 더 있음을 알 수 있습니다. 결국에는 의미가 부여되었지만 스토리의이 부분과 관련이 없습니다.) 리눅스를 포함한 초기 유닉스의 모든 후손들에서 비트는 거의 동일하게 유지되었습니다.)

따라서 디렉토리가 실제로 특별한 종류의 파일이고 일부 디렉토리의 항목으로 설명되는 경우 분명히 권한 비트가 있으며 해당 비트는 아마도 무언가를 의미합니다. 그러나 문제는 정확히 무엇입니다. 이러한 비트에 의미를 할당하는 가장 쉬운 방법은 처음부터 의미를 변경하지 않는 것입니다. 그리고 그것은 본질적으로 이루어졌습니다.

따라서 읽기 비트는 사용자가 디렉토리 자체를 읽을 수 있음을 의미합니다. 이는 고전적으로 독자에게 파일 이름, 타임 스탬프, 크기 및 각 파일 데이터의 inode 번호에 대한 액세스 권한을 부여합니다. 특히 rset을 사용 ls하면 디렉토리에있는 모든 파일의 이름을 볼 수 있지만 나열된 파일을 열거 나 사용하는 데 충분하지 않습니다.

실행 비트는 사용자가 디렉토리를 "실행"할 수 있음을 의미합니다. 디렉토리는 특별하기 때문에 실제로 실행한다는 것은 이름으로 항목을 찾아서 사용한다는 것을 의미합니다. 즉, 파일 x이 설정되어 있으면 파일을 열려고 시도 할 수 있지만 파일 r이름을 찾을 수 없습니다. 물론 요청 된 파일의 권한도 액세스에 영향을 미치므로 x디렉토리 에서도 파일을 제공하지 않으면 파일을 읽을 수 없습니다 r.

쓰기 비트는 사용자가 디렉토리에 쓸 수 있지만 당연히 파일 시스템 자체에 의해서만 중재됨을 의미합니다. 즉, wset을 사용하면 해당 디렉토리에 새 파일을 작성하거나 기존 파일의 디렉토리 항목을 편집 할 수 있습니다. 그러나 x설정하지 않으면 실제로 파일을 사용할 수 없으며 파일을 r볼 수 없습니다.

더 복잡한 사용자 아이덴티티 모델이 Unix와 그 후손에서 진화함에 따라, 동일한 기본 설명은 크게 변하지 않았습니다.

즉, r당신이 그 내용을 볼 수 있다는 것을 의미 x수단 당신이 그것을 사용할 수 있으며, w수단 당신도 디렉토리에 대한 수정할 수 있습니다.


mode_t조금 더 설명 할 수 있다고 가정합니다 (권한과 파일 유형이 동일한 32 비트 필드에 저장되는 부분)
SaveTheRbtz

1
저는 80 년대 유닉스 사용자이자 개발자였습니다. 나는 역사적 맥락에서 볼 때 오늘날 진실이 무엇인지에 대한 완전한 이야기를 이야기하려고하지 않았으며, 유닉스를 처음 배울 때 내가 직면했던 것과 같은 수수께끼가 오늘 묻고 실질적으로 나는 1983 년에 대한 더 많은 것들을 변화에 지역 전문가에서 가져온 같은 설명은, 더 그들은 .... 동일하게 유지
RBerteig
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.