Security in Docker

Yu Sang Min·2025년 6월 20일

CKA

목록 보기
58/110
post-thumbnail

🔐 Docker 보안과 Kubernetes SecurityContext 개념 이해

Kubernetes의 SecurityContext를 이해하기 전에, Docker에서의 보안 개념을 먼저 알아두는 것이 유익함.


🖥️ 호스트와 컨테이너의 프로세스 격리

  • Docker가 설치된 호스트에는 OS 프로세스, Docker 데몬, SSH 서버 등이 실행 중
  • Docker 컨테이너는 호스트와 커널을 공유하지만, Linux 네임스페이스를 통해 격리됨
  • 컨테이너 내부에서 sleep 프로세스를 실행하면 자신의 PID 1로 보임
  • 하지만 호스트에서는 해당 프로세스가 다른 PID로 표시
  • 컨테이너는 자신의 네임스페이스 내 프로세스만 볼 수 있음

👤 컨테이너 내부 사용자 권한

  • 기본적으로 Docker는 컨테이너 내부의 프로세스를 root 사용자로 실행
  • 이는 컨테이너 안과 밖 모두에서 확인 가능
docker run -it ubuntu sleep 3600
# -> root로 실행됨
  • 사용자 권한 변경 방법: --user 옵션 사용
docker run -it --user 1000 ubuntu sleep 3600
  • Dockerfile에서 사용자 정의 시 USER 명령어 사용
FROM ubuntu
USER 1000

⚠️ 컨테이너 내 root = 호스트 root?

  • 컨테이너 내의 root는 호스트 root와 완전히 동일하지 않음
  • Docker는 Linux Capabilities를 활용하여 root 권한을 제한

🛠️ Linux Capabilities 개념

  • 리눅스는 root 사용자의 권한을 여러 개의 기능(capability) 단위로 나눔

  • 예시 권한들:

    • 파일 접근 및 수정
    • 네트워크 포트 바인딩
    • 프로세스 생성 및 종료
    • 시스템 재부팅
    • 시계 변경
  • 전체 리스트: Linux capabilities list


🧱 Docker의 Capabilities 제어 방법

  • Docker는 기본적으로 일부 capability만 허용
  • 추가 권한이 필요할 경우 --cap-add 사용
docker run --cap-add=NET_ADMIN ubuntu
  • 권한을 제거할 경우 --cap-drop 사용
docker run --cap-drop=ALL ubuntu
  • 모든 권한을 허용하려면 --privileged 옵션 사용
docker run --privileged ubuntu

주의: --privileged는 보안상 매우 위험할 수 있음


🧩 요약

  • 컨테이너는 호스트와 커널을 공유하므로 보안 격리가 중요
  • 기본적으로 root로 실행되지만, 제한된 권한만 부여됨
  • 필요에 따라 사용자 ID 변경capability 추가/제거 가능
  • 이러한 Docker 보안 개념은 Kubernetes의 SecurityContext를 이해하는 데 기초가 됨
profile
React, Node.js, AWS, Git, Github, Github Action, Docker, K8S

0개의 댓글