보통의 파일 권한과 다르게, 리눅스 디렉토리 권한은 X 권한 때문에 이해하기 난해합니다. 이 권한에 대해 알아보고 간단하게 실습해 보겠습니다. 아직, 권한에 대한 이해가 부족하다면, 아래 글을 보고 오면 좋습니다.
리눅스 디렉토리 실행 권한
사실, 디렉토리에도 실행 권한이 있습니다. 그런데 이 문서를 보면, 실행 권한 보다는, 검색, 탐색 권한에 가깝다는 것을 알 수 있습니다. 접근해야 하는 경로가 현재 위치로부터 a/b로 주어졌다고 해 보겠습니다.
![](https://codingdog.pe.kr/wp-content/uploads/2023/09/dr_p1.png)
그러면 현 위치로부터 a 하위 디렉토리인 b로 접근하기 위해 그려지는 그래프는 위와 같습니다. b에 접근하기 위해서, a를 거쳐 가야 합니다.
![](https://codingdog.pe.kr/wp-content/uploads/2023/09/dr_p2.png)
그런데, 이 때, a의 실행 권한이 없다고 하면 어떻게 될까요?
- 이는 디렉토리 a의 search permission이 없다는 의미입니다.
- a에 대해 접근할 수 없기 때문에, b에 대해서도 접근할 수 없습니다.
a에 대해 접근할 수 없다면, a로 이동하는 것도 되지 않습니다.
![](https://codingdog.pe.kr/wp-content/uploads/2023/09/dr_p3.png)
왜? 로그인 한 유저 cho는, t4에 대한 실행 권한이 없기 때문입니다. 그러면 아래의 경우는 어떨까요?
![](https://codingdog.pe.kr/wp-content/uploads/2023/09/dr_p4.png)
cat t4/1.txt는 디렉토리 t4 밑에 있는 1.txt에 접근합니다. 이것 역시 거부당합니다. 왜 그럴까요?
![](https://codingdog.pe.kr/wp-content/uploads/2023/09/dr_p5.png)
먼저, t4/1.txt가 들어왔기 때문에, t4 밑에 있는 1.txt에 접근하는 문제가 됩니다. 그렇기 때문에, 아래와 같은 일들을 수행합니다.
- t4에 접근합니다.
- 그런데 t4의 실행 권한이 없으므로, 거부당합니다.
따라서, 보통 디렉토리에 Execute 권한이 없으면 의미가 없습니다. cd로 접근하는 것 조차 되지 않기 때문입니다.
디렉토리 읽기, 쓰기 권한
이제, 읽기, 쓰기 권한을 알아보겠습니다.
- 읽기 권한은 디렉토리를 열 때 필요합니다.
- 쓰기 권한은 디렉토리에 파일을 추가할 때 필요합니다.
디렉토리에 있는 파일들의 리스트를 볼 때 읽기 권한이 필요하다고 생각하시면 편하겠습니다. 이것도 한 번 보겠습니다.
![](https://codingdog.pe.kr/wp-content/uploads/2023/09/dr_p6.png)
먼저, t3의 권한을 보면, root에 대해서는 rwx 모두 있고, cho 그룹에 대해서는 wx만 있어요. r 권한만 없습니다. dir t3을 하면, 허가 거부가 나왔어요. 이는 아래 2가지 사실을 의미합니다.
- cho가 디렉토리 t3에 대해 읽기 권한만 없었습니다.
- dir t3이 거부되었기 때문에, dir 명령어는 디렉토리 읽기 권한을 필요로 합니다.
쓰기 권한은 어떨까요?
![](https://codingdog.pe.kr/wp-content/uploads/2023/09/dr_p7.png)
t4 디렉토리에 2.txt를 추가한다고 해 보겠습니다. 그러면
- 1.txt만 있었는데
- 2.txt가 있다는 내용이 디렉토리에 추가되어야 합니다.
결국 디렉토리에 정보를 추가로 써야 합니다. 이 경우 t4에 대한 write 권한이 없으면 거부 당합니다.
![](https://codingdog.pe.kr/wp-content/uploads/2023/09/dr_p9.png)
왜 거부당할까요? 저는 t1 작업 디렉토리에서, touch 2.txt를 했습니다.
- 2.txt가 없었으니까 생성됩니다.
- 그런데, 이것은 t1 디렉토리에 2.txt에 대한 정보를 추가로 써야 합니다.
따라서, 거부당합니다. 이제, 아래의 경우를 생각해 봅시다.
![](https://codingdog.pe.kr/wp-content/uploads/2023/09/dr_p8.png)
현재 저는 t1 디렉토리 write 권한이 없습니다. 그런데, t1 하위 디렉토리의 t1에는 rwx 권한이 있습니다. 이 경우, t1 디렉토리 밑에 있는 t1에 1이 제대로 추가될까요?
- t1 디렉토리의 구성 내용은 바뀌지 않았습니다.
- 단지, t1 밑에 있는 t1의 구성 내용이 바뀌었습니다.
- 해당 디렉토리에 대해 저는 rwx 권한을 가지고 있었습니다.
따라서, 이 경우 파일 추가가 됩니다. 2번째 부분이 중요해요.
![](https://codingdog.pe.kr/wp-content/uploads/2023/09/dr_p10.png)
리눅스 디렉토리 권한 w가 없는 t1 디렉토리 아래에 있는 1.txt를 수정하는 것은 어떨까요?
- 디렉토리가 아닌 파일 1.txt를 수정하는 것입니다.
- 따라서, 1.txt의 권한을 따라가는데, cho는 1.txt의 write 권한이 있습니다.
따라서, 수정이 정상적으로 수행됩니다.