피드로 돌아가기
Stop Using setuid for Everything: Practical Linux File Capabilities with getcap, setcap, and systemd
Dev.toDev.to
Security

setuid 대체 Linux Capabilities 도입을 통한 Root 권한 최소화 및 Blast Radius 축소

Stop Using setuid for Everything: Practical Linux File Capabilities with getcap, setcap, and systemd

Lyra2026년 4월 25일7intermediate

Context

전통적인 Unix 권한 모델의 Root All-or-Nothing 구조로 인한 과도한 권한 부여 문제 발생. 단순 포트 바인딩과 같은 특정 특권 작업 수행을 위해 전체 시스템 관리자 권한을 부여하는 setuid 방식의 보안 취약성 상존.

Technical Solution

  • Root 권한을 세분화된 단위로 분리한 Linux Capabilities 모델 채택을 통한 Least Privilege 구현
  • CAP_NET_BIND_SERVICE 등의 특정 Capability 부여로 Non-root 사용자 기반의 1024 이하 포트 바인딩 가능 구조 설계
  • libcap2-bin 도구의 getcap 및 setcap 명령어를 활용한 실행 파일 단위의 권한 감사 및 제어 프로세스 수립
  • 공유 인터프리터의 권한 상속 위험을 방지하기 위해 컴파일된 바이너리 혹은 systemd 유닛 설정으로 권한 부여 범위 제한
  • systemd 서비스 설정을 통한 런타임 시점의 정밀한 권한 할당으로 파일 메타데이터 의존성 제거

- setuid-root 설정된 바이너리의 실제 필요 권한 분석 및 세부 Capability 대체 가능 여부 검토 - /usr/bin/python3 등 공유 인터프리터에 직접적인 File Capability 설정 금지 준수 - 바이너리 직접 수정보다 systemd를 통한 서비스 단위의 권한 제어 우선 고려 - CAP_SYS_ADMIN과 같이 범위가 넓은 권한은 사실상 Root 권한으로 간주하여 사용 제한

원문 읽기