SUID, SGID, Sticky Bit는 정보보안기사나 리눅스마스터 자격증 시험에는 거의 매년 출제될 정도로 중요한 토픽입니다. 해당 권한(특수권한) 보유 여부에 따라 보안 취약점이 노출 될 소지가 있기 때문입니다. 이 내용은 반드시 학습하시기 바랍니다.
1. 개요
리눅스/유닉스 시스템에서는 파일 및 디렉토리에 대한 접근을 제어하기 위해 일반 권한(읽기, 쓰기, 실행) 외에도 특수 권한(Special Permissions)을 제공합니다. 여기에는 다음 세 가지가 포함됩니다.
- SUID (Set User ID)
- SGID (Set Group ID)
- Sticky Bit
이들 특수 권한은 일반 권한만으로는 구현하기 어려운 시스템 관리 및 협업 기능, 그리고 보안 강화 목적으로 사용됩니다. 하지만 이 특수 권한들이 잘못 설정되었을 경우 보안상 큰 위협이 될 수 있으므로, 그 취약점과 함께 적절한 대응 방안도 반드시 이해하고 있어야 합니다.
2. SUID (Set User ID)
2.1 개념
SUID는 특정 실행 파일에 대해 사용자가 실행할 때 해당 파일의 ‘소유자’ 권한으로 실행되도록 하는 설정입니다. 예를 들어, 파일의 소유자가 root일 경우 일반 사용자도 root 권한으로 실행할 수 있게 됩니다.
2.2 작동 원리
- 파일 실행 시, 사용자의 권한이 아닌 파일 소유자의 권한으로 프로세스가 수행됩니다.
- 즉, 일반 사용자라도 root 소유의 SUID 설정된 파일을 실행하면 일시적으로 root 권한이 부여된 셈이 됩니다.
2.3 사용 예시
ls -l /usr/bin/passwd
-rwsr-xr-x 1 root root 54256 Apr 8 2025 /usr/bin/passwd
s
가 사용자 실행 위치에 있는 것으로 보아 SUID가 설정되어 있습니다.passwd
명령은 사용자가 자신의 비밀번호를 변경할 수 있게 해주지만, 이 작업은/etc/shadow
파일을 수정해야 하므로 root 권한이 필요합니다. 이때 SUID가 이를 가능하게 해줍니다.
2.4 설정 방법
chmod u+s filename
- 설정 후:
-rwsr-xr-x
형태로 표시됨
2.5 보안 취약점
- 악성 사용자가 SUID가 설정된 실행 파일의 취약점을 악용해 권한 상승을 시도할 수 있음.
- 특히 root 권한의 SUID 파일에서 버퍼 오버플로우 등 취약점이 존재할 경우, 시스템 전체가 장악당할 수 있음.
2.6 대응 방안
- SUID 파일 목록을 정기적으로 점검:
find / -perm -4000 -type f 2>/dev/null
- 불필요한 SUID 파일 제거 또는 비활성화
- 사용자 정의 프로그램에는 가급적 SUID를 사용하지 않음
- AppArmor, SELinux 등 추가적인 권한 제어 도구 활용
3. SGID (Set Group ID)
3.1 개념
SGID는 파일 또는 디렉토리가 실행될 때 해당 그룹의 권한으로 실행되도록 설정하거나, 디렉토리 내 생성된 파일이 부모 디렉토리의 그룹을 상속받도록 설정하는 특수 권한입니다.
3.2 작동 원리
- 파일에 적용 시: 해당 파일을 실행한 사용자는 파일 소유 그룹의 권한으로 프로세스를 수행하게 됩니다.
- 디렉토리에 적용 시: 디렉토리 내에 생성되는 모든 파일이나 서브 디렉토리의 그룹 소유자가 부모 디렉토리와 동일한 그룹으로 설정됩니다.
3.3 사용 예시
ls -ld /var/www/html
drwxr-sr-x 2 root webdev 4096 Apr 8 10:00 /var/www/html
s
가 그룹 실행 위치에 표시됨webdev
그룹의 소속 사용자들은 모두 이 디렉토리에 파일을 생성해도 동일 그룹으로 소유권이 설정되어 협업이 쉬움
3.4 설정 방법
chmod g+s directory_or_file
3.5 보안 취약점
- SGID가 설정된 디렉토리에 권한이 적절히 설정되지 않으면, 특정 그룹 사용자가 의도치 않은 파일을 읽거나 수정할 수 있음
- SGID가 설정된 실행 파일 또한 SUID와 마찬가지로 권한 상승의 통로가 될 수 있음
3.6 대응 방안
- 디렉토리 권한을 적절히 설정 (
770
,750
등) - SGID 실행 파일에 대한 점검 수행:
find / -perm -2000 -type f 2>/dev/null
- 필요 없는 SGID 권한 제거
- 그룹 사용자의 관리 및 접근 권한 설정을 명확히 규정
4. Sticky Bit
4.1 개념
Sticky Bit는 디렉토리에 설정되는 특수 권한으로, 해당 디렉토리에 있는 파일을 오직 ‘소유자’만 삭제할 수 있도록 제한합니다. 특히, 공유 디렉토리에서 유용하게 사용됩니다.
4.2 작동 원리
- 모든 사용자가 쓰기 가능한 디렉토리에서도 다른 사용자의 파일은 삭제할 수 없고, 본인 파일만 삭제 가능하게 만듭니다.
4.3 사용 예시
ls -ld /tmp
drwxrwxrwt 10 root root 4096 Apr 8 10:05 /tmp
- 마지막
t
는 Sticky Bit가 설정된 디렉토리를 의미함 /tmp
디렉토리는 시스템 전반에서 공유되는 임시 저장소이므로 모든 사용자에게 쓰기 권한을 부여하되, 각자의 파일만 삭제할 수 있게 Sticky Bit를 설정함
4.4 설정 방법
chmod +t directory
4.5 보안 취약점
- Sticky Bit가 없는
/tmp
디렉토리는 다른 사용자가 내 파일을 삭제하거나 바꿀 수 있는 위험을 동반 - 공용 디렉토리에 Sticky Bit 누락 시, 악의적인 사용자가 시스템을 교란할 수 있음
4.6 대응 방안
/tmp
,/var/tmp
등 공용 디렉토리에 Sticky Bit 반드시 설정- Sticky Bit 설정 여부 정기 점검:
ls -ld /tmp /var/tmp
- 사용자 지정 공유 디렉토리에도 동일한 설정 적용
5. 구성도 설명
SUID, SGID, Sticky Bit를 시각적으로 이해할 수 있도록 간단한 구성도를 아래에 나타내보겠습니다.
⬇️ 특수 권한 작동 흐름도
[사용자] ---> 실행 (파일 or 디렉토리) ---> SUID: 소유자 권한으로 실행
---> SGID (파일): 그룹 권한으로 실행
---> SGID (디렉토리): 그룹 상속 유지
---> Sticky Bit: 파일 소유자만 삭제 가능
6. 마무리 정리
항목 | 대상 | 작동 방식 | 보안 위험 | 대응 방안 |
---|---|---|---|---|
SUID | 파일 | 소유자 권한으로 실행 | 루트 권한 상승, 악용 가능 | SUID 파일 점검, 필요시 제거 |
SGID | 파일/디렉토리 | 그룹 권한 실행 또는 그룹 상속 | 그룹 권한 노출, 실행 취약점 | 권한 점검, 그룹 관리 |
Sticky Bit | 디렉토리 | 파일 소유자만 삭제 가능 | 파일 삭제 우려 (미설정 시) | /tmp 등 공용 폴더에 반드시 설정 |
7. 결론
SUID, SGID, Sticky Bit는 리눅스 시스템의 유연성과 보안성을 동시에 제공하는 유용한 기능입니다. 그러나, 그만큼 설정 실수로 인한 보안 사고의 위험성도 높기 때문에, 실무에서는 이 특수 권한들을 반드시 명확하게 이해하고, 정기적인 점검 및 보안 정책을 통해 철저히 관리해야 합니다.