파일 · 권한 · 사용자 관리 29 / 50 · Part 3. Linux 파일 권한
실습 환경: Rocky Linux 9.8 · Ubuntu 24.04.5 (Docker 격리 컨테이너, 테스트 계정 analyst)
기초편 연계: 「리눅스 시스템 기초」 16. chmod와 권한 관리

1. 들어가며

SGID(Set Group ID)는 SUID(28편)의 그룹 버전이다. 하지만 파일에 붙었을 때와 디렉터리에 붙었을 때 동작이 전혀 다르다. 이 차이를 구분하지 못하면 그룹 협업 디렉터리를 제대로 구성할 수 없다.

  • 파일 SGID: 실행 시 그룹 권한(egid)으로 동작 (SUID의 그룹판)
  • 디렉터리 SGID: 그 안에서 만든 새 파일·디렉터리가 디렉터리의 그룹을 상속

실무에서 훨씬 자주 쓰이는 것은 디렉터리 SGID 다. 팀 공유 디렉터리의 표준 설정이기 때문이다. 이번 글에서 두 동작을 실습으로 구분한다.


2. 핵심 개념

2-1. 두 가지 동작

대상SGID 효과
실행 파일실행 시 euid가 아니라 egid 가 파일 그룹으로 바뀜
디렉터리안에서 만든 새 항목이 만든 사람의 기본 그룹이 아니라 디렉터리의 그룹 을 상속. mkdir로 만든 하위 디렉터리에는 SGID도 전파

2-2. 표기와 설정

표시의미
drwxrwsr-x디렉터리 SGID (그룹 x 자리 s)
-rwxr-sr-x파일 SGID
...r-S...SGID인데 그룹 실행 권한 없음 (대문자 S)
chmod 2775앞자리 2 = SGID
chmod g+s기호 방식

2-3. 왜 디렉터리 SGID가 필요한가

SGID가 없는 공유 디렉터리에서는, 각 사용자가 만든 파일이 각자의 기본 그룹 을 갖는다. alice가 만든 파일은 alice 그룹, bob이 만든 파일은 bob 그룹이 되어, 서로 그룹 권한으로 접근할 수 없다. SGID 디렉터리는 모든 새 파일에 공통 그룹 을 붙여 이 문제를 해결한다.


3. 동작 원리

SGID — 파일과 디렉터리에서 다른 두 동작

새 파일의 그룹은 기본적으로 만든 프로세스의 기본 그룹(egid) 이 된다. 그런데 상위 디렉터리에 SGID가 설정되어 있으면, 커널은 새 파일의 그룹을 디렉터리의 그룹 으로 정한다. 하위 디렉터리를 mkdir로 만들면 그 디렉터리에도 SGID가 자동으로 붙어 상속이 계속 이어진다.

이 규칙 덕분에 팀 공유 디렉터리는 다음과 같이 구성한다.

groupadd team
chgrp team /shared
chmod 2775 /shared      # SGID + rwxrwxr-x

이제 team 구성원이 /shared에 만드는 모든 파일은 자동으로 team 그룹을 갖는다. umask를 002(또는 007)로 맞추면 그룹 쓰기까지 보장되어 완전한 공유가 된다.


4. 명령어 실습

analyst는 team 그룹 구성원이다. shared는 SGID(2775), normal은 일반(0775) 디렉터리다.

cd /data/lab29

# 1) 두 디렉터리 비교
ls -ld shared normal               # shared 에만 s

# 2) 일반 디렉터리 — 새 파일은 기본 그룹
touch normal/a && ls -l normal/a   # 그룹 analyst

# 3) SGID 디렉터리 — 새 파일은 디렉터리 그룹 상속
touch shared/b && ls -l shared/b   # 그룹 team

# 4) 하위 디렉터리에도 SGID 전파
mkdir shared/sub && ls -ld shared/sub   # team + s

# 5) SGID 파일 (참고)
ls -l sgidtool                     # -rwxr-sr-x

5. 실행 결과

실제 실행 결과 — Rocky Linux 9.8 · analyst@rocky9-lab — SGID 디렉터리 그룹 상속

텍스트 원본(실제 출력):

[analyst@rocky9-lab ~]$ cd /data/lab29
[analyst@rocky9-lab lab29]$ ls -ld shared normal
drwxrwxr-x 2 root team 4096 Sep 24 10:57 normal
drwxrwsr-x 2 root team 4096 Sep 24 10:57 shared
[analyst@rocky9-lab lab29]$ touch normal/a && ls -l normal/a
-rw-r--r-- 1 analyst analyst 0 Sep 24 10:57 normal/a
[analyst@rocky9-lab lab29]$ touch shared/b && ls -l shared/b
-rw-r--r-- 1 analyst team 0 Sep 24 10:57 shared/b
[analyst@rocky9-lab lab29]$ mkdir shared/sub && ls -ld shared/sub
drwxr-sr-x 2 analyst team 4096 Sep 24 10:57 shared/sub
[analyst@rocky9-lab lab29]$ ls -l sgidtool
-rwxr-sr-x 1 root team 27936 Sep 24 10:57 sgidtool

6. 결과 해석

출력해석
drwxrwxr-x ... normal일반 디렉터리 (SGID 없음)
drwxrwsr-x ... shared그룹 x 자리 s = SGID
normal/a → analyst analyst만든 사람의 기본 그룹
shared/b → analyst team소유자는 analyst, 그룹은 team으로 상속
shared/sub → drwxr-sr-x ... team하위 디렉터리도 그룹 team + SGID 전파
sgidtool → -rwxr-sr-x root teamSGID 파일. 실행 시 egid = team

shared/b의 그룹이 team인 것이 SGID 디렉터리의 효과다. normal/a(그룹 analyst)와 비교하면 차이가 분명하다.


7. 보안 관점

주제내용
디렉터리 SGID대부분 정상·유용한 협업 설정. 그 자체로 위험하지 않음
파일 SGIDSUID처럼 권한 위임. 그룹이 민감하면(예: shadow, disk) 위험
SGID 셸/도구egid가 특권 그룹으로 바뀌는 SGID 바이너리는 권한 상승 경로
점검 범위SUID와 SGID를 함께 점검한다 (47편)

주의: 디렉터리 SGID는 흔하고 정상이므로, find -perm -2000으로 나온 항목을 모두 의심하면 오탐이 많다. 파일 SGID 와 민감 그룹의 SGID 에 집중한다. 예를 들어 -rwxr-sr-x root shadow 형태의 비표준 바이너리는 shadow 그룹 권한(해시 읽기)을 주는 위험한 파일일 수 있다.


8. 보안관제 관점

[Baseline]   SUID + SGID 파일 목록 (디렉터리 제외)
   find / -xdev -type f \( -perm -4000 -o -perm -2000 \) 2>/dev/null | sort > baseline.txt
     ↓
[정기 점검]  현재 목록과 비교, 신규 항목 확인
     ↓
[초점]       파일 SGID + 민감 그룹(shadow/disk/wheel) 조합
     ↓
[Evidence]   신규 항목: stat, sha256sum, 패키지 소속 확인
     ↓
[Response]   비인가 SGID 제거(chmod g-s), 경위 조사
관점내용
오탐 관리디렉터리 SGID는 정상이 많다. 파일에 집중
위험 조합SGID 파일 + shadow/disk/kmem 등 특권 그룹
탐지chmod g+s (특히 파일 대상)를 auditd로 감시

9. 실무에서 자주 발생하는 실수

실수결과예방
공유 디렉터리에 SGID 미설정파일 그룹이 제각각, 협업 실패chmod 2775
SGID만 하고 umask 방치그룹 쓰기 안 됨umask 002/007
디렉터리 SGID를 위험으로 오판오탐파일 SGID에 집중
파일에 불필요한 SGID권한 위임 위험필요한 프로그램만
SUID만 점검, SGID 누락탐지 공백둘 다 점검

10. 실습 체크리스트

[ ] 파일 SGID 와 디렉터리 SGID 의 동작 차이를 설명할 수 있다
[ ] SGID 디렉터리에서 새 파일이 그룹을 상속하는 것을 확인했다
[ ] 하위 디렉터리로 SGID 가 전파되는 것을 확인했다
[ ] 일반 디렉터리와 SGID 디렉터리의 결과를 비교했다
[ ] chmod 2775 로 공유 디렉터리를 구성할 수 있다
[ ] SGID 점검 시 파일과 민감 그룹에 집중하는 이유를 안다

11. 핵심 정리

  • SGID는 파일에서는 그룹 권한(egid) 실행, 디렉터리에서는 새 항목의 그룹 상속 으로 동작이 다르다.
  • 디렉터리 SGID는 그룹 협업의 표준 설정이며, 하위 디렉터리로 전파된다.
  • 표기는 ...r-s...(그룹 자리 s), 설정은 chmod 2775 또는 g+s.
  • 공유 디렉터리는 chmod 2775 + umask 002/007로 완성한다.
  • 디렉터리 SGID는 대부분 정상이다. 점검은 파일 SGID + 민감 그룹 에 집중한다.
  • SUID와 SGID를 함께 점검한다.

12. 다음 편 예고

Part 3의 마지막 글 「30. Sticky Bit」 에서는 /tmp처럼 누구나 쓸 수 있는 공용 디렉터리에서 남의 파일 삭제를 막는 Sticky Bit를 다룬다. Sticky Bit가 없을 때 실제로 남의 파일이 삭제되는 것을 재현한다.


참고 자료


시리즈 이동

profile
코드에 숨겨진 위협을 읽고 AI로 보안의 미래를 설계합니다. 프론트엔드 개발 경험을 자산 삼아 더 견고하고 지능적인 보안 운영 시스템을 구축해 나가는 과정을 기록합니다

0개의 댓글