У меня есть пользователь restricted
, и пользователь может получить доступ только к своим собственным файлам. Это пользователь без полномочий root, поэтому он не может использовать Docker (делает docker run foo
=> docker: Got permission denied while trying to connect to the Docker daemon socket...
).
Я хочу разрешить этому пользователю создавать свои собственные изображения Docker только из своего файлового пространства и иметь возможность удалять / создавать свои собственные изображения, которые он сделал. Кроме того, они смогут запускать только свои собственные изображения и останавливать свои собственные контейнеры изображений.
Из прочитанных мною вопросов единственный способ добиться этого - добавить пользователя root в группу, в которую входит пользователь без полномочий root, что создает огромный риск уязвимости.
На официальную документацию докера,
Рабочие контейнеры (и приложения) с Докером подразумевают выполнение демона Докера. Этот демон требует полномочий пользователя 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
Управляйте Докером как некорневым пользователем По умолчанию, сокет Unix принадлежит пользовательскому корню, и другие пользователи могут только получить доступ к нему с помощью sudo. Демон докера всегда работает как пользователь root. Если Вы не хотите использовать sudo, когда Вы используете команду докера, создаете группу Unix, названную докером, и добавляете пользователей к ней.
Из превосходного ответа, найденного здесь:
Хорошие новости: новый докер ((в настоящее время экспериментальная) версия 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.
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
Это должно быть работой, если Вы находитесь в графической среде и вероятно единственном пользователе на Вашем компьютере. Эта потребность случая перезагрузка.
Надеюсь, это поможет.