+x
내 CMS에서 사용자가 디렉토리를 열려면 디렉토리에 실행 비트( )가 설정되어 있어야 한다는 것을 알았습니다 . 디렉토리를 읽으려면 실행 권한이 필요한 이유는 무엇이며 Linux에서 디렉토리 권한은 어떻게 작동합니까?
답변1
Linux에서 디렉터리에 권한을 적용할 때 권한 비트는 일반 파일과 다른 의미를 갖습니다.
- 이것비트 읽기(
r
)를 사용하면 영향을 받는 사용자가 디렉터리의 파일을 나열할 수 있습니다. - 이것비트를 쓰다(
w
)를 사용하면 영향을 받는 사용자가 디렉터리에서 파일을 생성, 이름 변경 또는 삭제할 수 있을 뿐만 아니라 디렉터리의 속성도 수정할 수 있습니다. - 이것실행 비트(
x
)는 영향을 받은 사용자가 디렉터리에 들어가 그 안에 있는 파일과 디렉터리에 액세스할 수 있도록 허용합니다. - 이것끈끈한 비트(
T
또는t
실행 비트가 다른 사람에 대해 설정된 경우)는 이 디렉터리의 파일 및 디렉터리를 해당 소유자(또는 루트)만 삭제하거나 이름을 바꿀 수 있음을 의미합니다.
답변2
먼저 생각해 보세요. 디렉토리란 무엇입니까? 이는 그 안에 있는 항목(파일 및 기타 디렉터리)의 목록일 뿐입니다. 따라서: 디렉토리 = 이름 목록.
비트 읽기= 설정하면 이 목록을 읽을 수 있습니다. 예를 들어 다음과 같은 파일이 있다고 가정해 보겠습니다 poems
.
ls poems
당신 은 포함된 항목의 목록을 얻을 수 있습니다(-l
세부 사항은 공개되지 않습니다!).- 명령줄 완성(예: )을 사용할 수 있습니다
touch poems/so <TAB> poems/somefile
. poems
작업 디렉토리를 생성 (즉,cd
입력)할 수 없습니다.
비트를 쓰다= 설정되면 이 목록을 수정할 수 있습니다. 즉, 이름을 {추가, 이름 바꾸기, 삭제}할 수 있습니다. 하지만! 실제로 실행 비트도 설정된 경우에만 이 작업을 수행할 수 있습니다.
실행 비트= 이 디렉토리를 작업 디렉토리로 만드십시오. 즉, cd
그 디렉토리로 이동하십시오. 다음을 수행하려면 이 권한이 필요합니다.
- 그 안에 있는 항목에 액세스(읽기, 쓰기, 실행)합니다.
- 목록 자체를 수정합니다. 즉, 목록에 이름을 추가하고, 이름을 바꾸고, 삭제합니다(물론 쓰기 비트는 디렉터리에 설정되어야 합니다).
흥미로운 사례 1: 디렉터리에 대한 쓰기+실행 권한이 있으면 해당 항목에 대한 쓰기 권한이 없더라도 해당 항목을 {삭제, 이름 바꾸기}할 수 있습니다. (이를 방지하려면 끈끈한 비트를 사용하십시오)
흥미로운 사례 2: 디렉터리에 대한 실행(쓰기는 아님) 권한이 있고 그 안에 있는 파일에 대한 쓰기 권한이 있는 경우 파일을 삭제할 수 없습니다(목록에서 파일을 제거하는 것과 관련됨). 그러나 해당 내용을 삭제할 수 있습니다. 예를 들어 텍스트 파일인 경우 vi로 열어 모든 내용을 삭제할 수 있습니다. 파일이 여전히 존재하지만 비어 있습니다.
요약:
비트 읽기= 목록에 있는 이름을 읽을 수 있습니다.
비트를 쓰다= 실행 비트도 설정된 경우 목록에서 이름을 {추가, 이름 바꾸기, 삭제}할 수 있습니다.
실행 비트= 이 디렉터리를 작업 디렉터리로 설정할 수 있습니다.
추신: Kusalananda가 언급한 기사는 읽을 가치가 있습니다.
답변3
가능한 모든 권한과 실제 효과를 나열하는 이 표를 준비했습니다.
디렉토리 권한 |
8진수 | del 이름 바꾸기 파일 생성 |
디렉토리 목록 | 파일 내용 읽기 |
파일 내용 쓰기 |
CD 디렉토리 | CD 하위 디렉토리 |
하위 디렉토리 목록 |
하위 디렉터리 파일에 액세스 |
---|---|---|---|---|---|---|---|---|---|
--- | 0 | ||||||||
-W- | 2 | ||||||||
아르 자형-- | 4 | 파일 이름만(*) |
|||||||
RW- | 6 | 파일 이름만(*) |
|||||||
-엑스 | 1 | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ||
-WX | 삼 | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | |
인수하다 | 5 | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | |
wx | 7 | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ |
(*)파일 이름만: 차원, 날짜 등 다른 속성에는 액세스할 수 없습니다. 예를 들어 Tab 키를 사용하여 자동 완성할 수 있지만 ls 명령을 사용할 수는 없습니다.
몇 가지 생각:
- 그리고X가 설정되지 않았습니다., R 및 W는 대부분 쓸모가 없습니다.
- 엑스홀로읽기 및 쓰기 비활성화맹목적으로 파일 내용을 읽고 쓸 수 있으며 하위 디렉터리에 액세스할 수 있기 때문에 보안에 대한 잘못된 인식을 갖게 됩니다. 이 디렉터리의 모든 직접 하위 디렉터리에 명시적인 권한이 있는지 확인해야 합니다.
- 다음 이외의 값은 거의 사용하지 않습니다.
- 0: 접근할 수 없습니다.
- 1: 순회를 허용하기 위한 최소한의 접근 권한입니다.
- 5: 읽기/쓰기가 허용되지만 디렉터리 트리 자체의 구조는 변경되지 않습니다.
- 7: 전체 권한.
답변4
~에서로버트 러브책 "LINUX 시스템 프로그래밍" 1장 라이센스 -