sudo를 자주 사용하지 않고도 docker 데스크탑처럼 안전하게 docker 엔진을 실행할 수 있나요?

sudo를 자주 사용하지 않고도 docker 데스크탑처럼 안전하게 docker 엔진을 실행할 수 있나요?

개발 중에 Docker "엔진"을 sudo계속 실행해야 합니까? 그게 당신이 하는 일인가요? 도커를 운영하고 있나요 sudo -i? 아니면 sudo에 타이머를 설정합니까? 키/패스 관리자를 활성화하는 것처럼 보다 편리하게 작동할 수 있는 안전한 방법이 있습니까?

배경

Docker 웹 사이트에서 "Desktop"을 설치하라는 메시지에 따라(엔진도 있지만 "Engine" URL 끝점도 Desktop에 연결되어 있음) Linux에서 엔진을 사용하는 것을 고려하게 만드는 몇 가지 상황에 직면했습니다.

  • 계속 메시지가 표시됨암호초기화 후 데스크탑에서 사용신임장GPG를 통해 - 해마/패스를 통해 "고정"되었습니다.
  • 엔진을 사용하는 경우 필수 sudo- 사용 가능그룹비록 이것이위험한.
  • 두 개의 Docker 컨텍스트 실행: 기본(엔진) 및 데스크톱 Linux - 확인스위치하지만 여전히 알림입니다 sudo.
  • 엔진과 데스크톱에는 서로 다른 두 목록이 표시됩니다 docker context ls. 아마도해결됨동일한 Docker 엔드포인트에 대한 루트 사용자 컨텍스트를 생성합니다.

이로 인해 docker에 설명된 차이점을 더 잘 알게 되었습니다.문서그리고법정.

답변1

1. 호스트에서 루트로 docker를 사용하는 것과는 달리

Docker Desktop은 다음에서 실행되기 때문에 더 안전합니다.가상 기기. 즉, docker-desktop 액세스 권한이 있는 손상된 사용자는 전체 호스트 시스템이 아닌 docker 컨테이너와 docker 엔진에만 손상을 입힐 수 있습니다.

따라서 호스트 시스템에서 루트로 실행되는 docker 데몬은 항상 이 보안 취약점에 취약합니다. 그것이 바로 그것입니다.

최소한 VirtualMachine 컨테이너가 없는 호스트에서 루트 데몬으로 실행하면 항상 루트 터미널로 연결됩니다.

docker run -it --rm --privileged --pid=host ubuntu:latest nsenter -at 1

2. 가상 머신의 Docker 엔진(데스크톱 없음)

바인드 마운트 작업의 의미를 이해해야 하지만 가상 머신에서 직접 docker를 실행하는 데 방해가 되는 것은 없습니다.

3. 루트가 아닌 도커

다른 옵션은 루트가 아닌 사용자로 docker를 실행하는 것입니다. 이는 docker 자체가 시스템에 대한 액세스 권한이 훨씬 적다는 것을 의미하지만 docker 내에서 실행할 수 있는 작업에 대한 제한이 추가됩니다. 이봐:https://docs.docker.com/engine/security/rootless/

  • 다음 저장소 드라이버만 지원됩니다.
    • overlay2(커널 5.11 이상 또는 Ubuntu 스타일 커널을 실행하는 경우에만)
    • fusion-overlayfs(커널 4.18 이상을 실행하고 fusion-overlayfs가 설치된 경우에만)
    • btrfs(커널 4.18 이상으로 실행하는 경우 또는 user_subvol_rm_allowed 마운트 옵션을 사용하여 ~/.local/share/docker를 마운트하는 경우에만) -vfs
  • Cgroup은 cgroup v2 및 systemd로 실행할 때만 지원됩니다. 리소스 제한을 참조하세요.
  • 다음 기능은 지원되지 않습니다.
    • 갑옷을 적용
    • 검문소
    • 오버레이 네트워크
    • SCTP 포트 노출
  • ping 명령을 사용하려면 ping 패킷 라우팅을 참조하세요.
  • 권한 있는 TCP/UDP 포트(< 1024)를 노출하려면 권한 있는 포트 노출을 참조하세요.
  • docker Inspect에 표시된 IPAddress는 RootlessKit의 네트워크 네임스페이스 내에서 이름이 지정됩니다. 즉, 네트워크 네임스페이스를 입력하지 않으면 호스트(IP 주소)에서 해당 네임스페이스에 액세스할 수 없습니다.
  • 호스트 네트워크(docker run --net=host)도 RootlessKit에서 내부적으로 이름이 지정됩니다.
  • NFS에 대한 Docker "데이터 루트" 마운트는 지원되지 않습니다. 이 제한은 루트 없는 모드에만 국한되지 않습니다.
4. 비밀번호로 보호된 전용 Docker 사용자 생성

액세스할 수 있는 전용 사용자 만들기

sudo -iu docker-admin-user

관련 정보