한양과학기술고등학교

에듀테크 프로젝트 대시보드

Unix 파일 권한 (chmod)

Unix 파일 권한 (chmod)

리눅스에서 모든 파일과 디렉터리는 소유자(user) · 그룹(group) · 그 외(other) 세 부류에게 각각 읽기(r) · 쓰기(w) · 실행(x) 권한을 준다. 이 9개의 on/off 비트를 3비트씩 묶으면 chmod 754 같은 8진수 표기가 되고, ls -l 은 이를 rwxr-xr-- 처럼 보여 준다. 아래 격자를 눌러 비트를 직접 켜고 꺼 보자.

권한 비트 계산기

각 칸은 권한 비트 하나다. r=4, w=2, x=1 을 더하면 그 부류의 한 자리 숫자가 된다. 맨 윗줄(주황색)은 특수 비트(setuid·setgid·sticky)로 네 번째 8진수 자리를 만든다.

setuid / r
setgid / w
sticky / x
특수
Ssetuid
Ssetgid
Tsticky
소유자
user
rread · 4
wwrite · 2
xexec · 1
그룹
group
rread · 4
wwrite · 2
xexec · 1
그 외
other
rread · 4
wwrite · 2
xexec · 1
8진수 (chmod)
644
기호 표기
rw-r--r--
명령
chmod 644 file

기호(symbolic) 모드

숫자를 외우기 싫다면 누구에게(who) + 무엇을(+ - =) + 어떤 권한(rwx) 형태로 쓴다. 여러 변경은 쉼표로 잇는다. chmod 는 현재 값에서 상대적으로 고친다.

명령뜻
chmod u+x run.sh소유자에게 실행 권한 추가
chmod go-w file그룹·그 외의 쓰기 권한 제거
chmod a=r file모두(a) 권한을 읽기만으로 정확히 설정 (= 444)
chmod u+rwx,go= secret소유자는 전부, 나머지는 아무 권한 없음 (= 700)
chmod -R o-rwx dir/-R 로 디렉터리 안 모든 항목에 재귀 적용
chmod +x filewho 생략 시 umask 영향 받는 a와 유사 — 보통 모두에게 x

한 자리 = 3비트

8진수2진수기호의미
7111rwx읽기+쓰기+실행
6110rw-읽기+쓰기
5101r-x읽기+실행 (디렉터리 진입/스크립트)
4100r--읽기만
1001--x실행/디렉터리 통과만 (목록은 못 봄)
0000---권한 없음
디렉터리에서는 의미가 다르다. r = 파일 목록 읽기(ls), w = 파일 생성·삭제·이름변경, x = 그 경로를 통과해 안으로 들어가기(cd). 그래서 디렉터리는 보통 755(rwxr-xr-x) — x 없이 r만 있으면 이름은 볼 수 있어도 내용에는 접근할 수 없다.

umask — 새 파일의 기본 권한

파일을 새로 만들면 프로그램이 요청한 기본값(파일 666, 디렉터리 777)에서 umask 에 켜진 비트를 뺀다. 리눅스 기본 umask 는 보통 022.

기본값rw-rw-rw- umask----w--w- = 결과rw-r--r-- (644)
계산은 비트 단위 AND NOT 이다: 결과 = 기본값 & ~umask. umask 077 로 두면 새로 만드는 모든 파일이 600, 디렉터리가 700 이 되어 나 외에는 아무도 못 본다 — 공유 서버에서 자주 쓰는 설정이다.

특수 비트 3가지

비트값파일에서디렉터리에서
setuid4000실행 시 파일 소유자 권한으로 동작 (예: /usr/bin/passwd)거의 무시됨
setgid2000실행 시 파일 그룹 권한으로 동작새로 만든 파일이 부모 디렉터리 그룹을 상속
sticky1000(옛날엔 스왑 유지, 지금은 의미 없음)자기 파일만 삭제 가능 (/tmp 가 1777)
ls -l 에서 특수 비트는 x 자리에 겹쳐 보인다: setuid는 소유자 x자리에 s(x도 있음) / S(x 없음), sticky는 other x자리에 t / T. 예: -rwsr-xr-x (setuid), drwxrwxrwt (sticky).