Безопасность Docker: почему запуск от root — это плохая идея

Docker стал незаменимым инструментом в современном DevOps и разработке. Он позволяет изолировать окружения, упрощать деплой и быстро масштабировать приложения. Однако по умолчанию Docker требует root-доступа, и это создает потенциально опасную зону, которую часто игнорируют на ранних этапах.

Почему Docker работает от root?

Docker использует возможности ядра Linux: cgroups, namespaces, iptables, mount, networking и другие системные функции. Эти операции доступны только суперпользователю.

Вот почему:
* демон dockerd запускается от root,
* команды docker передаются этому демону.

Это упрощает работу и даёт полный контроль над системой, но вместе с этим и открывает потенциальные уязвимости.

Чем это опасно: container breakout, CVE, RCE

Container breakout

При слабой изоляции злоумышленник может использовать chroot или pivot_root для выхода на хост.

Примеры реальных атак:

* CVE-2019-5736 — уязвимость в runc, позволяла перезаписать приложение и выполнить код на хосте.
* CVE-2021-3156 — уязвимость в sudo, позволяла получить root внутри контейнера и выбраться наружу.

RCE (Remote Code Execution)

Если приложение в контейнере уязвимо и запускается от root, RCE = полный контроль над хостом.

Rootless Docker: решение проблемы

Чтобы минимизировать эти риски, в Docker появился rootless-режим. В этом режиме и демон, и контейнеры запускаются от имени обычного пользователя, без каких-либо root-привилегий. Это означает, что даже если злоумышленник получит контроль над контейнером, он не сможет навредить хостовой системе.
Есть и ограничения: нельзя использовать порты ниже 1024 (например, 80 и 443), недоступен режим –privileged, а также некоторые сетевые режимы. Однако в большинстве сценариев разработки и CI/CD rootless Docker прекрасно справляется со своей задачей и значительно повышает уровень безопасности.

Исторически запуск от root — антипаттерн

В мире UNIX/Linux с самого начала действует принцип наименьших привилегий. Чем меньше прав у процесса — тем меньше вреда он может нанести. Docker изначально требовал root-доступ, но сегодня это считается потенциальной угрозой.

Источники

https://docs.docker.com/engine/security/rootless/
https://rootlesscontaine.rs/