실행 비트 대 읽기 비트 Linux에서 디렉토리 권한은 어떻게 작동합니까?


380

CMS에서 디렉토리 +x를 열려면 디렉토리에 실행 비트 ( ) 세트 가 필요하다는 것을 알았 습니다. 디렉토리를 읽기 위해 실행 권한이 필요한 이유는 무엇이며 Linux에서 디렉토리 권한은 어떻게 작동합니까?


17
... uh, "+ x"플래그가 다음과 같은 것이기 때문에 :)
badp


16
다음과 같이 생각하십시오. 디렉토리 항목에 파일 이름이 포함되어 있으므로 디렉토리를 "읽는"파일을 나열하고 "사용하는"디렉토리는 파일에 액세스합니다.
tylerl

7
디렉토리 실행 비트가 설정 되면 해당 계층트래버스 할 수 있습니다 . "다른"사람들에 속하고 비트 세트 ( chmod 771 dirOne) 만 실행 하면 dirOne 컨텐츠를 나열 할 수 없습니다. 그러나 ( chmod 774 dirTwo) 와 같은 권한으로 하위 디렉토리 "dirTwo"를 포함하고 있다면 실제로 그 내용을 나열 할 수 있습니다!
Stphane

1
다음 방문자는 AskUbuntu : askubuntu.com/q/1106822/295286
Sergiy Kolodyazhnyy에서

답변:


351

Linux에서 디렉토리에 권한을 적용 할 때 권한 비트는 일반 파일과 다른 의미를 갖습니다.

  • 읽기 비트 ( r) 디렉토리 내 파일을 나열 영향을받는 사용자 수
  • 쓰기 비트 ( w) 영향을받는 사용자 생성, 이름 바꾸기 또는 디렉토리 내에서 파일을 삭제하고 디렉토리의 속성을 수정할 수 있습니다
  • 실행 비트 ( x) 디렉토리를 입력 영향을받는 사용자 수 및 액세스 파일과 디렉토리 내부
  • 스티키 비트 ( T또는 t실행 비트가 다른 사람을 위해 설정되어있는 경우) 그 디렉토리에있는 파일과 디렉토리 만 삭제 또는 소유자 (또는 루트)로 이름이 변경 될 수 있음을 명시

25
좋은 대답이지만 마지막 문장이 오도라고 생각합니다. 이러한 권한 중 어느 것도 실제로 파일별로 재정의 될 수 없습니다. 여기에 "액세스"조금 모호 : +x이 통해 파일의 아이 노드에 대한 디렉토리 액세스 권한을 부여에 특정 디렉토리 (이하도 아니다, 음 ... 아마 더 아무것도 chdir필요 +x도). 한 파일의 내용을 읽거나 쓰려면 이 파일 에도 +r/ +w가 필요 하지만이 파일은 고유 한 권한입니다 (아무것도 무시하지 않음).
Stéphane Gimenez

2
나는 마지막 문장 :-) 오해의 소지가 있다고 생각 그 이유는, 불변의 플래그는 파일 시스템의 특정이며 정확하게 그 권한을 무시하지 않습니다
스테판 히메네스에게

1
나는 하나는 크리스 아래에 의해 제공되는 정보 고려할 경우 일부 디렉토리 오해의 소지가있을 수 있습니다에 대한이와 다른 답변에서 ACL을 언급 애플리케이션을 일으킬 유용 할 수 있습니다 생각
user907860

4
Baldrick의 답변에서 아래에 언급 된 것처럼이 답변에 쓰기 비트와 실행 비트의 결합 효과가 언급되어 있지 않은 것 같습니다. 즉, 쓰기 권한 만 있고 실행 권한이없는 경우에는 쓸모가 없습니다.
xji

1
+x디렉토리의 @ StéphaneGimenez " 는 파일 inode에 대한 액세스 권한을 부여합니다"-이것은 좋은 네모 닉처럼 보이지만 아마도 전체 이야기를 말하지는 않습니까? 디렉토리에 실행 비트가 설정되어 있지 않으면 해당 디렉토리에서 파일의 파일 이름을 변경할 수 없습니다. 파일 이름이 inode가 아닌 디렉토리 항목에 저장되어 있기 때문에 이것이 왜 궁금합니다.
Kevin Wheeler

259

먼저 생각하십시오 : 디렉토리는 무엇입니까? 그것은 안에있는 항목 (파일 및 기타 디렉토리)의 목록 일뿐입니다. 그래서 : 디렉토리 = 이름 목록.

읽기 비트 = 설정되면이 목록을 읽을 수 있습니다. 따라서, 예를 들어, 당신이라는 이름의 디렉토리가있는 경우 poems:

  • 당신은 ls poems안에있는 아이템들의 목록을 얻을 수 있습니다 ( -l세부 사항은 공개하지 않습니다!).
  • 명령 줄 완성을 사용할 수 있습니다 (예 :) touch poems/so <TAB> poems/somefile.
  • poems작업 디렉토리를 만들 수 없습니다 (예 : 디렉토리 cd).

Write bit = 설정되면이 목록을 수정할 수 있습니다. 즉 {add, rename, delete} 이름을 지정할 수 있습니다. 그러나! 실행 비트가 설정된 경우에만 실제로 할 수 있습니다.

비트 실행 =이 디렉토리를 작업 디렉토리로 만듭니다 cd. 원하는 경우이 권한이 필요합니다.

  • 안에있는 항목에 액세스 (읽기, 쓰기, 실행)합니다.
  • 목록 자체를 수정하십시오. 즉, 이름을 추가, 이름 바꾸기, 삭제하십시오 (물론 디렉토리에 쓰기 비트가 설정되어 있어야합니다).

재미있는 경우 1 : 디렉토리에 대한 쓰기 + 실행 권한이있는 경우 해당 항목에 대한 쓰기 권한이없는 경우에도 해당 항목에 {delete, rename}있는 항목을 삭제할 수 있습니다. (이를 방지하기 위해 끈적 끈적한 비트를 사용하십시오)

흥미로운 경우 2 : 디렉토리에 대한 실행 (쓰기는 아님) 권한이 있고 그 안에있는 파일에 대한 쓰기 권한이 있으면 파일을 목록에서 제거하기 때문에 파일을 삭제할 수 없습니다. 그러나 텍스트 파일 인 경우 vi를 사용하여 내용을 지우고 모든 내용을 삭제할 수 있습니다. 파일은 여전히 ​​존재하지만 비어 있습니다.

요약:

비트 읽기 = 목록에서 이름을 읽을 수 있습니다.
쓰기 비트 = 실행 비트가 설정된 경우 목록에서 {add, rename, delete} 이름을 사용할 수 있습니다.
비트 실행 =이 디렉토리를 작업 디렉토리로 만들 수 있습니다.

추신 : Kusalananda가 언급 한 기사는 잘 읽었습니다.


17
디렉토리를 목록으로 생각하면 더 명확하고 논리적입니다.
Trismegistos

20
좋은 답변이지만 "작업 디렉토리"라는 용어에도 초점을 맞췄습니다. 나는 필요 x에 대한 비트 있는 이 파일에 액세스 : 위해 cat a/b/c/d, 내가 필요로 x하는 모든에 비트를 a, b그리고 c내가 CWD로 사용하지 않더라도.
glglgl

1
이것은 실행 파일이 아니면 쓸 수 없다는 것을 알게되었습니다! 사례 2도 흥미롭고 정답입니다!
Mirko

1
또 다른 참고 사항은 x디렉토리에 대한 권한 이 있어도 파일x대한 권한 이없는 경우 실제로 파일을 "실행"할 수 없다는 것입니다. 당신은 할 수 있습니다 cat예를 들어 그것, 그러나 당신은 파일 자체를 실행할 수 없습니다.
xji

2
당신이하려는 경우 ls -l폴더에 대한 작업을 모두 필요로 r하고 x권한을.
Eric Wang

44

가능한 모든 권한과 실제 효과로이 표를 준비했습니다.

리눅스 디렉토리 권한

(*) 파일 이름 만 : 크기 나 날짜와 같은 다른 속성은 사용할 수 없습니다. 예를 들어 탭 키를 사용하여 ls 명령이 아닌 자동 완성 기능을 사용할 수 있습니다.

몇 가지 생각 :

  • X 해제 , R 및 W는 대부분 쓸모가 없습니다.
  • X 만으로 RW비활성화 하면 맹목적으로 파일 내용을 읽고 쓸 수 있으며 하위 디렉토리에 액세스 할 수 있으므로 잘못된 보안 감각을 갖게됩니다. 디렉토리의 모든 직계 하위에는 명시적인 권한이 있어야합니다.
  • 드물게 다음 이외의 값을 사용합니다.
    • 0 : 액세스 권한이 없습니다.
    • 1 : 이송이 가능한 최소 접근.
    • 5 : 읽기 / 쓰기를 허용하지만 디렉토리 트리 자체의 구조는 변경하지 않습니다.
    • 7 : 모든 권한.

1
읽기 / 쓰기를 허용하지만 디렉토리 트리 자체의 구조는 변경하지 않으려는 경우 5가 유용한 값으로 간주됩니다.
hgiesel

네 말이 맞아 업데이트!
David

4
훌륭한 요약 차트. 누군가가 디렉토리 -W-와 기능적으로 동등한 것으로 생각한 것이 궁금합니다 ---. 매우 직관적이지 않습니다. 물론 이러한 유형의 저수준 비트는 종종 그렇지 않습니다.
CivFan

2
나는 이것을 Mac에서 테스트했지만 -W-,를 사용하여 디렉토리의 이름을 바꿀 수는 있지만 (스티커 비트가있는 디렉토리) ---. 그 차이 것 같다
cozyconemotel

3
@David, 당신은 끈적 거리는 비트가 없습니다.
Pacerier

42

여기에 좋은 기사가 있습니다.

요약:

x비트 세트가 있는 디렉토리를 사용하면 사용자 cd가이 디렉토리로 디렉토리를 변경 (디렉토리 변경)하고 파일에 액세스 할 수 있습니다.

세부:

  • 읽기 ( r)

    이 디렉토리에 저장된 파일 이름을 읽는 기능

  • 쓰기 ( w)

    실행 권한이있는 경우 디렉토리의 파일 이름을 바꾸거나 새 파일을 만들거나 기존 파일을 삭제하는 기능 실행 권한이 없으면 쓰기 권한은 의미가 없습니다.

  • 실행 ( x)

    받는 능력 cd이 디렉토리에,이 디렉토리에있는 파일을 액세스 할 수 있습니다.

이해하기 쉽도록 몇 가지 예는 다음과 같습니다.

# "Full Access".  Reegen can list, create, delete, rename, delete,
# and stat any files in dir.
# Access to file contents is subject to the permissions
# of the file itself.
# New files can be created, any file can be deleted, regardless of
# file permissions.
drwx------  1 reegen    reegen          4096 Jan 01 2003  dir

# Reegen can do everything in the "Full Access" list except create,
# delete, or rename files in this directory.
dr-x------  1 reegen    reegen          4096 Jan 01 2003  dir

# Reegen can do everything in the "Full Access" list except list the
# filenames in this directory.  If she suspects there is a file
# named "program" she can list it, but cannot do an 'ls'
# of the directory itself.  She can access any file (file
# permissions permitting) if she knows its name.  She can
# create new files, or rename/delete existing ones.
d-wx------  1 reegen    reegen          4096 Jan 01 2003  dir

# Reegen cannot create or delete any files in this directory.
# She can access any file (permissions permitting) if she
# knows its name already.
d--x------  1 reegen    reegen          4096 Jan 01 2003  dir

Hacking Linux Exposed 기사 에는 더 많은 정보가 있습니다.



2

파일 또는 디렉토리에 액세스하는 조작의 경우 먼저 파일 또는 디렉토리의 경로를 분석해야합니다. 해결하려면 사용자에게 최종 경로 구성 요소를 제외하고 경로를 따라 모든 디렉토리에 대한 실행 권한이 있어야합니다. 따라서 디렉토리의 경우 실행 비트가 "해결 가능"을 의미한다고 생각할 수 있습니다.

경로를 가지고 /a/b/c.txt예를 들어, 실행 권한을) 사용자 1 밝혔 //a; 2)에 대한 읽기 권한이 있습니다 /a/b. 3)에 대한 읽기 및 쓰기 권한 /a/b/c.txt.

  • /a읽기 권한이 없으므로 사용자는 (list) 읽기에 실패합니다 . 그러나 경로 확인은 실패하지 않습니다.

  • 사용자는 (목록)을 읽을 수 있습니다 /a/b사용자가 실행 권한을 가지고 있기 때문에, /, /a과에 대한 읽기 권한 /a/b. 읽을 때 /a/b파일 이름 c.txt은 볼 수 있지만 파일 이름이 아닌 디렉토리와 함께 저장되지만 메타 데이터는 파일의 inode에 저장되므로 메타 데이터 (예 : 파일 크기 조정)와 내용은 표시되지 않습니다.

  • 사용자는 읽기 실패 /a/b/c.txt로부터의 경로를 해석 할 때 때문에, //a/a/b, 그것은에 실패 /a/b사용자가 실행 권한을 가지고 있지 않기 때문에.

경로 이름이 파일로 해석되는 방법 도 참조하십시오 .


0

유용한 비유는 각 파일을 책으로, 각 디렉토리를 책을 보관하는 방으로 생각하는 것입니다.

방의 모든 이름을 나열 할 수있는 규칙이 있습니다 : 디렉토리의 읽기 비트. 방에서 책을 제거하는 규칙 : 디렉토리의 쓰기 비트. 그리고 방에 들어가서 탐색하는 규칙 : 결과 디렉토리 실행 비트.

이러한 규칙은 각 책의 규칙과 별개이며 다릅니다. 누군가가 책을 열고 그 내용을 읽을 수 있도록하는 규칙이 있습니다 : 각 파일에 대한 읽기 비트. 책의 내용을 수정하는 규칙이 있습니다 : 각 파일에 대한 쓰기 비트. 그리고 파일을 실행하려면 : 각 파일에 대한 실행 비트.

각 동작마다 3 비트가 있기 때문에 비트를 씁니다. 소유자에 대한 하나의 읽기 비트, 그룹에 대한 하나의 읽기 비트 및 다른 모든 사람 (기타)에 대한 읽기 비트가 있습니다. 이 세 비트 중 하나가 특정 사용자에 대해 설정된 경우 해당 사용자는 읽기 비트를 활성화합니다. 그 비트 중 하나가 활성 인 것으로 밝혀졌다 어떻게 상관 없다 u 개의 SER 또는 g의 roup 또는 O 동일한 효과적인 결과를 가지고 THER.

따라서 사용자는 방에 들어가서 도서관에서 책을 제거 할 수는 있지만 같은 책의 내용을 읽을 수는 없습니다.

따라서 디렉토리 내용 (책 제목)을 나열 할 수있는 사람을 제어하려면 디렉토리에 대한 읽기 비트가 필요합니다.

그리고 실행 비트는 누가 책방에 들어갈 수 있는지를 제어하는 ​​데 사용됩니다.


-1

디렉토리에 대한 실행의 의미는 매우 분명합니다. Windows와 달리 트래버스 권한이 없으므로 무언가를 오버로드해야합니다. 디자이너들은 Execute를 선택했습니다. 실제로 실행하려는 의도가 아닌 것에 실행 권한을 할당하는 컴퓨터 보안 담당자는보기에 무모합니다.


1
실행 허가 비트의 발명은 약 20 년까지 뚜렷한 트래버스 허가의 개념의 발명 이전이다. 이 답변의 논리는 실제와는 다른 역사적인 타임 라인에 따라 다르며 또한 존재 여부 GENERIC_EXECUTE와 그 존재를 인식하지 못합니다 .
JdeBP
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.