개발 중에 Docker "엔진"을 sudo
계속 실행해야 합니까? 그게 당신이 하는 일인가요? 도커를 운영하고 있나요 sudo -i
? 아니면 sudo에 타이머를 설정합니까? 키/패스 관리자를 활성화하는 것처럼 보다 편리하게 작동할 수 있는 안전한 방법이 있습니까?
배경
Docker 웹 사이트에서 "Desktop"을 설치하라는 메시지에 따라(엔진도 있지만 "Engine" URL 끝점도 Desktop에 연결되어 있음) Linux에서 엔진을 사용하는 것을 고려하게 만드는 몇 가지 상황에 직면했습니다.
답변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