정의
setuid 비트가 설정된 실행 파일을 실행할 때, 해당 프로세스의 Effective UID(EUID) 가 파일 소유자의 UID(보통 root)로 일시 변경됨
예시 : ping (icmp 대부분 root권한으로 실행, 그러나 수정은 안됨 setuid가 적합)
-rwsr-xr-x 에서 Alice(기타 사용자)는 r-x만 있기 때문에
읽기(r): 가능
실행(x): 가능 (실행 시 EUID가 root로 바뀜)
쓰기(w): 불가 → 저장(덮어쓰기) 시도 시 실패
동작 흐름
alice가 -rwsr-xr-x myprog 실행 alice) root) ← 권한 상승 myprog 내부에서 root 전용 작업 수행 가능 alice)로 복귀 정리
Real UID: 프로세스를 실행한 실제 사용자
Effective UID: 접근 권한을 확인할 때 쓰이는 ID, setuid로 변경 가능
Saved UID: 원래 EUID를 저장해 두고 나중에 복구할 때 사용
setuid 비트는 파일 소유자 권한으로 실행되므로, 먼저 root 소유로 변경해야 합니다.
sudo chown root:root myprog
chmod 명령어로 소유자 실행 권한에 +s 옵션을 줍니다.
chmod u+s myprog
# 또는
chmod 4755 myprog
ls -l로 s 비트가 제대로 적용되었는지 확인합니다.
ls -l myprog
# 출력 예시: -rwsr-xr-x 1 root root ... myprog
chmod u-s 파일명 으로 setuid 비트를 제거할 수 있습니다.
chmod u-s myprog
- r w s | r - x | r - x
│ │ │
│ │ └─ 기타(others)
│ └─ 그룹(group)
└─ 소유자(owner)
첫 번째 3글자(rws)가 UID(file owner) 권한
두 번째 3글자(r-x)가 GID(group) 권한
세 번째 3글자(r-x)가 기타 사용자 권한입니다.
$ ls -l filename
-rw-r--r-- 1 alice staff 1234 May 12 12:00 filename
↑ ↑
소유자 그룹
$ stat filename
File: ‘filename’
Size: 1234 Blocks: 8 IO Block: 4096 regular file
Device: ... Inode: ... Links: 1
Access: (0644/-rw-r--r--) Uid: ( 1001/ alice) Gid: ( 1002/ staff)
Access: 2025-05-12 12:00:00.000000000 +0900
Modify: 2025-05-12 12:00:00.000000000 +0900
Change: 2025-05-12 12:00:00.000000000 +0900
-rwxrwxrwx) -rwsr-xr-x) root로 상승 → root 전용 작업 가능 root(소유자)만 → 무결성 유지