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

1. 들어가며

권한을 바꾸는 명령이 chmod(change mode)다. chmod에는 두 가지 표기법이 있다.

  • 기호 방식: chmod u+x file — 누구에게(u) 무엇을(x) 어떻게(+)
  • 숫자 방식: chmod 755 file — 세 칸을 8진수로 (24편)

이번 글은 기호 방식을 다룬다. 기호 방식의 장점은 기존 권한을 유지한 채 일부 비트만 조정 할 수 있다는 것이다. 그리고 재귀 적용 시 반드시 알아야 하는 대문자 X 옵션 — 디렉터리에는 진입 권한을 주면서 데이터 파일은 실행 불가로 두는 — 을 실습으로 확인한다.


2. 핵심 개념

2-1. 구성 요소

chmod [대상][연산][권한] 파일 형식이다.

대상연산권한
u 소유자+ 추가r 읽기
g 그룹- 제거w 쓰기
o 기타= 정확히 지정x 실행
a 전체(= ugo)X 조건부 실행
(생략 시 a)s t 특수 권한

여러 규칙은 쉼표로 연결한다: chmod u=rwx,g=rx,o= file.

2-2. +, -, = 의 차이

연산동작
+지정한 비트를 추가 (나머지 유지)
-지정한 비트를 제거 (나머지 유지)
=지정한 비트로 정확히 설정 (나머지 제거)

=은 덮어쓰기다. chmod g=r file은 그룹 권한을 정확히 r--로 만든다(기존 그룹 w·x 제거).

2-3. 대문자 X

X는 조건부 실행 권한 이다. 다음 경우에만 x를 부여한다.

  • 대상이 디렉터리 일 때
  • 또는 대상 파일에 이미 누군가(u/g/o 중 하나)에게 x가 있을 때

일반 데이터 파일(아무도 실행 권한이 없는)에는 x를 주지 않는다. 재귀 권한 부여에서 핵심적으로 쓰인다.


3. 동작 원리

chmod 기호 방식 — 누구에게 · 무엇을 · 어떻게

기호 방식은 현재 mode 비트에서 지정한 부분만 연산한다. 그래서 "그룹의 쓰기만 빼고 나머지는 그대로" 같은 조정에 적합하다. 숫자 방식은 항상 9비트 전체를 덮어쓰므로, 일부만 바꾸려면 현재 값을 먼저 알아야 한다.

X가 중요한 이유는 재귀(-R) 적용 때문이다. chmod -R g+x dir를 실행하면 디렉터리뿐 아니라 안의 모든 데이터 파일 에 실행 권한이 붙는다. 이미지·설정·문서까지 실행 가능해지는 것은 불필요하고 위험하다. chmod -R g+X dir는 디렉터리와 원래 실행 파일에만 x를 주고 데이터 파일은 그대로 둔다. "그룹이 하위 디렉터리를 드나들 수 있게" 하려는 의도를 정확히 표현한다.


4. 명령어 실습

cd /data && mkdir lab23 && cd lab23

# 1) 000 에서 시작해 비트 하나씩
touch f.sh && chmod 000 f.sh && ls -l f.sh
chmod u+rwx f.sh && ls -l f.sh          # 소유자 rwx 추가
chmod g+r,o+r f.sh && ls -l f.sh        # 그룹·기타 읽기
chmod u-x,g+w f.sh && ls -l f.sh        # 소유자 x 제거, 그룹 w 추가

# 2) = 은 덮어쓰기
chmod a+r f.sh && ls -l f.sh
chmod a-rwx,u+rw f.sh && ls -l f.sh     # 전체 초기화 후 소유자 rw

# 3) 대문자 X — 디렉터리만 x
mkdir d && touch d/inside
chmod -R g+rX d && ls -ld d && ls -l d/inside   # d 는 x, inside 는 x 없음

# 4) = 로 한 번에 정확히 지정
chmod u=rwx,g=rx,o= f.sh && ls -l f.sh

5. 실행 결과

실제 실행 결과 — Rocky Linux 9.8 · analyst@rocky9-lab — chmod 기호 방식

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

[analyst@rocky9-lab ~]$ cd /data && mkdir lab23 && cd lab23
[analyst@rocky9-lab lab23]$ touch f.sh && chmod 000 f.sh && ls -l f.sh
---------- 1 analyst analyst 0 Sep 24 10:50 f.sh
[analyst@rocky9-lab lab23]$ chmod u+rwx f.sh && ls -l f.sh
-rwx------ 1 analyst analyst 0 Sep 24 10:50 f.sh
[analyst@rocky9-lab lab23]$ chmod g+r,o+r f.sh && ls -l f.sh
-rwxr--r-- 1 analyst analyst 0 Sep 24 10:50 f.sh
[analyst@rocky9-lab lab23]$ chmod u-x,g+w f.sh && ls -l f.sh
-rw-rw-r-- 1 analyst analyst 0 Sep 24 10:50 f.sh
[analyst@rocky9-lab lab23]$ chmod a+r f.sh && ls -l f.sh
-rw-rw-r-- 1 analyst analyst 0 Sep 24 10:50 f.sh
[analyst@rocky9-lab lab23]$ chmod a-rwx,u+rw f.sh && ls -l f.sh
-rw------- 1 analyst analyst 0 Sep 24 10:50 f.sh
[analyst@rocky9-lab lab23]$ mkdir d && touch d/inside
[analyst@rocky9-lab lab23]$ chmod -R g+rX d && ls -ld d && ls -l d/inside
drwxr-xr-x 2 analyst analyst 4096 Sep 24 10:50 d
-rw-r--r-- 1 analyst analyst 0 Sep 24 10:50 d/inside
[analyst@rocky9-lab lab23]$ chmod u=rwx,g=rx,o= f.sh && ls -l f.sh
-rwxr-x--- 1 analyst analyst 0 Sep 24 10:50 f.sh

6. 결과 해석

명령결과해석
chmod u+rwx-rwx------소유자에만 rwx 추가
chmod g+r,o+r-rwxr--r--그룹·기타 읽기 추가 (쉼표로 두 규칙)
chmod u-x,g+w-rw-rw-r--소유자 x 제거 + 그룹 w 추가 동시
chmod a+r-rw-rw-r--이미 모두 r이 있어 변화 없음
chmod a-rwx,u+rw-rw-------전체 초기화 후 소유자만 rw. 초기화 관용구
chmod -R g+rX d → d는 drwxr-xr-x디렉터리에 x 부여
chmod -R g+rX d → d/inside는 -rw-r--r--inside 는 x 없음. 대문자 X가 데이터 파일을 걸렀다
chmod u=rwx,g=rx,o=-rwxr-x---각 칸을 정확히 지정 (= 750)

d/inside에 x가 붙지 않은 것이 이번 실습의 핵심이다. 만약 소문자 x(chmod -R g+rx d)를 썼다면 inside도 실행 가능해졌을 것이다.


7. 보안 관점

상황권장 방식이유
웹 디렉터리 재귀 권한 부여chmod -R o+rX가 아니라 파일·디렉터리 분리소문자 x는 업로드된 데이터까지 실행 가능하게 만듦
그룹 협업 디렉터리 접근chmod -R g+rX dir디렉터리 진입만 열고 데이터는 실행 불가
권한 초기화chmod a-rwx,u+rw 또는 숫자 600잔여 권한 제거
실행 권한 회수chmod a-x file스크립트 비활성화
특정 칸만 조정기호 방식나머지 유지

실무 원칙: 파일과 디렉터리는 권한이 다르므로 재귀 적용 시 나눠서 처리한다.

find /var/www/html -type d -exec chmod 755 {} +
find /var/www/html -type f -exec chmod 644 {} +

이 방식이 chmod -R보다 명확하고 안전하다.


8. 보안관제 관점

관점내용
Detectionchmod 실행은 auditd -S chmod,fchmod,fchmodat 규칙으로 기록. 특히 +x, +s(SUID)가 붙는 변경은 주시
위험 패턴업로드 디렉터리·데이터 파일에 +x 부여, chmod 777, chmod -R 777
Investigation권한 변경은 파일의 ctime 을 갱신한다. 의심 파일의 ctime과 sudo/명령 로그를 대조
Response잘못된 재귀 권한은 find로 파일·디렉터리를 나눠 원복
[Detection]  auditd: chmod 4755 /tmp/.helper (uid=48 apache → 대상 root 파일)
     ↓
[판단]       웹 계정이 SUID 설정 시도 → 권한 상승 준비 (28·47편)
     ↓
[Evidence]   대상 파일 stat(ctime), sha256sum, 소유자
     ↓
[Response]   권한 원복(chmod u-s), 파일 격리, 웹 취약점 조사

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

실수결과예방
chmod -R 755로 데이터까지 실행 가능불필요한 실행 권한파일·디렉터리 분리 또는 대문자 X
=을 +처럼 사용기존 권한 제거=은 덮어쓰기임을 인지
chmod -R 대상 경로 오타광범위 권한 변경실행 전 find로 대상 확인
소문자 x로 재귀모든 파일 실행 가능대문자 X
권한만 바꾸고 소유자 방치접근 문제 지속chown도 함께 검토(26편)

10. 실습 체크리스트

[ ] u/g/o/a 와 +/-/= 를 조합해 권한을 조정했다
[ ] = 이 지정한 비트로 덮어쓰는 것을 확인했다
[ ] 쉼표로 여러 규칙을 한 번에 적용했다
[ ] chmod -R g+rX 에서 디렉터리만 x 가 붙는 것을 확인했다
[ ] 대문자 X 와 소문자 x 의 차이를 설명할 수 있다
[ ] 재귀 권한을 find 로 파일·디렉터리 나눠 적용하는 방법을 안다

11. 핵심 정리

  • 기호 방식은 [ugoa][+-=][rwxX]로 필요한 비트만 조정한다.
  • +·-는 나머지를 유지하고, =은 지정한 값으로 덮어쓴다.
  • 대문자 X는 디렉터리와 원래 실행 파일에만 x를 부여해 재귀 적용에서 데이터 파일을 보호한다.
  • 재귀 권한은 chmod -R보다 find -type d/-type f로 나눠 적용하는 것이 안전하다.
  • 권한 변경은 ctime을 갱신하며 auditd로 탐지한다. +x·+s 변경을 주시한다.

12. 다음 편 예고

다음 글 「24. chmod 숫자 방식」 에서는 755, 644, 600, 700 같은 숫자 표기의 계산 원리와 상황별 표준값을 12가지 조합의 실제 출력으로 정리한다.


참고 자료


시리즈 이동

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

0개의 댓글