Run the Docker daemon as a non-root user (Rootless mode)
루트리스 모드를 사용하면 루트가 아닌 사용자로 Docker 데몬 및 컨테이너를 실행하여 데몬 및 컨테이너 런타임의 잠재적인 취약성을 완화할 수 있습니다.
루트리스 모드는 전제 조건이 충족되는 한 Docker 데몬 설치 중에도 루트 권한이 필요하지 않습니다.
루트리스 모드는 실험적 기능으로 Docker Engine v19.03에 도입되었습니다. Rootless 모드는 Docker Engine v20.10에서 실험 단계를 마쳤습니다.
작동 원리
루트리스 모드는 사용자 네임스페이스 내에서 Docker 데몬과 컨테이너를 실행합니다. 이것은 userns-remap 모드에서 데몬 자체가 루트 권한으로 실행되는 반면 루트리스 모드에서는 데몬과 컨테이너가 모두 루트 권한 없이 실행된다는 점을 제외하고는 userns-remap 모드와 매우 유사합니다.
루트리스 모드는 사용자 네임스페이스에서 여러 UID/GID를 사용할 수 있도록 하는 데 필요한 newuidmap 및 newgidmap을 제외하고 SETUID 비트 또는 파일 기능이 있는 바이너리를 사용하지 않습니다.
Prerequisites
호스트에 newuidmap 및 newgidmap을 설치해야 합니다. 이러한 명령은 대부분의 배포판에서 uidmap 패키지에 의해 제공됩니다.
/etc/subuid 및 /etc/subgid에는 사용자에 대한 최소 65,536개의 하위 UID/GID가 포함되어야 합니다. 다음 예에서 사용자 testuser는 65,536개의 하위 UID/GID(231072-296607)를 가지고 있습니다.
id -u
1001
$ whoami
testuser
$ grep ^$(whoami): /etc/subuid
testuser:231072:65536
$ grep ^$(whoami): /etc/subgid
testuser:231072:65536
- Add user.max_user_namespaces=28633 to /etc/sysctl.conf (or /etc/sysctl.d) and run sudo sysctl --system
- systemctl --user does not work by default. Run dockerd-rootless.sh directly without systemd.
Install
Note
Docker 데몬이 이미 실행 중이면 비활성화 시킵니다.
$ sudo systemctl disable --now docker.service docker.socket
With packages(RPM/DEB)
RPM/DEB 패키지와 함께 Docker 20.10 이상을 설치했다면 /usr/bin에 dockerd-rootless-setuptool.sh가 있어야 합니다.
루트가 아닌 사용자로 dockerd-rootless-setuptool.sh install을 실행하여 데몬을 설정합니다.
without packages
apt-get 및 dnf와 같은 패키지 관리자를 실행할 권한이 없는 경우 https://get.docker.com/rootless에서 제공되는 설치 스크립트를 사용하는 것이 좋습니다. s390x에서는 정적 패키지를 사용할 수 없으므로 s390x에서는 지원되지 않습니다.
curl -fsSL https://get.docker.com/rootless | sh
...
[INFO] Creating /home/testuser/.config/systemd/user/docker.service
...
[INFO] Installed docker.service successfully.
[INFO] To control docker.service, run: `systemctl --user (start|stop|restart) docker.service`
[INFO] To run docker.service on system startup, run: `sudo loginctl enable-linger testuser`
[INFO] Make sure the following environment variables are set (or add them to ~/.bashrc):
export PATH=/home/testuser/bin:$PATH
export DOCKER_HOST=unix:///run/user/1000/docker.sock
The binaries will be installed at ~/bin.
Uninstall
Docker 데몬의 systemd 서비스를 제거하려면 dockerd-rootless-setuptool.sh uninstall을 실행합니다.
dockerd-rootless-setuptool.sh uninstall
+ systemctl --user stop docker.service
+ systemctl --user disable docker.service
Removed /home/testuser/.config/systemd/user/default.target.wants/docker.service.
[INFO] Uninstalled docker.service
[INFO] This uninstallation tool does NOT remove Docker binaries and data.
[INFO] To remove data, run: `/usr/bin/rootlesskit rm -rf /home/testuser/.local/share/docker`
~/.bashrc에 추가한 경우 환경 변수 PATH 및 DOCKER_HOST를 설정 해제합니다.
데이터 디렉토리를 제거하려면 rootlesskit rm -rf ~/.local/share/docker를 실행합니다.
바이너리를 제거하려면 패키지 관리자와 함께 Docker를 설치한 경우,
docker-ce-rootless-extras 패키지를 제거합니다.
https://get.docker.com/rootless(패키지 없이 설치)로 Docker를 설치한 경우 ~/bin 아래의 바이너리 파일을 제거합니다.
cd ~/bin
$ rm -f containerd containerd-shim containerd-shim-runc-v2 ctr docker docker-init docker-proxy dockerd dockerd-rootless-setuptool.sh dockerd-rootless.sh rootlesskit rootlesskit-docker-proxy runc vpnkit
'Docker' 카테고리의 다른 글
Docker - 파일 저장 위치 (0) | 2022.04.19 |
---|---|
Install Docker Engine on CentOS (0) | 2022.04.18 |
docker compose 설치 (0) | 2022.03.18 |
Docker Image 만들기 (0) | 2022.02.22 |
podman Error Message ERRO[0000] (0) | 2022.01.13 |