Как usermod позволяет обойти sudo?

Как usermod позволяет обойти sudo?

Недавно моя команда провела презентацию, на которой я представил свои выводы.Докер. Я объяснил, как можно установить 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 без рабочего стола и всех этих причудливых привилегий, то, если я не ошибаюсь, он был бы более безопасен, чем все наши любимые приложения и т. п. Я не знаю, помог ли мой ответ, но надеюсь, что помог.

Связанный контент