Docker

[Docker] 컨테이너에 권한 부여

비번변경 2021. 7. 11. 19:04

Docker는 컨테이너 내 root 사용자의 기능을 제한하는 기능을 제공한다. 컨테이너 내부의 프로세스가 호스트의 root 사용자가 할 수 있는 작업을 수행하면 시스템에 영향을 미칠 수 있기 때문이다. 따라서 Docker는 Linux의 Capabilities를 이용하여 리눅스의 호스트의 root 사용자와 컨테이너 내 root 사용자에게 권한 차이를 둔다.

 

Capabilities

Super User의 권한을 능력으로서 독립적으로 허용하거나 허용하지 않도록 설정하기 위한 단위

Super User의 권한을 조각으로 나눈 것

 

종류

  • CAP_SYS_ADMIN : sysadmin 작업 수행
  • CAP_SYS_TIME : 시스템 시간 변경
  • CAP_CHOWN : 파일의 uid/gid 변경

등등…….

프로세스는 root 권한의 일부인 Capabilities를 가질 수 있고, 파일은 프로그램 실행 프로세스에 주어진 Capabilities를 가질 수 있다.

 

일반적으로 Docker는 제한된 Capabilities을 가진 컨테이너를 실행한다. 쉽게 예시를 들면, 컨테이너 내 프로세스에는 호스트를 재부팅하거나 호스트에서 실행 중인 컨테이너를 중지할 수 있는 권한이 없다. 

별도의 권한이 필요한 경우에는 --cap-add 옵션을 주어야 한다.

 

권한 부여

docker run --cap-add <CAPABILITY> <IMAGE>

# 모든 권한 부여
docker run --cap-add ALL ubuntu
docker run --privileged ubuntu

 

권한 회수

docker run --cap-drop <CAPABILITY> <IMAGE>
728x90