
215
8
장
컨테이너 실행하기
로 더는
setuid
를 사용하지 않는다.
8.3.5
캐퍼빌리티
전통적인 유닉스 프로그램은
일반
과
슈퍼유저
,
두 가지의 수준 권한을 갖고 있다. 일반 프로그램
은 사용자 이상의 실행 권한을 갖지 않은 반면, 슈퍼유저 프로그램은 커널 보안 검사를 건너뛰
며 모든 권한을 가진다.
리눅스 캐퍼빌리티 메커니즘은 커널 모듈 로드, 직접적인 네트워크
I
/
O
작업, 시스템 장치 접
근 등과 같은 다양한 작업을 정의함으로써 이를 개선했다. 특정 권한이 필요한 프로그램에만
권한 설정을 할 수 있으며 다른 프로그램은 차단할 수 있다.
예를 들어
80
포트로 수신해야 하는 웹서버는 일반적으로
root
로 실행해야 한다.
1024
이하의
포트 번호는 권한이 필요한
시스템
포트로 관리되기 때문이다. 대신에 프로그램에
NET
_
BIND
_
SERVICE
캐퍼빌리티를 부여하면 어떤 포트든 바인딩할 수 있지만 다른 특별한 권한은 갖지 못
한다.
도커 컨테이너의 기본 캐퍼빌리티 설정은 상당히 관대하다. 이는 사용성과 보안성 사이에서 적
당히 절충한 실용적인 결정인데, 컨테이너에 기본적으로 캐퍼빌리티를 하나도 부여하지 않으
면, 운영자는 컨테이너를 실행하기 위해 많은 설정 작업을 해야만 할 것이다.
반면에 최소 권한의 원칙에 따르면, 필요하지 않을 경우에는 컨테이너에 ...