파일 · 권한 · 사용자 관리 22 / 50 · Part 3. Linux 파일 권한
실습 환경: Rocky Linux 9.8 · Ubuntu 24.04.5 (Docker 격리 컨테이너, 테스트 계정 analyst)
기초편 연계: 「리눅스 시스템 기초」 15. Linux 파일 권한 이해

1. 들어가며

21편에서 권한은 r·w·x 세 비트라고 했다. 그런데 이 세 비트는 파일과 디렉터리에서 전혀 다른 것을 의미 한다. 이 차이를 정확히 모르면 다음과 같은 상황을 설명할 수 없다.

  • 목록은 보이는데 파일을 열 수 없다
  • 목록은 못 보는데 이름을 알면 파일이 열린다
  • 읽기 전용 파일인데 삭제된다

이번 글에서는 이 세 가지를 모두 실습으로 재현한다. 특히 마지막 — 파일 삭제 권한이 파일이 아니라 상위 디렉터리의 w 에서 나온다는 사실은 Sticky Bit(30편)와 권한 설계의 핵심 근거다.


2. 핵심 개념

2-1. 같은 기호, 다른 의미

권한파일디렉터리
r내용 읽기안의 이름 목록 조회 (ls)
w내용 수정안에서 파일 생성·삭제·이름 변경
x프로그램 실행디렉터리 안으로 진입·통과 (cd, 경로 접근)

디렉터리에서 w가 "안의 파일을 만들고 지우는 권한"이라는 점이 핵심이다. 파일을 삭제할 수 있는지는 그 파일 이 아니라 파일이 든 디렉터리 의 w가 결정한다.

2-2. r과 x는 독립적

디렉터리의 r(목록 조회)과 x(진입)는 별개다. 네 가지 조합이 가능하다.

디렉터리 권한ls (r)cd·파일접근 (x)
r-x (5)가능가능
r-- (4)목록만, 파일 열기 불가불가
--x (1)목록 불가, 이름 알면 접근가능
--- (0)불가불가

3. 동작 원리

같은 rwx, 다른 의미 — 파일 vs 디렉터리

디렉터리는 "이름 → inode 번호" 목록을 담은 파일이다(01편). 이 관점에서 권한을 다시 보면 자연스럽다.

  • r(목록 읽기): 디렉터리의 데이터 블록(이름 목록)을 읽는 권한. ls가 이걸 쓴다.
  • x(통과): 목록에서 특정 이름의 inode 번호를 찾아 다음 단계로 진행 하는 권한. cd와 경로 해석이 이걸 쓴다.
  • w(수정): 목록에 항목을 추가·제거 하는 권한. 파일 생성·삭제·이름 변경이 곧 목록 수정이다.

그래서 파일 삭제(unlink)는 파일 내용을 건드리지 않는다. 디렉터리의 이름 목록에서 항목 하나를 지우는 작업 이다. 파일이 읽기 전용(444)이든 아니든 상관없이, 상위 디렉터리에 w가 있으면 삭제된다.

--x만 있고 r이 없는 경우도 이 구조로 설명된다. 목록은 못 읽지만(r 없음), 이름을 정확히 알면 그 이름의 inode로 통과할 수 있다(x 있음). 그래서 cat enterable/known.txt는 성공한다.


4. 명령어 실습

listable(744)과 enterable(711)은 root 소유다. analyst는 other 칸이 적용된다. box(777) 안의 ro.txt(444)는 root 소유의 읽기 전용 파일이다.

cd /data/lab22

# 1) r만 있는 디렉터리 (744) — 목록은 되지만 파일 열기 실패
ls -ld listable enterable
ls listable
cat listable/a.txt              # Permission denied (x 없음)

# 2) x만 있는 디렉터리 (711) — 목록 실패, 이름 알면 성공
ls enterable                    # Permission denied (r 없음)
cat enterable/known.txt         # 이름을 알면 열림 (x 있음)

# 3) 읽기 전용 파일이 삭제되는 이유
ls -l box/ro.txt                # -r--r--r-- (444)
echo "try append" >> box/ro.txt # Permission denied (파일 w 없음)
rm -f box/ro.txt                # 삭제 성공 (디렉터리 box 가 777)
ls box

5. 실행 결과

실제 실행 결과 — Rocky Linux 9.8 · analyst@rocky9-lab — 파일 vs 디렉터리 권한

텍스트 원본(실제 출력):

[analyst@rocky9-lab ~]$ cd /data/lab22
[analyst@rocky9-lab lab22]$ ls -ld listable enterable
drwx--x--x 2 root root 4096 Sep 24 10:50 enterable
drwxr--r-- 2 root root 4096 Sep 24 10:50 listable
[analyst@rocky9-lab lab22]$ echo "== listable(744): other=r-- =="
== listable(744): other=r-- ==
[analyst@rocky9-lab lab22]$ ls listable
a.txt
[analyst@rocky9-lab lab22]$ cat listable/a.txt
cat: listable/a.txt: Permission denied
[analyst@rocky9-lab lab22]$ echo "== enterable(711): other=--x =="
== enterable(711): other=--x ==
[analyst@rocky9-lab lab22]$ ls enterable
ls: cannot open directory 'enterable': Permission denied
[analyst@rocky9-lab lab22]$ cat enterable/known.txt
B
[analyst@rocky9-lab lab22]$ echo "== 읽기전용 파일이지만 디렉터리가 777 =="
== 읽기전용 파일이지만 디렉터리가 777 ==
[analyst@rocky9-lab lab22]$ ls -l box/ro.txt
-r--r--r-- 1 root root 17 Sep 24 10:50 box/ro.txt
[analyst@rocky9-lab lab22]$ echo "try append" >> box/ro.txt
-bash: box/ro.txt: Permission denied
[analyst@rocky9-lab lab22]$ rm -f box/ro.txt && echo "삭제 성공 (파일이 아니라 디렉터리 w 로 결정)"
삭제 성공 (파일이 아니라 디렉터리 w 로 결정)
[analyst@rocky9-lab lab22]$ ls box

6. 결과 해석

출력해석
drwxr--r-- listableother 칸 r--(4). 목록 읽기만 가능
ls listable → a.txtr이 있어 이름 목록은 보인다
cat listable/a.txt → Permission deniedx가 없어 파일로 진입(통과) 할 수 없다
drwx--x--x enterableother 칸 --x(1). 통과만 가능
ls enterable → Permission deniedr이 없어 목록을 못 읽는다
cat enterable/known.txt → B이름을 알면 x로 통과해 접근 성공
-r--r--r-- box/ro.txt파일은 읽기 전용(444)
echo >> box/ro.txt → Permission denied파일 w가 없어 내용 수정 불가
rm -f box/ro.txt → 삭제 성공파일 권한과 무관. 상위 box가 777이라 삭제 가능

세 번째 블록이 이번 글의 핵심이다. 같은 파일에 대해 내용 수정은 거부되고 삭제는 성공 한다. 삭제는 파일이 아니라 디렉터리를 수정하는 작업이기 때문이다.


7. 보안 관점

상황위험대응
로그 디렉터리가 그룹·기타 쓰기 가능로그 파일이 읽기 전용이어도 삭제·교체 가능로그 디렉터리 권한 축소, append-only(chattr +a)
공용 디렉터리(/tmp)의 삭제 문제누구나 남의 파일 삭제 가능Sticky Bit(30편)로 소유자만 삭제하게 제한
--x 디렉터리로 "은닉"목록은 못 보지만 이름 추측 시 접근은닉일 뿐 보안 아님. 실제 보호는 권한·소유자
홈 디렉터리 other x경로를 알면 하위 파일 접근 경로 열림홈 디렉터리 700/750
웹 루트 디렉터리 w웹 계정이 파일 생성·교체 → 웹셸업로드 폴더만 제한적 쓰기

핵심 원칙: 민감 파일을 보호하려면 파일 권한만으로 부족하다. 상위 디렉터리의 w와 경로상의 x까지 함께 통제 해야 한다.


8. 보안관제 관점

[점검]   로그·설정 디렉터리의 쓰기 권한
         find /var/log /etc -xdev -type d -perm -o+w -o -perm -g+w 2>/dev/null
     ↓
[판단]   읽기 전용 로그 파일이라도 디렉터리 w 가 열려 있으면 삭제·교체 가능
     ↓
[강화]   로그 파일 append-only: chattr +a /var/log/secure
         디렉터리 권한 축소, Sticky Bit 확인
     ↓
[Detection] 로그 삭제·교체는 auditd unlink/rename 규칙으로 (10편)
관점내용
경로 전체 점검파일 하나가 아니라 경로 전체의 권한을 본다. namei -l /path/to/file로 상위 디렉터리 권한까지 확인
삭제 방어중요한 파일은 상위 디렉터리 권한 + chattr +a(추가만 허용)로 삭제·변조를 막는다
Investigation"파일 권한이 444였는데 삭제됐다"는 모순은 디렉터리 w로 설명된다. 조사 시 디렉터리 권한도 기록

9. 실무에서 자주 발생하는 실수

실수결과예방
파일을 444로 만들면 삭제도 막힌다고 생각디렉터리 w로 삭제됨상위 디렉터리 권한 함께 통제
디렉터리에 x 없이 r만 부여목록은 보이나 파일 접근 불가접근이 필요하면 r-x
--x 디렉터리를 보안 수단으로 사용이름 추측 시 접근실제 보호는 권한·소유자
홈 디렉터리를 755로 방치경로 통과로 하위 노출700/750
로그 삭제 방지를 파일 권한으로만디렉터리 w로 우회chattr +a, 원격 전송(10편)

10. 실습 체크리스트

[ ] 디렉터리의 r/w/x 가 파일과 다른 의미임을 설명할 수 있다
[ ] r만 있는 디렉터리에서 목록은 되지만 파일 열기가 안 됨을 확인했다
[ ] x만 있는 디렉터리에서 이름을 알면 접근됨을 확인했다
[ ] 읽기 전용 파일이 디렉터리 w 때문에 삭제되는 것을 재현했다
[ ] 파일 삭제 권한이 상위 디렉터리에서 나온다는 것을 이해했다
[ ] namei -l 로 경로 전체 권한을 점검하는 방법을 안다

11. 핵심 정리

  • 디렉터리의 r은 목록, w는 생성·삭제·이름 변경, x는 진입·통과다.
  • 디렉터리의 r과 x는 독립적이다. r만 있으면 목록만, x만 있으면 이름을 알 때만 접근된다.
  • 파일 삭제 권한은 파일이 아니라 상위 디렉터리의 w 에서 나온다.
  • 읽기 전용 파일도 상위 디렉터리에 w가 있으면 삭제된다.
  • 민감 파일 보호는 파일 권한 + 상위 디렉터리 권한 + 경로상 x + chattr +a를 함께 고려한다.
  • 공용 디렉터리의 삭제 문제는 Sticky Bit로 제한한다.

12. 다음 편 예고

다음 글 「23. chmod 기호 방식」 에서는 u·g·o·a와 +·-·=를 조합해 권한을 세밀하게 조정하는 방법, 그리고 파일에는 실행 권한을 주지 않으면서 디렉터리에만 x를 부여하는 대문자 X 옵션을 실습한다.


참고 자료


시리즈 이동

profile
코드에 숨겨진 위협을 읽고 AI로 보안의 미래를 설계합니다. 프론트엔드 개발 경험을 자산 삼아 더 견고하고 지능적인 보안 운영 시스템을 구축해 나가는 과정을 기록합니다

0개의 댓글