Разрешить некорневому пользователю использовать некоторые команды Docker

У меня есть пользователь restricted, и пользователь может получить доступ только к своим собственным файлам. Это пользователь без полномочий root, поэтому он не может использовать Docker (делает docker run foo => docker: Got permission denied while trying to connect to the Docker daemon socket...).

Я хочу разрешить этому пользователю создавать свои собственные изображения Docker только из своего файлового пространства и иметь возможность удалять / создавать свои собственные изображения, которые он сделал. Кроме того, они смогут запускать только свои собственные изображения и останавливать свои собственные контейнеры изображений.

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

3
задан 7 September 2019 в 17:18

4 ответа

На официальную документацию докера,

Рабочие контейнеры (и приложения) с Докером подразумевают выполнение демона Докера. Этот демон требует полномочий пользователя root, если Вы не подписываетесь к (экспериментальному) режиму Rootless...

Инструкции для этого режима могут быть найдены на GitHub:

https://github.com/docker/engine/blob/v19.03.0-rc3/docs/rootless.md

Я хочу позволить этому пользователю создавать их собственные изображения Докера только из их файлового пространства и только мочь к delete/rmi их собственные изображения, которые они сделали.

Если Вы только стремитесь создать контейнеры, можно было бы попытаться использовать img,

Автономный, демон меньше, непривилегированный Dockerfile и OCI совместимый контейнерный разработчик изображения.

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

Кроме того, они только смогут выполнить свои собственные изображения и остановить их собственные контейнеры изображения.

К сожалению, как указано ранее, img не может выполнить контейнеры, только создать их.

См. также: https://rootlesscontaine.rs

1
ответ дан 1 December 2019 в 17:25

Управляйте Докером как некорневым пользователем По умолчанию, сокет Unix принадлежит пользовательскому корню, и другие пользователи могут только получить доступ к нему с помощью sudo. Демон докера всегда работает как пользователь root. Если Вы не хотите использовать sudo, когда Вы используете команду докера, создаете группу Unix, названную докером, и добавляете пользователей к ней.

0
ответ дан 1 December 2019 в 17:25

Из превосходного ответа, найденного здесь:

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

Видео об этом от [DockerCon 2019], Укрепляющего демона Докера с режимом Rootless

Несколько Протестов к беспочвенному режиму Docker

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

  • управление ресурсами cgroups, apparmor профили безопасности, контрольная точка/восстановление, оверлейные сети и т.д. не работают над беспочвенным режимом.
  • Представление портов от контейнеров в настоящее время требует руководства socat процесс помощника.
  • Только основанная на Ubuntu поддержка дистрибутивов накладывает файловые системы в беспочвенном режиме.
  • Беспочвенный режим в настоящее время только предусмотрен ночные сборки, которые не могут быть столь стабильными, как Вы привыкли к.

С докера 19.3 это является устаревшим (и более опасным, чем потребность быть):

Руководство докера говорит следующее об этом:

Предоставление некорневого доступа

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

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

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

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

Пользователи должны выполнить dockerd-rootless.sh вместо dockerd.

$ dockerd-rootless.sh --experimental

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


Важный для чтения: шаги после установки для Linux (это также связывается с деталями Поверхности атаки Демона Докера).

Управляйте Докером как некорневым пользователем

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

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


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

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

    sudo gpasswd -a $USER docker
    
  • Любой делает a newgrp docker или журнал/в для активации изменений в группах.

  • Можно использовать

    docker run hello-world
    

    проверять, можно ли выполнить докера без sudo.

0
ответ дан 1 December 2019 в 17:25

docker run foo => docker: Got permission denied while trying to connect to the Docker daemon socket...

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

Проблема от причины SystemD, которой будет сокет, создают только с root:root . Можно проверить его с этим:

ls -l /lib/systemd/system/docker.socket

Если это хорошо, необходимо видеть это root:docker нет root:root.

Решение от этого выходит. Можно попробовать, делают это задание:

$sudo chgrp docker /lib/systemd/system/docker.socket
$sudo chmod g+w /lib/systemd/system/docker.socket
$sudo chmod 666 /var/run/docker.sock

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

Надеюсь, это поможет.

0
ответ дан 1 December 2019 в 17:25

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

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