it-gundan.com

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

CMS에서 디렉토리에 실행 가능 비트 (+x) 사용자가 열 수 있도록 설정합니다. 디렉토리를 읽기 위해 실행 권한이 필요한 이유는 무엇이며 Linux에서 디렉토리 권한은 어떻게 작동합니까?

402
Nick.h

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

  • read bit (r)를 사용하면 영향을받는 사용자가 디렉토리 내의 파일을 나열 할 수 있습니다
  • write bit (w)를 사용하면 영향을받는 사용자가 디렉토리 내에서 파일을 작성, 이름 바꾸기 또는 삭제하고 디렉토리의 속성을 수정할 수 있습니다
  • execute bit (x)를 사용하면 영향을받는 사용자가 디렉토리를 입력하고 내부의 파일 및 디렉토리에 액세스 할 수 있습니다
  • sticky bit (T 또는 다른 사람에 대해 실행 비트가 설정된 경우 t)은 해당 디렉토리 내의 파일 및 디렉토리 만 해당 디렉토리에서 삭제하거나 이름을 바꿀 수 있음을 나타냅니다. 소유자 (또는 루트)
378
Chris Down

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

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

  • ls poems 그러면 (-l 자세한 내용은 공개하지 않습니다!).
  • 명령 줄 완성, 즉 touch poems/so <TAB> poems/somefile.
  • poems를 작업 디렉토리로 만들 수 없습니다 (예 : cd).

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

Execute bit =이 디렉토리를 작업 디렉토리, 즉 cd로 만드십시오. 원하는 경우이 권한이 필요합니다.

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

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

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

요약:

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

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

274
Baldrick

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

linux directory permissions

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

일부 생각 :

  • X unset 을 사용하면 R과 W는 대부분 쓸모가 없습니다.
  • [~ # ~] x [~ # ~] 단독 RW 비활성화 맹목적으로 파일 내용을 읽고 쓰고 하위 디렉토리에 액세스 할 수 있으므로 잘못된 보안 감각을 제공합니다. 디렉토리의 모든 직계 하위에는 명시적인 권한이 있어야합니다.
  • 이외의 다른 값을 사용하는 경우는 거의 없습니다.
    • 0 : 액세스 할 수 없습니다.
    • 1 : 순회를 허용하는 최소 액세스입니다.
    • 5 : 읽기/쓰기를 허용하지만 디렉토리 트리 자체의 구조는 변경하지 않습니다.
    • 7 : 모든 권한.
49
David

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

요약:

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 article 에 더 많은 정보가 있습니다.

45
Kusalananda

Robert Love 님의 저서 "LINUX System Programming"1 장 섹션 permission-

enter image description here

6
alhelal

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

예를 들어 /a/b/c.txt 경로를 사용하여 사용자에게 1) //a에 대한 실행 권한이 있다고 가정하십시오. 2) /a/b에 대한 읽기 권한이 있습니다. 3) /a/b/c.txt에 대한 읽기 및 쓰기 권한.

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

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

  • /a/b/c.txt에서 /에서 /a까지의 경로를 확인할 때 /a/b에서 실패하므로 사용자는 /a/b를 읽지 못합니다. 사용자에게 실행 권한이 없습니다.

경로 이름을 파일로 확인하는 방법 도 참조하십시오.

4
Dagang

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

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

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

각 동작마다 3 비트가 있기 때문에 비트를 씁니다. 소유자에 대한 하나의 읽기 비트, 그룹에 대한 하나의 읽기 비트 및 다른 모든 사람 (기타)에 대한 읽기 비트가 있습니다. 이 세 비트 중 하나가 특정 사용자에 대해 설정된 경우 해당 사용자는 읽기 비트를 활성화합니다. 해당 비트가 ser 또는 g roup 또는 o에 의해 어떻게 활성화되었는지는 중요하지 않습니다. 결과.

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

디렉토리에 read 비트가 필요한 이유는 룸 내용 (책 제목)을 나열 할 수있는 사람을 제어하는 ​​것입니다.

execute 비트는 책방에 들어갈 수있는 사람을 제어하는 ​​데 사용됩니다.

2
Isaac

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

0
NemoX