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

1. 들어가며

23편에서 기호 방식(u+x)을 다뤘다. 이번 글은 실무에서 더 자주 쓰는 숫자 방식 이다. chmod 755 file처럼 세 자리 8진수로 권한 전체를 한 번에 지정한다.

숫자 방식의 장점은 표준값을 외워 두면 빠르고 실수가 적다 는 것이다. 600, 644, 755, 700 네 가지만 알아도 대부분의 상황을 처리할 수 있다. 이번 글에서는 12가지 조합의 실제 출력으로 각 값의 의미와 용도를 정리한다.


2. 핵심 개념

2-1. 한 칸 계산

각 칸(소유자·그룹·기타)의 세 비트를 더한다.

권한r(4)w(2)x(1)합
rwx4217
rw-4206
r-x4015
r--4004
-wx0213
--x0011
---0000

세 칸을 이어 쓰면 세 자리 숫자다. rwxr-x--- = 7·5·0 = 750.

2-2. 기호 방식과의 차이

숫자 방식기호 방식
적용 범위9비트 전체 덮어쓰기지정한 비트만 조정
적합한 상황표준값으로 통째 설정일부만 추가·제거
예chmod 644 fchmod g-w f

숫자 방식은 항상 전체를 덮어쓰므로, 특정 비트만 바꾸려면 현재 값을 먼저 알아야 한다.


3. 동작 원리

chmod 숫자 방식 — 8진수 표준값

숫자 방식은 지정한 세 자리(때로 특수 권한을 포함한 네 자리, 28편)를 그대로 mode 비트로 설정한다. 커널 입장에서는 chmod() 시스템 콜에 mode 값을 넘기는 것이고, 기호 방식도 내부적으로는 현재 값에 연산을 적용한 뒤 같은 시스템 콜을 호출한다. 결과 저장 방식은 동일하고, 차이는 "현재 값을 유지하느냐" 뿐이다.

표준값을 외워 두는 것이 실무에서 안전한 이유는, 상황마다 계산하면 실수(예: 의도치 않은 x나 w)가 생기기 때문이다. 아래 표준값은 사실상 관용구로 굳어져 있다.


4. 명령어 실습

cd /data && mkdir lab24 && cd lab24

# 1) 12가지 조합을 한 번에
for m in 000 400 600 640 644 664 700 750 751 755 775 777; do
  touch f$m; chmod $m f$m
done
stat -c '%a  %A  %n' f000 f400 f600 f640 f644 f664 f700 f750 f751 f755 f775 f777

# 2) 실무 표준값
touch key.pem && chmod 600 key.pem && ls -l key.pem      # 개인 키
mkdir private && chmod 700 private && ls -ld private       # 개인 디렉터리
touch script.sh && chmod 755 script.sh && ls -l script.sh # 실행 스크립트

5. 실행 결과

실제 실행 결과 — Rocky Linux 9.8 · analyst@rocky9-lab — chmod 숫자 방식 표준값

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

[analyst@rocky9-lab ~]$ cd /data && mkdir lab24 && cd lab24
[analyst@rocky9-lab lab24]$ for m in 000 400 600 640 644 664 700 750 751 755 775 777; do touch f$m; chmod $m f$m; done
[analyst@rocky9-lab lab24]$ stat -c '%a  %A  %n' f000 f400 f600 f640 f644 f664 f700 f750 f751 f755 f775 f777
0  ----------  f000
400  -r--------  f400
600  -rw-------  f600
640  -rw-r-----  f640
644  -rw-r--r--  f644
664  -rw-rw-r--  f664
700  -rwx------  f700
750  -rwxr-x---  f750
751  -rwxr-x--x  f751
755  -rwxr-xr-x  f755
775  -rwxrwxr-x  f775
777  -rwxrwxrwx  f777
[analyst@rocky9-lab lab24]$ echo "---추가 예시---"
---추가 예시---
[analyst@rocky9-lab lab24]$ touch key.pem && chmod 600 key.pem && ls -l key.pem
-rw------- 1 analyst analyst 0 Sep 24 10:50 key.pem
[analyst@rocky9-lab lab24]$ mkdir private && chmod 700 private && ls -ld private
drwx------ 2 analyst analyst 4096 Sep 24 10:50 private
[analyst@rocky9-lab lab24]$ touch script.sh && chmod 755 script.sh && ls -l script.sh
-rwxr-xr-x 1 analyst analyst 0 Sep 24 10:50 script.sh

6. 결과 해석

값기호용도와 주의
000----------모든 접근 차단 (소유자도, root 제외)
400-r--------소유자 읽기만 (읽기 전용 보관)
600-rw-------개인 키·비밀 파일. SSH 개인 키는 이 권한이 아니면 거부됨
640-rw-r-----소유자 쓰기, 그룹 읽기. Ubuntu /etc/shadow가 640 root:shadow
644-rw-r--r--일반 파일 기본. 소유자 쓰기, 모두 읽기
664-rw-rw-r--그룹 공유 편집
700-rwx------개인 디렉터리·스크립트. 소유자 전용
750-rwxr-x---그룹까지 실행·진입 허용
751-rwxr-x--x기타는 진입만(목록 불가). 특정 하위 경로 공유 시
755-rwxr-xr-x실행 파일·공개 디렉터리 기본
775-rwxrwxr-x그룹 협업 디렉터리
777-rwxrwxrwx누구나 수정. 원칙적으로 지양

key.pem을 600으로 만든 이유가 실무적으로 중요하다. SSH는 개인 키 파일의 권한이 그룹·기타에 열려 있으면 키 사용을 거부 한다. 권한이 곧 키의 안전을 보장하기 때문이다.


7. 보안 관점

권장대상
600SSH 개인 키(~/.ssh/id_*), .env, 비밀번호 포함 설정
644웹 콘텐츠, 일반 설정, 공개 문서
700~/.ssh, 개인 작업 디렉터리
755실행 파일, 웹 디렉터리
피할 값777, 666, world-writable
위험 값문제
777 파일누구나 내용 변경 → 스크립트면 코드 주입
666 파일누구나 내용 변경 (실행만 불가)
777 디렉터리 (Sticky 없음)누구나 남의 파일 삭제·교체
개인 키 644다른 사용자가 키 탈취 → SSH가 거부하기도 함

최소 권한 원칙: 필요한 최소한만 준다. 755로 될 것을 777로 주지 않는다.


8. 보안관제 관점

[정기 점검] 표준을 벗어난 권한 탐색
   find /etc -type f -perm -o+w                    # 설정 파일 world-writable
   find /home -name 'id_*' ! -name '*.pub' -perm /077   # 노출된 개인 키
   find /var/www -type f -perm -o+w                # 웹 파일 world-writable
     ↓
[판단]   표준값(600/644/755)에서 벗어난 이유 확인
     ↓
[Evidence] 해당 파일 ctime(권한 변경 시각) + 변경 주체 로그
     ↓
[Response] 표준 권한으로 원복, 키 노출 시 키 교체
관점내용
Baseline주요 경로의 표준 권한을 기준값으로 저장하고 이탈을 탐지
키 노출개인 키가 077 비트(그룹·기타 권한)를 가지면 유출 위험. 발견 시 키 교체 까지
자동화CIS 벤치마크·보안 점검 스크립트가 권한 표준 준수를 검사 (30편)

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

실수결과예방
문제 해결로 chmod 777심각한 노출필요한 최소 권한
개인 키를 644로SSH 거부 또는 유출600
숫자로 특정 비트만 바꾸려다 전체 변경의도치 않은 권한일부 조정은 기호 방식
디렉터리를 644로진입 불가(x 없음)디렉터리는 755/700
네 자리 습관 부족특수 권한(4755) 실수28편에서 다룸

10. 실습 체크리스트

[ ] r(4)+w(2)+x(1) 로 한 칸을 계산할 수 있다
[ ] 750 = rwxr-x--- 처럼 변환할 수 있다
[ ] 600/644/700/755 의 용도를 말할 수 있다
[ ] 개인 키에 600 이 필요한 이유를 안다
[ ] 777/666 을 피해야 하는 이유를 설명할 수 있다
[ ] 숫자 방식이 9비트 전체를 덮어쓴다는 점을 이해했다

11. 핵심 정리

  • 숫자 방식은 각 칸을 r(4)+w(2)+x(1)로 더한 세 자리 8진수다.
  • 표준값: 비밀 파일 600, 일반 파일 644, 개인 디렉터리 700, 실행·공개 755.
  • SSH 개인 키는 600이 아니면 사용이 거부될 수 있다.
  • 777·666·world-writable은 지양한다.
  • 숫자 방식은 9비트 전체를 덮어쓰므로 일부만 바꿀 때는 기호 방식을 쓴다.
  • 표준에서 벗어난 권한, 특히 노출된 개인 키를 정기 점검한다.

12. 다음 편 예고

다음 글 「25. umask 이해하기」 에서는 새로 만드는 파일·디렉터리의 기본 권한을 결정하는 umask의 계산 원리를 다루고, Rocky와 Ubuntu의 기본 umask 차이가 만드는 실제 결과를 확인한다.


참고 자료


시리즈 이동

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

0개의 댓글