컨테이너를 실행할 때 기본적으로 root 사용자가 할당되어 운영된다. root 사용자는 운영체제 전반적인 권한을 모두 가지고 있는 계정이며, 그 만큼 보안 상 고려해야 할 요소가 많고 주의해야만 하는 계정이다. Linux Capabilities는 root 슈퍼유저의 권한을 세분화하여 부분적으로 권한을 허용할 수 있게 조치하는 역할을 한다. 각 capabilities는 독립적으로 비/활성화 할 수 있으며, 32-bitmask 구조로 구현되었다가 개수가 많아져 현재 38개의 capabilities를 저장하기 위해 64-bitmask로 작동된다. 그러므로 단순히 root 계정이 모든 작업을 할 수 있는 절대 계정이라기 보단, 모든 capabilities가 활성화된 root 계정이 모든 커널 단위의 작업을 수행할 수 있는 슈퍼유저이다. 각 capabilities는 단순한 raw IP 패킷을 전송한다던지, 0~1023사이의 포트번호(well-known ports)에 대한 바인딩을 하는 등의 보안과 밀접한 관련이 있는 작업을 수행할 수 있는 권한을 켜거나 끌 수 있다. 컨테이너를 생성하기 전에 이러한 capabilities를 비활성화(Drop)한다면, 컨테이너 내부의 프로세스에서는 절대 다시 활성화시킬 수 없다.
Docker 기본값
그렇다면, 컨테이너 프레임워크로 많이 사용되고 있는 Docker는 기본적으로 어떤 Capabilities를 default 값으로 두고 있을까. 다음은 그 목록이다.