Обновить

Root в контейнере — это root на хосте? Разбираю важные особенности прав доступов в контейнерах Docker/Podman

Уровень сложностиСредний
Время на прочтение9 мин
Охват и читатели16K
Всего голосов 30: ↑29 и ↓1+34
Комментарии6

Комментарии 6

Докер при установке предлагает установить rootless аддон, установка от пользователя sudo только

Предпоследний абзац статьи которую вы комментирует вам о чем то говорит?

Тимофей а вы можете проверить рут в контейнере в докере с включенным руттлес моде.

Возникло подозрение что если это идёт от ядра, то то рутлесс снаружи контейнера может не сработать.

Стоит еще добавить классическую дыру безопасности, когда в контейнер пробрасывают /var/run/docker.sock. Так как Docker по умолчанию работает от root, любой пользователь внутри контейнера, имеющий доступ к этому сокету, может выполнить docker run с рутовыми правами и получить полный контроль над хостом. В Dockerless/Rootless средах вроде Podman с этим попроще

Возможно, дело не в том, что Docker "небезопасный по умолчанию", а в том, что экосистема образов сформировалась вокруг запуска от настоящего root – и включить user namespace remapping по умолчанию значит сломать совместимость с огромным пластом уже написанных образов. Docker это знает и делает выбор в пользу совместимости. Podman выбрал другой дефолт для новой экосистемы, где этого legacy меньше.

Это именно архитектурное решение, сделанное во время дизайна Docker -- разрешить любому запускать процессы с UID==0 внутри контейнера и отображать этот UID на такой же в хостовой системе. Так что это именно небезопасность по умолчанию.

Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации