에듀테크 프로젝트 대시보드
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진수 자리를 만든다.
숫자를 외우기 싫다면 누구에게(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 file | who 생략 시 umask 영향 받는 a와 유사 — 보통 모두에게 x |
| 8진수 | 2진수 | 기호 | 의미 |
|---|---|---|---|
| 7 | 111 | rwx | 읽기+쓰기+실행 |
| 6 | 110 | rw- | 읽기+쓰기 |
| 5 | 101 | r-x | 읽기+실행 (디렉터리 진입/스크립트) |
| 4 | 100 | r-- | 읽기만 |
| 1 | 001 | --x | 실행/디렉터리 통과만 (목록은 못 봄) |
| 0 | 000 | --- | 권한 없음 |
r = 파일 목록 읽기(ls),
w = 파일 생성·삭제·이름변경, x = 그 경로를 통과해 안으로 들어가기(cd).
그래서 디렉터리는 보통 755(rwxr-xr-x) — x 없이 r만 있으면
이름은 볼 수 있어도 내용에는 접근할 수 없다.
파일을 새로 만들면 프로그램이 요청한 기본값(파일 666, 디렉터리 777)에서
umask 에 켜진 비트를 뺀다. 리눅스 기본 umask 는 보통 022.
결과 = 기본값 & ~umask.
umask 077 로 두면 새로 만드는 모든 파일이 600, 디렉터리가 700 이 되어
나 외에는 아무도 못 본다 — 공유 서버에서 자주 쓰는 설정이다.
| 비트 | 값 | 파일에서 | 디렉터리에서 |
|---|---|---|---|
| setuid | 4000 | 실행 시 파일 소유자 권한으로 동작 (예: /usr/bin/passwd) | 거의 무시됨 |
| setgid | 2000 | 실행 시 파일 그룹 권한으로 동작 | 새로 만든 파일이 부모 디렉터리 그룹을 상속 |
| sticky | 1000 | (옛날엔 스왑 유지, 지금은 의미 없음) | 자기 파일만 삭제 가능 (/tmp 가 1777) |
ls -l 에서 특수 비트는 x 자리에 겹쳐 보인다:
setuid는 소유자 x자리에 s(x도 있음) / S(x 없음),
sticky는 other x자리에 t / T.
예: -rwsr-xr-x (setuid), drwxrwxrwt (sticky).