공든탑앱 열기

SetUID·SetGID·Sticky Bit

리눅스마스터 2급 · 파일 시스템 관련 명령어 · 약 12분

쉽게 말하면

평범한 읽기·고치기·실행 말고 특별한 권한 세 가지예요. 실행하는 동안 잠깐 주인 권한을 빌려 주기(SetUID), 그룹 권한을 빌려 주기(SetGID), 공용 폴더에서 남의 파일은 못 지우게 하기(Sticky)예요. 내 비밀번호를 바꾸는 passwd 명령이 첫 번째 예예요.

시험용 정의

특수 권한은 rwx 앞에 붙는 네 번째 자리다. SetUID(4000): 실행 시 파일 소유자 권한으로 동작. SetGID(2000): 실행 시 파일 그룹 권한으로 동작, 디렉터리에 걸면 안에 만든 파일이 디렉터리 그룹을 물려받음. Sticky Bit(1000): 디렉터리에 걸면 누구나 파일을 만들 수 있어도 자기 파일만 지울 수 있음.

비유로 이해하기

SetUID는 "이 출입증을 든 사람은 누구든 관리인 권한으로 통과", Sticky는 "공용 사물함: 누구나 넣을 순 있지만 남의 칸은 못 비움"이다.

자세히

그림으로 보기: 특수 권한이 보이는 자리

chmod 4755 (SetUID)
rws
소유자
r-x
그룹
r-x
기타
chmod 2755 (SetGID)
rwx
r-s
r-x
chmod 1777 (Sticky Bit)
rwx
rwx
rwt
x 권한이 없으면 대문자 S·T 로 보인다. /tmp 는 1777, passwd 명령은 SetUID

세 가지를 한 표로

특수 권한숫자기호표시 자리파일에 걸면디렉터리에 걸면대표 예
SetUID4000u+s소유자 x 자리 s실행하는 동안 파일 소유자 권한(거의 쓰지 않음)/usr/bin/passwd
SetGID2000g+s그룹 x 자리 s실행하는 동안 파일 그룹 권한안에 만든 파일이 디렉터리 그룹을 물려받음팀 공유 디렉터리, /usr/bin/write
Sticky Bit1000o+t기타 x 자리 t(의미 없음)누구나 만들 수 있지만 자기 파일만 삭제/tmp, 공용 업로드 디렉터리

숫자 계산

특수 권한 숫자는 SetUID 4, SetGID 2, Sticky 1을 더해서 맨 앞자리에 쓴다.

  • 4755 = SetUID + rwxr-xr-x
  • 2775 = SetGID + rwxrwxr-x
  • 1777 = Sticky + rwxrwxrwx(/tmp)
  • 3770 = SetGID(2) + Sticky(1) + rwxrwx--- → 그룹원끼리만 쓰는 공유 디렉터리인데, 새 파일은 디렉터리 그룹을 물려받고 남의 파일은 못 지운다
  • 6755 = SetUID + SetGID

자주 틀리는 점

  • Sticky 비트는 기타 사용자(o) 자리에만 건다. chmod g+t나 chmod u+t는 잘못된 사용이다
  • Sticky 비트는 디렉터리용이다. 일반 파일에 거는 건 의미 있는 사용 사례가 아니다
  • SetGID를 디렉터리에 걸면 새 파일의 그룹이 바뀌는 것이지 소유자가 바뀌는 게 아니다
  • 특수 권한은 ls -l(파일)·ls -ld(디렉터리)로 확인한다

시험에 이렇게 나와요

확인 문제

Q1. /etc/shadow는 root만 읽고 쓸 수 있다. 그런데 일반 사용자가 passwd로 자기 비밀번호를 바꾸면 /etc/shadow가 수정된다. 어떻게 가능할까?

  1. passwd는 커널의 일부라서
  2. passwd 파일에 SetUID가 걸려 있어 실행하는 동안 소유자(root) 권한으로 동작해서
  3. /etc/shadow가 사실 모두에게 쓰기 허용이라서
  4. sudo가 자동으로 실행되어서
정답 보기

2번 passwd 파일에 SetUID가 걸려 있어 실행하는 동안 소유자(root) 권한으로 동작해서

/usr/bin/passwd는 -rwsr-xr-x root root다. 소유자 x 자리의 s가 SetUID로, 누가 실행하든 그 프로그램은 파일 소유자(root)의 권한으로 동작한다.

Q2. -rwsr-xr-x를 숫자로 나타내면?

  1. 755
  2. 1755
  3. 2755
  4. 4755
정답 보기

4번 4755

소유자 자리 s = SetUID(4) + 755.

Q3. /tmp 디렉터리에 설정된 특수 권한은?

  1. umask
  2. SetUID
  3. SetGID
  4. Sticky Bit
정답 보기

4번 Sticky Bit

Sticky Bit다. 권한이 drwxrwxrwt(1777)라 누구나 파일을 만들 수 있지만 지우는 것은 주인만 된다. umask는 특수 권한이 아니라 새 파일의 기본 권한을 정하는 값이다.

Q4. 디렉터리에 설정하면 그 안에서 만든 파일이 디렉터리의 그룹을 상속하게 되는 권한은?

  1. SetGID
  2. umask
  3. SetUID
  4. Sticky Bit
정답 보기

1번 SetGID

SetGID다. 디렉터리에 걸면 그 안에서 만든 파일이 디렉터리의 그룹을 이어받아 팀 공유 폴더에 쓴다. Sticky Bit는 남의 파일을 못 지우게 한다.

Q5. -rwSr--r--에서 대문자 S의 의미는?

  1. 오류 상태
  2. SetUID가 걸렸지만 소유자 실행 권한이 없음
  3. SetGID가 걸림
  4. Sticky가 걸림
정답 보기

2번 SetUID가 걸렸지만 소유자 실행 권한이 없음

특수 권한 + x 없음 = 대문자.

Q6. dev 그룹이 함께 쓰는 /data/team 디렉터리를 만들려 한다. 그룹원만 들어올 수 있고, 새 파일은 dev 그룹이 되며, 남이 만든 파일은 지울 수 없게 하는 설정은?

  1. chmod 2770 /data/team
  2. chmod 1770 /data/team
  3. chmod 4770 /data/team
  4. chmod 3770 /data/team
정답 보기

4번 chmod 3770 /data/team

SetGID(2) + Sticky(1) = 3, 권한 770 → 3770.

Q7. 특수 권한 설정으로 잘못된 것은?

  1. chmod g+s /team
  2. chmod o+t /share
  3. chmod u+s /usr/local/bin/tool
  4. chmod g+t /share
정답 보기

4번 chmod g+t /share

Sticky(t)는 기타 사용자(o) 자리에만 건다.

헷갈리기 쉬운 O·X

Sticky Bit가 걸린 디렉터리에서는 누구도 파일을 만들 수 없다.

정답 보기

X 만들 수는 있다. 남의 파일을 지우지 못할 뿐.

SetUID는 기타 사용자 실행 자리에 t로 표시된다.

정답 보기

X SetUID는 소유자 자리 s. t는 Sticky.

chmod 6755 file은 SetUID와 SetGID를 함께 설정한다.

정답 보기

O 4 + 2 = 6.

함께 보면 좋은 개념