SUID, SGID, Sticky Bit

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 사용 예시

  • s가 사용자 실행 위치에 있는 것으로 보아 SUID가 설정되어 있습니다.
  • passwd 명령은 사용자가 자신의 비밀번호를 변경할 수 있게 해주지만, 이 작업은 /etc/shadow 파일을 수정해야 하므로 root 권한이 필요합니다. 이때 SUID가 이를 가능하게 해줍니다.

2.4 설정 방법

  • 설정 후: -rwsr-xr-x 형태로 표시됨

2.5 보안 취약점

  • 악성 사용자가 SUID가 설정된 실행 파일의 취약점을 악용해 권한 상승을 시도할 수 있음.
  • 특히 root 권한의 SUID 파일에서 버퍼 오버플로우 등 취약점이 존재할 경우, 시스템 전체가 장악당할 수 있음.

2.6 대응 방안

  • SUID 파일 목록을 정기적으로 점검:
  • 불필요한 SUID 파일 제거 또는 비활성화
  • 사용자 정의 프로그램에는 가급적 SUID를 사용하지 않음
  • AppArmor, SELinux 등 추가적인 권한 제어 도구 활용

3. SGID (Set Group ID)

3.1 개념

SGID는 파일 또는 디렉토리가 실행될 때 해당 그룹의 권한으로 실행되도록 설정하거나, 디렉토리 내 생성된 파일이 부모 디렉토리의 그룹을 상속받도록 설정하는 특수 권한입니다.

3.2 작동 원리

  • 파일에 적용 시: 해당 파일을 실행한 사용자는 파일 소유 그룹의 권한으로 프로세스를 수행하게 됩니다.
  • 디렉토리에 적용 시: 디렉토리 내에 생성되는 모든 파일이나 서브 디렉토리의 그룹 소유자가 부모 디렉토리와 동일한 그룹으로 설정됩니다.

3.3 사용 예시

  • s가 그룹 실행 위치에 표시됨
  • webdev 그룹의 소속 사용자들은 모두 이 디렉토리에 파일을 생성해도 동일 그룹으로 소유권이 설정되어 협업이 쉬움

3.4 설정 방법

3.5 보안 취약점

  • SGID가 설정된 디렉토리에 권한이 적절히 설정되지 않으면, 특정 그룹 사용자가 의도치 않은 파일을 읽거나 수정할 수 있음
  • SGID가 설정된 실행 파일 또한 SUID와 마찬가지로 권한 상승의 통로가 될 수 있음

3.6 대응 방안

  • 디렉토리 권한을 적절히 설정 (770, 750 등)
  • SGID 실행 파일에 대한 점검 수행:
  • 필요 없는 SGID 권한 제거
  • 그룹 사용자의 관리 및 접근 권한 설정을 명확히 규정

4. Sticky Bit

4.1 개념

Sticky Bit는 디렉토리에 설정되는 특수 권한으로, 해당 디렉토리에 있는 파일을 오직 ‘소유자’만 삭제할 수 있도록 제한합니다. 특히, 공유 디렉토리에서 유용하게 사용됩니다.

4.2 작동 원리

  • 모든 사용자가 쓰기 가능한 디렉토리에서도 다른 사용자의 파일은 삭제할 수 없고, 본인 파일만 삭제 가능하게 만듭니다.

4.3 사용 예시

  • 마지막 t는 Sticky Bit가 설정된 디렉토리를 의미함
  • /tmp 디렉토리는 시스템 전반에서 공유되는 임시 저장소이므로 모든 사용자에게 쓰기 권한을 부여하되, 각자의 파일만 삭제할 수 있게 Sticky Bit를 설정함

4.4 설정 방법

4.5 보안 취약점

  • Sticky Bit가 없는 /tmp 디렉토리는 다른 사용자가 내 파일을 삭제하거나 바꿀 수 있는 위험을 동반
  • 공용 디렉토리에 Sticky Bit 누락 시, 악의적인 사용자가 시스템을 교란할 수 있음

4.6 대응 방안

  • /tmp, /var/tmp 등 공용 디렉토리에 Sticky Bit 반드시 설정
  • Sticky Bit 설정 여부 정기 점검:
  • 사용자 지정 공유 디렉토리에도 동일한 설정 적용

5. 구성도 설명

SUID, SGID, Sticky Bit를 시각적으로 이해할 수 있도록 간단한 구성도를 아래에 나타내보겠습니다.

⬇️ 특수 권한 작동 흐름도

[사용자] ---> 실행 (파일 or 디렉토리) ---> SUID: 소유자 권한으로 실행
---> SGID (파일): 그룹 권한으로 실행
---> SGID (디렉토리): 그룹 상속 유지
---> Sticky Bit: 파일 소유자만 삭제 가능

6. 마무리 정리

항목대상작동 방식보안 위험대응 방안
SUID파일소유자 권한으로 실행루트 권한 상승, 악용 가능SUID 파일 점검, 필요시 제거
SGID파일/디렉토리그룹 권한 실행 또는 그룹 상속그룹 권한 노출, 실행 취약점권한 점검, 그룹 관리
Sticky Bit디렉토리파일 소유자만 삭제 가능파일 삭제 우려 (미설정 시)/tmp 등 공용 폴더에 반드시 설정

7. 결론

SUID, SGID, Sticky Bit는 리눅스 시스템의 유연성과 보안성을 동시에 제공하는 유용한 기능입니다. 그러나, 그만큼 설정 실수로 인한 보안 사고의 위험성도 높기 때문에, 실무에서는 이 특수 권한들을 반드시 명확하게 이해하고, 정기적인 점검 및 보안 정책을 통해 철저히 관리해야 합니다.

Leave a Comment