
Недавно моя команда провела презентацию, на которой я представил свои выводы.Докер. Я объяснил, как можно установить 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
, у него нет прав rwx для выполнения каких-либо действий с двоичными файлами Docker. - Поэтому решением будет либо использовать
sudo
, что даст вам права root для данной команды, либо предоставить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, у него нет прав rwx для выполнения каких-либо действий с двоичными файлами Docker.
Двоичные файлы доступны для чтения и исполнения любому пользователю.
Поэтому решением будет либо использовать sudo, который дает вам права root для данной команды, либо предоставить 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, независимо от дистрибутива, насколько мне известно, может заражаться вирусами, как и любая другая операционная система, в зависимости от того, что вы устанавливаете или нет. Возьмем для примера Flash Player, даже на Windows он создает множество уязвимостей в операционной системе, делая ее более уязвимой, чем раньше, когда она была только что из коробки.
Если бы вы запустили Linux без рабочего стола и всех этих причудливых привилегий, то, если я не ошибаюсь, он был бы более безопасен, чем все наши любимые приложения и т. п. Я не знаю, помог ли мой ответ, но надеюсь, что помог.