SetUID·SetGID·Sticky Bit
쉽게 말하면
평범한 읽기·고치기·실행 말고 특별한 권한 세 가지예요. 실행하는 동안 잠깐 주인 권한을 빌려 주기(SetUID), 그룹 권한을 빌려 주기(SetGID), 공용 폴더에서 남의 파일은 못 지우게 하기(Sticky)예요. 내 비밀번호를 바꾸는 passwd 명령이 첫 번째 예예요.
시험용 정의
특수 권한은 rwx 앞에 붙는 네 번째 자리다. SetUID(4000): 실행 시 파일 소유자 권한으로 동작. SetGID(2000): 실행 시 파일 그룹 권한으로 동작, 디렉터리에 걸면 안에 만든 파일이 디렉터리 그룹을 물려받음. Sticky Bit(1000): 디렉터리에 걸면 누구나 파일을 만들 수 있어도 자기 파일만 지울 수 있음.
비유로 이해하기
SetUID는 "이 출입증을 든 사람은 누구든 관리인 권한으로 통과", Sticky는 "공용 사물함: 누구나 넣을 순 있지만 남의 칸은 못 비움"이다.
자세히
그림으로 보기: 특수 권한이 보이는 자리
세 가지를 한 표로
| 특수 권한 | 숫자 | 기호 | 표시 자리 | 파일에 걸면 | 디렉터리에 걸면 | 대표 예 |
|---|---|---|---|---|---|---|
| SetUID | 4000 | u+s | 소유자 x 자리 s | 실행하는 동안 파일 소유자 권한 | (거의 쓰지 않음) | /usr/bin/passwd |
| SetGID | 2000 | g+s | 그룹 x 자리 s | 실행하는 동안 파일 그룹 권한 | 안에 만든 파일이 디렉터리 그룹을 물려받음 | 팀 공유 디렉터리, /usr/bin/write |
| Sticky Bit | 1000 | o+t | 기타 x 자리 t | (의미 없음) | 누구나 만들 수 있지만 자기 파일만 삭제 | /tmp, 공용 업로드 디렉터리 |
숫자 계산
특수 권한 숫자는 SetUID 4, SetGID 2, Sticky 1을 더해서 맨 앞자리에 쓴다.
4755= SetUID + rwxr-xr-x2775= SetGID + rwxrwxr-x1777= 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(디렉터리)로 확인한다
시험에 이렇게 나와요
- 공유 디렉터리에서 남의 파일을 지우지 못하게 하려면? → Sticky 비트(
chmod o+t 디렉터리또는 1777) - 팀 디렉터리에 만든 파일이 자동으로 팀 그룹이 되게 하려면? → 디렉터리에 SetGID(
chmod g+s, 2775) - SetUID가 걸린 대표 파일 →
/usr/bin/passwd - 그룹 공유 + 삭제 제한을 함께 →
chmod 3770처럼 숫자 합으로 계산 - 특수 권한 사용 사례로 틀린 것 → 파일에 Sticky,
chmod g+t rwsr-xr-x→ 4755,rwxrwxrwt→ 1777 같은 기호 ↔ 숫자 변환
확인 문제
Q1. /etc/shadow는 root만 읽고 쓸 수 있다. 그런데 일반 사용자가 passwd로 자기 비밀번호를 바꾸면 /etc/shadow가 수정된다. 어떻게 가능할까?
- passwd는 커널의 일부라서
- passwd 파일에 SetUID가 걸려 있어 실행하는 동안 소유자(root) 권한으로 동작해서
- /etc/shadow가 사실 모두에게 쓰기 허용이라서
- sudo가 자동으로 실행되어서
정답 보기
2번 passwd 파일에 SetUID가 걸려 있어 실행하는 동안 소유자(root) 권한으로 동작해서
/usr/bin/passwd는 -rwsr-xr-x root root다. 소유자 x 자리의 s가 SetUID로, 누가 실행하든 그 프로그램은 파일 소유자(root)의 권한으로 동작한다.
Q2. -rwsr-xr-x를 숫자로 나타내면?
- 755
- 1755
- 2755
- 4755
정답 보기
4번 4755
소유자 자리 s = SetUID(4) + 755.
Q3. /tmp 디렉터리에 설정된 특수 권한은?
- umask
- SetUID
- SetGID
- Sticky Bit
정답 보기
4번 Sticky Bit
Sticky Bit다. 권한이 drwxrwxrwt(1777)라 누구나 파일을 만들 수 있지만 지우는 것은 주인만 된다. umask는 특수 권한이 아니라 새 파일의 기본 권한을 정하는 값이다.
Q4. 디렉터리에 설정하면 그 안에서 만든 파일이 디렉터리의 그룹을 상속하게 되는 권한은?
- SetGID
- umask
- SetUID
- Sticky Bit
정답 보기
1번 SetGID
SetGID다. 디렉터리에 걸면 그 안에서 만든 파일이 디렉터리의 그룹을 이어받아 팀 공유 폴더에 쓴다. Sticky Bit는 남의 파일을 못 지우게 한다.
Q5. -rwSr--r--에서 대문자 S의 의미는?
- 오류 상태
- SetUID가 걸렸지만 소유자 실행 권한이 없음
- SetGID가 걸림
- Sticky가 걸림
정답 보기
2번 SetUID가 걸렸지만 소유자 실행 권한이 없음
특수 권한 + x 없음 = 대문자.
Q6. dev 그룹이 함께 쓰는 /data/team 디렉터리를 만들려 한다. 그룹원만 들어올 수 있고, 새 파일은 dev 그룹이 되며, 남이 만든 파일은 지울 수 없게 하는 설정은?
- chmod 2770 /data/team
- chmod 1770 /data/team
- chmod 4770 /data/team
- chmod 3770 /data/team
정답 보기
4번 chmod 3770 /data/team
SetGID(2) + Sticky(1) = 3, 권한 770 → 3770.
Q7. 특수 권한 설정으로 잘못된 것은?
- chmod g+s /team
- chmod o+t /share
- chmod u+s /usr/local/bin/tool
- 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.