
우리 팀은 최근 쇼 앤 텔(Show-n-Tell)을 가졌고 나는 결과를 발표했습니다.도커. 다음을 사용하여 Docker를 설치하는 방법을 설명했습니다.
curl -sSL https://get.docker.com/ | sh
그런 다음 이 설치에서는 다음을 실행하지 않는 한 모든 Docker 명령 앞에 sudo
(예: ) 를 붙여야 한다고 설명했습니다 .sudo docker info
sudo usermod -aG docker myUser
이 작업을 수행하면 다음과 같이 실행할 수 있습니다 docker info
.
또 다른 주니어 엔지니어가 나에게 이 usermod
명령이 어떻게 작동하는지 물었고 나는 Linux 사용자/그룹을 이해하면서 설명했습니다.
- 모든 Docker 바이너리는 다음과 같은 그룹에 속하는 시스템에 설치됩니다.
docker
myUser
은(는) 기본적으로 의 멤버가 아니므 로docker
Docker 바이너리로 어떤 작업도 수행할 수 있는 rwx 권한이 없습니다.sudo
따라서 해결책은 주어진 명령에 대한 루트 권한을 제공하는 것을 사용 하거나 그룹myUser
에 멤버십을 부여하는 것입니다.docker
내가 이렇게 설명하자 선임 엔지니어는 갑자기 내가 틀렸다고 말했습니다.그것보다 조금 더 복잡합니다."
그래서 저는 묻습니다. 제가 여기서 Linux의 보안 모델을 오해하고 있는 걸까요? 수석 엔지니어의 말이 맞는 걸까요? 그렇다면 내가 놓치고 있는 것은 무엇입니까(그리고 도대체 "너무 복잡"한 것은 무엇입니까)? 아니면 내 말이 맞나요? 이 경우 누군가가 이를 증명할 수 있는 확실한 문서를 알려줄 수 있나요?
답변1
모든 Docker 바이너리는 docker라는 그룹에 속하는 시스템에 설치됩니다.
잘못된. 바이너리 docker
의 소유자는 다음과 같습니다 root:root
.
$ stat `which docker`
File: ‘/usr/bin/docker’
Size: 16296881 Blocks: 31832 IO Block: 4096 regular file
Device: fc00h/64512d Inode: 143202 Links: 1
Access: (0755/-rwxr-xr-x) Uid: ( 0/ root) Gid: ( 0/ root)
myUser는 기본적으로 docker의 구성원이 아니기 때문에 Docker 바이너리로 어떤 작업도 수행할 수 있는 rwx 권한이 없습니다.
바이너리는 누구나 읽고 실행할 수 있습니다.
따라서 해결책은 주어진 명령에 대한 루트 권한을 제공하는 sudo를 사용하거나 myUser 멤버십을 docker 그룹에 부여하는 것입니다.
Docker 서비스는 소켓을 사용하여 명령을 수신합니다. 소켓은 일반적으로 다음과 같습니다.
- 에 위치한
/var/run/docker.sock
- 에게 소유 된
root:docker
- 그룹 쓰기는 가능하지만 다른 사람은 읽거나 쓸 수 없습니다.
예를 들어:
$ stat /var/run/docker.sock
File: ‘/var/run/docker.sock’
Size: 0 Blocks: 0 IO Block: 4096 socket
Device: 10h/16d Inode: 13619 Links: 1
Access: (0660/srw-rw----) Uid: ( 0/ root) Gid: ( 997/ docker)
저것이것이 그룹 의 구성원이 되면 명령을 docker
실행할 수 있는 이유입니다 docker
.
서비스 에 대한 매개변수로 사용해야 하는 그룹을 지정할 수 있습니다 docker
. 에서 man docker
:
-G, --group=""
Group to assign the unix socket specified by -H when running in dae‐
mon mode.
use '' (the empty string) to disable setting of a group. Default is
docker.
그래서 그렇지 않습니다가지다docker
하지만 기본적으로는 그렇습니다 docker
.
답변2
Linux가 얼마나 안전한지와 취약점에 대해 이야기하고 있다면 그렇다고 말할 수 있습니다. 귀하가 요구하는 내용을 충분히 명확하게 이해하고 있다면 대답은 '예'입니다. 제가 아는 바에 따르면 Linux는 배포 여부에 관계없이 설치 여부에 따라 다른 운영 체제와 마찬가지로 바이러스에 감염될 수 있습니다. Windows에서도 플래시 플레이어를 예로 들자면 운영 체제에 많은 보안 결함이 있어 처음 개봉했을 때보다 더 취약해졌습니다.
데스크탑 없이 Linux를 실행하고 다른 모든 고급 권한을 사용했다면 제가 착각하지 않았다면 우리가 좋아하는 모든 앱보다 더 안전할 것입니다. 제 답변이 도움이 되었는지는 모르겠지만 도움이 되었기를 바랍니다.