Запустите Docker от имени пользователя root - PullRequest
0 голосов
/ 12 июня 2018

Запутайтесь в том, что «запускайте docker как пользователь без полномочий root против пользователя root».

Первый вопрос (запуск от имени пользователя без полномочий root): на основе Шаги после установки для Linux , чтобы запустить docker от имени пользователя без полномочий root, мы создаем группу Docker и добавляем пользователя вЭто.Тем не менее, статья утверждает, что «Докер-группа предоставляет привилегии, эквивалентные привилегированным пользователям».Так что, если я правильно понимаю это предложение, мы не запускаем docker как root, но мы запускаем его как пользователь (в группе docker), который так же силен, как root?

Второй вопрос (запуск от имени пользователя root): предположим, я выполнил указанные выше действия (создайте группу Docker и добавьте в нее пользователя).Тем не менее, я указываю «USER root» в Dockerfile (пример ниже).Когда я запускаю этот контейнер, он запускается от имени пользователя root независимо от значения, указанного выше, верно?

FROM debian:stretch
USER root
CMD["echo", "hello"] 

Ответы [ 2 ]

0 голосов
/ 12 июня 2018

Группа Docker предоставляет привилегии, эквивалентные привилегированному пользователю

По умолчанию да.Это также верно для любого пользователя, который может запустить докер-контейнер на компьютере.

Причина заключается в том, что по умолчанию, когда вы запускаете от имени root внутри контейнера, это сопоставляется с root на хост-компьютере.Таким образом, вы можете привязать некоторые конфиденциальные папки с хоста к контейнеру и выполнить привилегированные действия на этих монтируемых устройствах, поскольку пользователь внутри контейнера является пользователем root (pid 0).

Для этого необходимо включить * 1009.* user-namespace , который в основном отображает пользователя root внутри контейнера на пользователя без полномочий root на компьютере.

Второй вопрос (запуск от имени пользователя root): предположим, я выполнил шагивыше (создайте группу Docker и добавьте в нее пользователя).Тем не менее, я указываю «USER root» в Dockerfile (пример ниже).Когда я запускаю этот контейнер, он будет работать как root независимо от настройки выше, правильно?

Здесь есть несколько моментов:

  • По умолчанию USER root - этопо умолчанию, так что вам не нужно его указывать.(Если базовый образ явно не устанавливает пользователя, кроме root)
  • С точки зрения хост-машины докер-контейнер - это просто нормальный процесс.У каждого процесса есть владелец.Этот владелец является пользователем хост-компьютера, который выполнил команду docker run.Инструкция USER root не имеет ничего общего с этим владельцем.Инструкция USER указывает только пользователя внутри контейнера, который будет запускать процесс внутри контейнера, который отличается от владельца контейнера.
0 голосов
/ 12 июня 2018

ОК, здесь есть две разные темы:

Ваш первый вопрос касается разрешений для ваших локальных пользователей linux на доступ к докерному сокету (это означает, что они могут выполнять команды докера, такие как docker run, * 1004).*, так далее.).Сам демон Docker всегда запускается пользователем root, и, добавляя другого пользователя в группу Docker, вы предоставляете разрешения на использование этого демона.

Но второй вопрос касается пользователя внутри контейнера.Это не имеет ничего общего ни с упомянутой выше группой докеров, ни с пользователем, которого вы используете для запуска команд докера.

Вы можете выбрать любого пользователя для запуска внутри контейнеров с USER <any user> в вашем Dockerfile, независимо от пользователя, которого вы используете вне контейнера для создания или запуска этого образа.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...