일반적으로 Docker는 root로 설치 및 실행됩니다.
개인이 사용하는 서버에서는 큰 문제가 없겠지만, 기업에서 프로덕션 용도로 사용하기 위해 이런 방식으로 Docker를 설치하여 구동하는 경우, 컨테이너 탈옥 공격이 성공했을 때 상당히 큰 위험에 노출됩니다.
다행히도 Docker에는 rootless 모드로 설치할 수 있는 옵션을 제공하는데, 시스템이 아닌 유저 영역으로 배치되기 때문에 컨테이너 탈옥 시 추가로 발생할 수 있는 피해를 최소화 해 줍니다.
이 글은 Docker를 rootless 모드로 설치하는 방법을 설명합니다.
주의사항
- 이렇게 설치하는 경우 일부 기능을 사용할 수 없게 됩니다.
- Ubuntu Server 24.04를 기준으로 합니다.
1. 필요한 패키지 설치
2개의 디펜던시가 필요합니다. 해당 패키지를 설치합니다.
# apt install uidmap curl
2. Docker 유저 생성
Docker를 사용하기 위한 유저를 생성하고, sudo 권한을 부여합니다.
# adduser docker
# usermod -aG sudo docker
이제 docker 유저를 사용하려면 su가 아닌 ssh로 로그인하여야 합니다.
그렇지 않으면 XDG_RUNTIME_DIR 에러가 발생합니다.
$ ssh docker@localhost
3. rootless Docker 설치
Docker를 사용하기 위해 만든 유저(docker)로 로그인한 상태에서 설치합니다.
$ wget https://get.docker.com/rootless
$ sh rootless
~/bin이 생성되었으며, 모든 Docker 파일이 이곳에 저장됩니다.
또한, 해당 디렉터리를 PATH로 참조하도록 ~/.bashrc에 몇 줄이 추가되어 있을 것입니다.
만약 그렇지 않은 경우, nano와 같은 에디터로 ~/.bashrc를 열어 해당 줄을 추가합니다.
export PATH=/home/$USER/bin:\$PATH
export DOCKER_HOST=unix:///run/user/$UID/docker.sock
1024 이하의 포트를 사용할 수 있도록 합니다.
$ sudo setcap cap_net_bind_service=ep $HOME/bin/rootlesskit
마지막으로, Docker를 systemd에 자동 시작 애플리케이션으로 등록하고 시작시킵니다.
$ systemctl --user start docker
$ systemctl --user enable docker
$ sudo loginctl enable-linger $USER
끝났습니다! docker info를 입력하여 잘 동작하고 있는지 확인합니다.
선택 : Portainer 설치
Portainer는 Docker 컨테이너, 이미지 등을 관리하기 위한 웹 인터페이스입니다.
docker 유저로 해당 명령어를 실행한 뒤, 웹 브라우저를 통해 {서버 IP}:9000으로 접속했을 때 인터페이스가 뜨면 성공한 것입니다.
docker run -d -p 8000:8000 -p 9000:9000 --name=portainer \
--restart=always -v /$XDG_RUNTIME_DIR/docker.sock:/var/run/docker.sock \
-v ~/.local/share/docker/volumes:/var/lib/docker/volumes \
-v portainer_data:/data portainer/portainer-ce
답글 남기기