
sudo
Docker의 설명서 페이지에는 다음과 같이 모든 예제 명령이 없이 표시됩니다 .
docker ps
우분투에서는 바이너리를 docker.io
. 또한 다음 없이는 작동하지 않습니다 sudo
.
sudo docker.io ps
모든 Docker 명령에 접두사를 붙일 필요가 없도록 Docker를 구성하려면 어떻게 해야 합니까 sudo
?
답변1
좋은 소식: 새로운 Docker 버전 19.03(현재 실험 중)은 루트 사용자를 사용하여 발생할 수 있는 문제를 무시하고 루트 없이 실행할 수 있습니다. 더 이상 원하지 않을 때 컴퓨터를 열 수 있는 상승된 권한, 루트 및 기타 항목으로 인해 혼란을 겪을 필요가 없습니다.
이에 관한 동영상[DockerCon 2019] Rootless 모드로 Docker 데몬 강화하기
루트 없는 Docker 모드에 대한 몇 가지 주의 사항
Docker 엔지니어들은 루트 없는 모드가 Docker 엔진 기능 전체를 대체하는 것으로 간주될 수 없다고 말합니다. 루트 없는 모드에 대한 일부 제한 사항은 다음과 같습니다.
- cgroups 리소스 제어, 의류 보안 프로필, 체크포인트/복원, 오버레이 네트워크 등은 루트 없는 모드에서 작동하지 않습니다.
- 컨테이너에서 포트를 노출하려면 현재 수동 socat 도우미 프로세스가 필요합니다.
- Ubuntu 기반 배포판만 루트 없는 모드에서 오버레이 파일 시스템을 지원합니다.
- 루트 없는 모드는 현재 예전만큼 안정적이지 않을 수 있는 야간 빌드에만 제공됩니다.
Docker 19.3부터 이는 더 이상 사용되지 않습니다(그리고 필요 이상으로 더 위험합니다).
그만큼도커 매뉴얼그것에 대해 이런 말이 있습니다:
루트가 아닌 사용자에게 액세스 권한 부여
docker 데몬은 항상 루트 사용자로 실행되며, Docker 버전 0.5.2부터 docker 데몬은 TCP 포트 대신 Unix 소켓에 바인딩됩니다. 기본적으로 Unix 소켓은 루트 사용자가 소유하므로 기본적으로 sudo를 사용하여 액세스할 수 있습니다.
버전 0.5.3부터, 귀하(또는 Docker 설치 프로그램)가 docker라는 Unix 그룹을 생성하고 여기에 사용자를 추가하면 docker 데몬은 데몬이 시작될 때 docker 그룹이 Unix 소켓의 소유권을 읽고 쓸 수 있게 만듭니다. . docker 데몬은 항상 루트 사용자로 실행되어야 하지만, docker 그룹의 사용자로 docker 클라이언트를 실행하는 경우 모든 클라이언트 명령에 sudo를 추가할 필요가 없습니다. 0.9.0부터 -G 옵션을 사용하여 docker가 아닌 그룹이 Unix 소켓을 소유하도록 지정할 수 있습니다.
경고: docker 그룹(또는 -G로 지정된 그룹)은 루트와 동일합니다. 보다Docker 데몬 공격 표면 세부정보그리고 이 블로그 포스트는루트가 아닌 사용자가 CentOS, Fedora 또는 RHEL에서 Docker를 실행하도록 허용하지 않는 이유(michael-n에게 감사드립니다).
최근 출시된GitHub의 실험적인 루트리스 모드엔지니어들은 루트 없는 모드를 사용하면 user_namespaces(7), mount_namespaces(7), network_namespaces(7)를 사용하여 권한 없는 사용자로 dockerd를 실행할 수 있다고 언급합니다.
사용자는 dockerd 대신 dockerd-rootless.sh를 실행해야 합니다.
$ dockerd-rootless.sh --experimental
Rootless 모드는 실험적이므로 사용자는 항상 –experimental을 사용하여 dockerd-rootless.sh를 실행해야 합니다.
읽어야 할 중요 사항:Linux의 설치 후 단계(이것은 또한 다음으로 연결됩니다.Docker 데몬 공격 표면 세부정보).
루트가 아닌 사용자로 Docker 관리
docker 데몬은 TCP 포트 대신 Unix 소켓에 바인딩됩니다. 기본적으로 Unix 소켓은 루트 사용자가 소유하며 다른 사용자는 sudo를 통해서만 액세스할 수 있습니다. docker 데몬은 항상 루트 사용자로 실행됩니다.
docker 명령을 사용할 때 sudo를 사용하지 않으려면 docker라는 Unix 그룹을 만들고 여기에 사용자를 추가하세요. docker 데몬이 시작되면 docker 그룹이 Unix 소켓의 소유권을 읽고 쓸 수 있게 만듭니다.
docker
그룹이 아직 없으면 추가합니다 .sudo groupadd docker
연결된 사용자 "$USER"를
docker
그룹에 추가합니다. 현재 사용자를 사용하지 않으려면 기본 사용자와 일치하도록 사용자 이름을 변경하십시오.sudo gpasswd -a $USER docker
그룹에 대한 변경 사항을 활성화하려면 다음을 수행하거나 로그아웃
newgrp docker
/로그인하세요.당신이 사용할 수있는
docker run hello-world
NET 없이 Docker를 실행할 수 있는지 확인합니다
sudo
.
답변2
없이 docker 명령을 실행하려면 sudo
사용자(루트 권한이 있는 사용자)를 docker 그룹에 추가해야 합니다. 이 실행의 경우 다음 명령을 실행합니다.
sudo usermod -aG docker $USER
이제 사용자가 로그아웃한 다음 다시 로그인하도록 합니다. 이 솔루션은 잘 설명되어 있습니다.여기적절한 설치 과정을 통해.
답변3
그룹에 사용자를 추가하면 docker 실행 권한이 부여되는 메커니즘은 에서 docker
docker 소켓에 액세스하는 것입니다 /var/run/docker.sock
. 포함된 파일 시스템이 /var/run
ACL을 활성화하여 마운트된 경우 ACL을 통해서도 이 작업을 수행할 수 있습니다.
sudo setfacl -m user:$USER:rw /var/run/docker.sock
나는 완전성을 위해 이것을 포함하고 있습니다.
일반적으로 그룹 기반의 좋은 대안이 있을 때마다 ACL을 피하는 것이 좋습니다. 그룹 멤버십만 보고 시스템의 권한을 이해할 수 있다면 더 좋습니다. 시스템 권한을 이해하기 위해 파일 시스템에서 ACL 항목을 검색해야 하는 것은 보안 감사에 대한 추가적인 부담입니다.
경고 1: 그룹 에 root
추가하는 것과 동일합니다 . 호스트 파일 시스템에 액세스 할 수 있는 방식으로 컨테이너를 계속 시작할 수 있습니다 .$USER
docker
root
경고 2: ACL은 그룹 기반 보안보다 보안 감사가 훨씬 더 어렵습니다. 적어도 감사 관련 환경에서는 그룹을 대신 사용할 수 있으면 가능하면 ACL을 피하는 것이 좋습니다.
답변4
Docker 컨테이너는 슈퍼유저가 실행해야 합니다. 그룹 에 자신을 추가할 수 있지만 docker
(예: 를 실행하여 sudo usermod -aG docker $USER
) 계정에 액세스할 수 있는 사람은 누구나 쉽게 $USER
머신에 대한 루트 액세스 권한을 얻을 수 있습니다(예: 권한 있는 컨테이너에 루트 볼륨을 마운트함으로써).
루트가 아닌 사용자로 Docker 컨테이너를 실행하는 보다 보안에 민감한 방법은 다음을 사용하는 것입니다.포드맨. 웹사이트에서:
Podman은 Linux 시스템에서 OCI 컨테이너를 개발, 관리 및 실행하기 위한 데몬 없는 컨테이너 엔진입니다. 컨테이너는 루트로 실행되거나뿌리 없는 모드. 간단히 말해서:
alias docker=podman
.
또 다른 대안은특이, 이는 HPC 환경에서 더 일반적으로 배포됩니다.