Как я могу использовать докера без sudo?

На страницах документации Докера без всех команд в качестве примера показывают sudo, как этот:

docker ps

На Ubuntu называют двоичный файл docker.io. Это также не работает без sudo:

sudo docker.io ps

Как я могу настроить Докера так, чтобы я не должен был снабжать префиксом каждую команду Docker sudo?

985
задан 6 June 2014 в 01:17

5 ответов

Хорошие новости: новый докер (версия 19.03 (в настоящее время экспериментальная)) сможет запускаться без root, устраняя проблемы, которые могут возникнуть при использовании root-пользователя. Больше не нужно возиться с повышенными разрешениями, root и всем, что может открыть вашу машину, когда вы этого не хотите.

Видео об этом из [DockerCon 2019] Защита демона Docker с помощью режима без рута

Несколько предостережений по поводу режим Docker без рут

Инженеры Docker говорят, что режим без рута нельзя рассматривать как замену всего набора функций механизма Docker. Некоторые ограничения для режима без root включают:

  • элементы управления ресурсами cgroups, профили безопасности apparmor, контрольные точки / восстановление, оверлейные сети и т. Д. Не работают в режиме без root.
  • Открытие портов из контейнеров в настоящее время требует ручного вспомогательного процесса socat.
  • ] Только Ubuntu-базирующиеся дистрибутивы поддерживают оверлейные файловые системы в режиме без root.
  • Режим без рута в настоящее время предоставляется только для ночных сборок, которые могут быть не такими стабильными, как вы привыкли.

Начиная с docker 19.3 это устарело (и более опасно, чем нужно ):

В руководстве по докеру говорится об этом следующее:

Предоставление доступа без полномочий root

Демон докера всегда запускается от имени пользователя root, а начиная с версии Docker 0.5.2, демон docker привязывается к сокету Unix, а не к порту TCP. По умолчанию этот сокет Unix принадлежит пользователю root, поэтому по умолчанию вы можете получить к нему доступ с помощью sudo.

Начиная с версии 0.5.3, если вы (или ваш установщик Docker) создаете группу Unix с именем docker и добавьте к нему пользователей, тогда демон докера сделает владение сокетом Unix доступным для чтения / записи группой докеров при запуске демона. Демон docker всегда должен запускаться от имени пользователя root, но если вы запускаете клиент docker от имени пользователя в группе docker, вам не нужно добавлять sudo ко всем командам клиента. Начиная с версии 0.9.0, вы можете указать, что группа, отличная от docker, должна владеть сокетом Unix с параметром -G.

Предупреждение: группа docker (или группа, указанная с помощью -G) эквивалентна root; см. Детали атаки Docker Daemon и этот блог на Почему мы не позволяем пользователям без полномочий root запускать Docker в CentOS, Fedora или RHEL (спасибо michael-n).

В недавнем выпуске экспериментального режима без root на GitHub инженеры упоминают, что режим без root позволяет запускать dockerd от имени непривилегированного пользователя, используя user_namespaces (7), mount_namespaces (7), network_namespaces (7).

Пользователям необходимо запустить dockerd-rootless.sh вместо dockerd.

 $ dockerd-rootless.sh --experimental
 

Поскольку режим Rootless является экспериментальным, пользователям необходимо всегда запускать dockerd-rootless.sh с параметром –experimental.


Важно прочитать: шаги после установки для Linux (он также ссылается на Подробная информация о поверхности атаки демона Docker ).

Управление Docker от имени пользователя без полномочий root

Демон докера привязывается к сокету Unix, а не к порту TCP. По умолчанию этот сокет Unix принадлежит пользователю root, и другие пользователи могут получить к нему доступ только с помощью sudo. Демон docker всегда запускается от имени пользователя root.

Если вы не хотите использовать sudo при использовании команды docker, создайте группу Unix под названием docker и добавьте в нее пользователей. Когда демон docker запускается, он делает доступ к сокету Unix доступным для чтения / записи группе докеров.


  • Добавьте группу докеров, если она еще не существует:

      sudo groupadd docker
     
  • Добавьте подключенного пользователя «$ USER» в группу докеров. Измените имя пользователя, чтобы оно соответствовало предпочтительному пользователю, если вы не хотите использовать текущего пользователя:

      sudo gpasswd -a $ USER docker
     
  • Выполните докер newgrp или выйдите из системы, чтобы активировать изменения в группах.

  • Вы можете использовать

      docker run hello-world
     

    , чтобы проверить, можно ли запустить docker без sudo.

1288
ответ дан 22 November 2019 в 22:31

Чтобы запустить команду docker без sudo , вам необходимо добавить своего пользователя (с правами root) в группу docker. Для этого выполните следующую команду:

 sudo usermod -aG docker $USER

Теперь выйдите из системы и войдите снова. Это решение хорошо объясняется здесь при правильном процессе установки.

291
ответ дан 22 November 2019 в 22:31

Механизм, с помощью которого добавление пользователя в группу docker дает разрешение на запуск docker, заключается в получении доступа к сокету docker по адресу /var/run/docker.sock. Если файловая система, содержащая /var/run была смонтирована с включенными ACL, то это также может быть достигнуто с помощью ACL.

sudo setfacl -m user:$USER:rw /var/run/docker.sock

Я включаю это только для полноты.

В общем, я рекомендую избегать ACL всякий раз, когда доступна хорошая альтернатива, основанная на группах: Лучше, если привилегии в системе можно понять, рассматривая только членство в группах. Необходимость сканирования файловой системы на наличие ACL записей для понимания системных привилегий является дополнительной нагрузкой при аудите безопасности.

Предупреждение 1: Это имеет такую же эквивалентность root, как и добавление $USER в группу docker. Вы всё ещё можете запустить контейнер таким образом, чтобы он имел доступ root к файловой системе хоста.

Предупреждение 2: ACL значительно сложнее для аудита безопасности, чем безопасность, основанная на группах. Вероятно, по возможности следует избегать ACL, когда вместо них можно использовать группы, по крайней мере, в средах, имеющих отношение к аудиту.

93
ответ дан 22 November 2019 в 22:31

После создания группы докеров и добавление к нему моего пользователя с помощью

sudo groupadd docker
sudo usermod -aG docker $USER

... Мне все равно пришлось предоставить сокету /var/run/docker.sock и каталогу / var / run / docker соответствующие разрешения чтобы заставить его работать:

sudo chown root:docker /var/run/docker.sock
sudo chown -R root:docker /var/run/docker
0
ответ дан 5 January 2021 в 23:07

Контейнеры Docker должны запускаться пользователем root. Вы можете добавить себя в группу docker (например, запустив sudo usermod -aG docker $ USER ), но это упрощает задачу для всех, у кого есть доступ к $ USER , чтобы получить root-доступ к машине (например,путем монтирования корневого тома в привилегированный контейнер).

Более безопасным способом запуска контейнеров Docker от имени пользователя без полномочий root было бы использование Podman: https://podman.io/ . На его веб-сайте:

Podman - это контейнерный движок без демонов для разработки, управления и запуска контейнеров OCI в вашей системе Linux. Контейнеры можно запускать как с правами root, так и в режиме без root . Проще говоря: псевдоним docker = podman .

Другой альтернативой является Singularity, которая чаще используется в средах высокопроизводительных вычислений: https://sylabs.io/ .

0
ответ дан 2 April 2021 в 00:51

Другие вопросы по тегам:

Похожие вопросы: