본문 바로가기

리눅스

[WIP] Docker 컨테이너를 Privileged 모드로 실행하는 방법

728x90

Docker 컨테이너를 Privileged 모드로 실행하는 방법

Docker에서 privileged 모드는 컨테이너에 호스트 수준의 거의 모든 권한을 부여하는 옵션입니다.

디바이스 접근, 커널 기능 사용 등이 가능해지지만 그만큼 보안 리스크가 매우 크므로 신중하게 사용해야 합니다.

1. Privileged 모드란?

기본적으로 Docker 컨테이너는 격리된 환경에서 제한된 권한으로 실행됩니다.

하지만 --privileged 옵션을 사용하면 다음과 같은 변화가 발생합니다.

  • 모든 Linux Capability 활성화
  • /dev 디바이스 전체 접근 가능
  • AppArmor / SELinux 제한 우회
  • 커널 기능 대부분 사용 가능

즉, 사실상 호스트와 동일한 권한을 갖는 수준입니다.

2. docker run에서 설정 (권장 방식)

Privileged 모드는 컨테이너 실행 시점에 설정합니다.

docker run --privileged -it ubuntu:22.04 /bin/bash
docker run --privileged \
  --name test-container \
  -v /sys:/sys \
  -v /dev:/dev \
  -it ubuntu:22.04
728x90

3. docker-compose에서 설정

docker-compose.yml에서 서비스 단위로 설정할 수 있습니다.

vim docker-compose.yml
services:

  app:
    image: ubuntu:22.04
    privileged: true
    stdin_open: true
    tty: true

4. (중요) Dockerfile에서는 설정 불가

Dockerfile에서는 privileged 모드를 설정할 수 없습니다.

# ❌ 잘못된 예시 (존재하지 않는 지시어)
PRIVILEGED

privileged 여부는 이미지가 아니라 컨테이너 실행 시 옵션으로만 결정됩니다.

5. 보안 주의사항

Privileged 모드는 다음과 같은 보안 위험을 동반합니다.

  • 컨테이너 탈출(Container Escape) 가능성 증가
  • 호스트 시스템 직접 제어 가능
  • 악성 코드 실행 시 전체 시스템 위험

따라서 다음 원칙을 권장합니다.

권장 대안

필요한 capability만 부여

docker run --cap-add=NET_ADMIN

특정 디바이스만 마운트

docker run --device=/dev/snd

 

728x90