All streams
Search
Write a publication
Pull to refresh

Comments 10

Был один момент, когда я будучи в группе docker (осуждаю конечно, но как есть) забыл/потерял пароль от рута, а sudo не был установлен. Пришлось менять пароль через контейнер😅

Спасибо дыркам в безопасности получается🤔

Для таких случаев есть single user mode

Ну так docker - это не виртуальная машина и не совсем контейнер. Это просто namespace на основные подсистемы в user space. Так себе изоляция. Ядро одно. Все процессы видны снаружи, просто под другими pid, все сетевые компоненты видны снаружи, просто в соотв. namespace, пользователи в namespace итп.

Более того - команда "docker", которую вы вводите в консоли - это просто клиентское приложение на Go, которое просто отправляет запрос на API докер-демона, который как раз и выполняется в вашей системе из-под root. Добавляя вашего юзера в группу docker вы просто разрешаете доступ к этому API (сокет-файл с ограниченными по-дефолту правами).

И благодаря этому фокус из статьи и возможен. Все операции выполняет демон, у которого прав достаточно на всё.

А какое решение считается оптимальным? Работать с контейнерами прямо из-под рута? Потому что получается доступ к Docker CLI в любых случаях дает возможность повысить свои привилегии, кроме как если работа и так уже не выполняется из-под рута

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

В документации много всего описано. Например, есть rootless режим, когда демон запускается не под рутом. Естественно, там куча ограничений.

На своём ноутбуке для экспериментов достаточно обычного способа, когда демон под рутом и вы через sudo запускаете команды. Смотрите аккуратнее что вы запускаете - и всё. Малвари трудно будет пролезть.

На продакшене возможны варианты. Очень многие приложения просто предлагают дать им доступ к докер-сокету, чтобы они что-то делали. Например Traefik - он мониторит состояние контейнеров через API докера, но ему совсем не нужен полный доступ - достаточно только readonly на ограниченное количество операций. Для этого можно прокинуть сокет через, например, reverse-proxy типа nginx, сделать там basic авторизацию и разрешить отдельным пользователям типа Traefik только GET запросы. Можно погуглить по "docker socket proxy" и будут варианты типа Tecnativa или другие. Я сделал вручную через nginx.

Спасибо, интересная информация

rootless docker, podman, firecracker

Sign up to leave a comment.

Articles