소개
Docker 는 컨테이너화된 애플리케이션 배포를 위한 널리 사용되는 플랫폼이 되었지만, Docker 컨테이너 내부의 루트 사용자 권한을 관리하는 것은 보안 및 규정 준수를 위해 필수적입니다. 이 튜토리얼에서는 Docker 루트 권한, 컨테이너 기능 제한 및 최소 권한 원칙을 Docker 환경에 적용하는 방법을 안내합니다.
Docker 는 컨테이너화된 애플리케이션 배포를 위한 널리 사용되는 플랫폼이 되었지만, Docker 컨테이너 내부의 루트 사용자 권한을 관리하는 것은 보안 및 규정 준수를 위해 필수적입니다. 이 튜토리얼에서는 Docker 루트 권한, 컨테이너 기능 제한 및 최소 권한 원칙을 Docker 환경에 적용하는 방법을 안내합니다.
Docker 컨테이너는 제한된 권한으로 실행되도록 설계되었지만, 특정 상황에서는 컨테이너에 추가적인 기능을 부여해야 할 수 있습니다. 기본적으로 Docker 컨테이너는 최고 수준의 권한을 가진 root 사용자로 실행됩니다. 그러나 과도한 권한으로 컨테이너를 실행하면 해킹된 컨테이너가 호스트 시스템에 접근할 수 있는 위험이 있으므로 보안 위험이 발생할 수 있습니다.
Docker 컨테이너를 루트 권한으로 실행하는 함의를 이해하려면 먼저 Linux 기능 (capabilities) 개념을 이해하는 것이 중요합니다. Linux 기능은 root 사용자와 관련된 모든 권한을 부여하는 대신 프로세스에 특정 권한을 부여하는 세분화된 메커니즘입니다. 이를 통해 보다 안전하고 제어 가능한 환경을 조성할 수 있습니다.
Docker 의 맥락에서 컨테이너의 프로세스는 실행 중인 사용자 또는 그룹의 기능을 상속합니다. 기본적으로 Docker 컨테이너는 대부분의 사용 사례에 충분한 사용 가능한 기능의 하위 집합을 부여받습니다. 그러나 시스템 수준 서비스 작업이나 상위 권한이 필요한 특정 작업을 수행할 때 컨테이너에 추가 기능을 부여해야 할 수 있습니다.
| 기능 | 설명 |
|---|---|
CAP_SYS_ADMIN |
파일 시스템 마운트, 시스템 시간 변경 등 다양한 시스템 관리 작업을 수행할 수 있는 권한을 부여합니다. |
CAP_NET_ADMIN |
컨테이너가 네트워크 인터페이스 및 방화벽 규칙 구성과 같은 네트워크 관련 작업을 수행할 수 있도록 허용합니다. |
CAP_MKNOD |
장치 노드와 같은 특수 파일을 생성할 수 있는 권한을 부여합니다. |
Docker 컨테이너를 루트 권한으로 실행하는 함의와 Linux 기능 개념을 이해하는 것은 컨테이너 보안을 관리하고 최소 권한 원칙을 적용하는 데 중요합니다.
Docker 컨테이너를 루트 권한으로 실행하는 것과 관련된 보안 위험을 완화하기 위해 컨테이너의 기능을 제한할 수 있습니다. 컨테이너를 시작할 때 --cap-drop 및 --cap-add 옵션을 사용하여 컨테이너의 기능을 제한할 수 있습니다.
--cap-drop 옵션을 사용하면 컨테이너에서 특정 기능을 제거할 수 있으며, --cap-add 옵션을 사용하면 필요에 따라 추가 기능을 추가할 수 있습니다.
CAP_SYS_ADMIN 기능을 제거하기 위해 --cap-drop 옵션을 사용하여 컨테이너를 시작하는 예는 다음과 같습니다.
docker run --cap-drop=CAP_SYS_ADMIN ubuntu:22.04 /bin/bash
--cap-drop=all 옵션을 사용하여 기능이 없는 컨테이너를 시작한 다음 --cap-add 옵션을 사용하여 필요한 기능을 선택적으로 추가할 수도 있습니다.
docker run --cap-drop=all --cap-add=NET_ADMIN ubuntu:22.04 /bin/bash
실행 중인 컨테이너의 기능을 확인하려면 docker inspect 명령어를 사용할 수 있습니다.
docker inspect --format '{{.HostConfig.CapDrop}}' container_name_or_id
docker inspect --format '{{.HostConfig.CapAdd}}' container_name_or_id
이렇게 하면 지정된 컨테이너에 대해 제거되거나 추가된 기능이 표시됩니다.
컨테이너의 기능을 신중하게 관리하여 최소 권한 원칙을 적용하고 Docker 환경의 공격 표면을 줄일 수 있습니다.
Docker 환경 보안의 중요한 측면 중 하나는 최소 권한 원칙을 적용하는 것입니다. 컨테이너에 특정 작업에 필요한 최소한의 기능만 부여하여 공격 표면을 줄이고 보안 위반의 잠재적 영향을 완화할 수 있습니다.
Docker 에서 최소 권한 원칙을 적용하는 주요 방법 중 하나는 루트 사용자가 아닌 사용자로 컨테이너를 실행하는 것입니다. 기본적으로 Docker 컨테이너는 최고 권한을 가진 root 사용자로 실행됩니다. 루트 사용자가 아닌 사용자로 컨테이너를 실행하려면 컨테이너를 시작할 때 --user 옵션을 사용할 수 있습니다.
docker run --user=1000:1000 ubuntu:22.04 /bin/bash
이 예제에서 컨테이너는 UID 및 GID 가 1000 인 사용자로 실행됩니다. 이는 루트 사용자가 아닌 사용자입니다.
루트 사용자가 아닌 사용자로 컨테이너를 실행하는 것 외에도 --cap-drop 옵션을 사용하여 불필요한 기능을 제거하여 컨테이너의 기능을 더욱 제한할 수 있습니다. 이는 공격 표면을 최소화하고 보안 위반의 잠재적 영향을 줄이는 데 도움이 됩니다.
docker run --cap-drop=ALL --cap-add=CHOWN,DAC_OVERRIDE,FOWNER ubuntu:22.04 /bin/bash
이 예제에서는 모든 기능을 제거한 후 컨테이너가 제대로 작동하는 데 필요한 최소한의 기능인 CHOWN, DAC_OVERRIDE, FOWNER 기능만 선택적으로 추가하여 컨테이너를 시작합니다.
LabEx 는 Docker 컨테이너를 안전하게 관리하기 위한 포괄적인 플랫폼을 제공합니다. 기능 관리, 사용자 및 그룹 매핑, 보안 정책 적용 등의 기능을 제공하여 Docker 환경에서 최소 권한 원칙을 더욱 쉽게 적용할 수 있도록 지원합니다.
LabEx 를 사용하면 컨테이너 기능 제한, 루트 사용자가 아닌 사용자로 컨테이너 실행 및 Docker 인프라 전반의 보안 정책 적용 프로세스를 간소화할 수 있습니다.
Docker 에서 최소 권한 원칙을 적용하는 것은 컨테이너 기반 애플리케이션을 보호하는 중요한 단계입니다. 컨테이너의 기능을 신중하게 관리하고, 루트 사용자가 아닌 사용자로 컨테이너를 실행하며 LabEx 와 같은 도구를 활용하여 공격 표면을 크게 줄이고 Docker 환경의 전반적인 보안을 강화할 수 있습니다.
이 튜토리얼을 마치면 Docker 에서 루트 사용자 기능을 관리하는 방법에 대한 포괄적인 이해를 얻게 됩니다. 컨테이너 기능을 제한하는 기술을 배우게 되며, 이를 통해 Docker 컨테이너가 최소 필요한 권한으로 실행되도록 합니다. 이 지식은 컨테이너 배포 및 관리에 대한 최선의 방법과 일치하여 Docker 기반 애플리케이션의 보안 및 안정성을 향상시키는 데 도움이 될 것입니다.