Безопасность контейнеров — как не запустить «троянского коня» в своё облако
Опубликовано 19.01.2026
Когда технология Docker только появилась, её полюбили за лозунг: «Build once, run anywhere» (Собери один раз, запускай везде). Разработчики перестали слышать фразу «на моей машине всё работает, а на сервере — нет». Но вместе с удобством пришла и новая угроза.
Контейнер — это не просто ваше приложение. Это целая мини-операционная система (ОС) со своими библиотеками, утилитами и системными вызовами. И если вы не следите за этой ОС, вы оставляете хакерам огромную дверь, открытую настежь.
Проблема «слоёного пирога»
Docker-образ строится слоями. Каждый раз, когда вы пишете FROM, RUN или COPY в своём Dockerfile, вы добавляете новый слой.
В чём подвох?
Большинство новичков начинают с команды FROM ubuntu:latest или FROM python:3.9.
- Вес: базовый
ubuntuсам по себе сравнительно небольшой, но как только вы начинаете ставить пакеты и зависимости, образ очень легко раздувается до сотен мегабайт. А «полные» языковые/SDK-образы действительно часто оказываются тяжёлыми. - Мусор: в таких образах могут оказаться (или быстро появиться) утилиты вроде
curl,wget, пакетный менеджер, shell и прочие инструменты, которые вашему приложению на самом деле не нужны для работы. - Уязвимости: чем больше пакетов в системе, тем больше в ней дыр. Хакеру не нужно взламывать ваш код на Python — он может использовать уязвимость в старой версии
curl, которая просто «лежала рядом» в контейнере.
Линия обороны №1: переход на «золотые образы» (Alpine и Distroless)
Первое правило безопасности контейнеров: выбрасывайте всё лишнее. Если вашему приложению не нужен bash, его не должно быть в контейнере.
1) Alpine Linux
Это сверхлёгкий дистрибутив Linux. Базовый образ весит всего около 5 МБ. В нём нет почти ничего, кроме самого необходимого.
- Плюс: минимум места для атаки.
- Минус: использует библиотеку
muslвместо стандартнойglibc, что иногда вызывает проблемы с некоторыми специфическими бинарными зависимостями и сборкой отдельных библиотек.
2) Distroless (выбор профессионалов)
Это образы, в которых нет вообще ничего, кроме вашего приложения и его зависимостей. Там нет даже командной строки (shell).
Почему это круто? Если хакер взломает ваше приложение, ему банально сложнее «жить» внутри контейнера: он не сможет просто выполнить ls или curl, чтобы скачать вредоносный софт, потому что привычных инструментов внутри контейнера может не быть.
Линия обороны №2: Multi-stage builds (многоэтапная сборка)
Это техника, которая позволяет использовать тяжёлые инструменты (компиляторы, SDK) для сборки приложения, но не тащить их в финальный образ.
Плохой пример (всё в одном)
FROM python:3.9
COPY . /app
RUN pip install -r /app/requirements.txt # Здесь остаются кэши и инструменты сборки
CMD ["python", "/app/main.py"]
Хороший пример (Multi-stage)
# Этап 1: Сборка
FROM python:3.9-slim AS builder
WORKDIR /app
COPY requirements.txt .
RUN pip install --user -r requirements.txt
# Этап 2: Финальный образ (только запуск)
FROM python:3.9-slim
WORKDIR /app
# Копируем только установленные библиотеки из первого этапа
COPY --from=builder /root/.local /root/.local
COPY . .
ENV PATH=/root/.local/bin:$PATH
# Запускаем от обычного пользователя (см. ниже)
USER 1001
CMD ["python", "main.py"]
Линия обороны №3: никогда не работайте под root
По умолчанию многое в контейнерах запускается от имени root (суперпользователя). Это опасно: если злоумышленник получит выполнение команд внутри контейнера, права root резко расширяют спектр возможных атак, а при наличии дополнительных условий (ошибки конфигурации, привилегированный контейнер, уязвимости ядра) могут усилить ущерб.
Что делать?
Всегда создавайте в Dockerfile пользователя с ограниченными правами и переключайтесь на него через команду USER.
Золотое правило: приложению внутри контейнера почти никогда не нужны права root для обычной работы.
Линия обороны №4: сканирование образов (Trivy возвращается)
Помните инструмент Trivy из прошлой статьи? Он умеет сканировать не только код, но и готовые Docker-образы.
Как это сделать
trivy image my-app:latest
Trivy проверит слои вашего образа и покажет уязвимости в пакетах/компонентах, пришедших вместе с базовым образом и установленными зависимостями, а также подскажет, какие версии считаются исправленными.
Резюме: чек-лист безопасности для ваших контейнеров
Чтобы ваш «сейф» был действительно надёжным, следуйте этим четырём пунктам:
| Действие | Инструмент/Метод | Зачем это нужно |
|---|---|---|
| Минимизация | Используйте Alpine или Distroless | Уменьшить площадь атаки |
| Чистка | Multi-stage build | Убрать инструменты сборки из продакшена |
| Ограничение | Команда USER nonroot | Снизить последствия компрометации контейнера |
| Аудит | trivy image | Находить уязвимости в системных пакетах |
Заключение цикла DevSecOps
Мы разобрали четыре мощных инструмента:
- Git-хуки (Gitleaks): чтобы ключи не покидали ваш компьютер.
- SAST (Semgrep): чтобы ваш код не содержал логических дыр.
- SCA (Trivy): чтобы чужие библиотеки не стали вашей проблемой.
- Container Security: чтобы ваша инфраструктура была лёгкой и защищённой.
Безопасность — это не конечная точка, а процесс. Начните внедрять эти инструменты по одному, и уже через месяц вы заметите, как выросла культура разработки в вашей команде. Теперь вы не просто «пишете код», вы создаёте надёжные системы.
Отзывы по теме
Опыт сотрудничества оставил максимально позитивное впечатление, в первую очередь профессионализмом и подходом к решению возникающих проблем.
mendarinno384 · Jitsi meet: персональный zoom, настройка jitsi meet в docker и на VPS
11.11.2025 · ⭐ 5/5
Опыт сотрудничества оставил максимально позитивное впечатление, в первую очередь профессионализмом и подходом к решению возникающих проблем.
Была задача наладить работу n8n, redis и базы данных. Заказывал раньше у другого исполнителя, постоянно все ломалось. Заказал у Михаила, на следующий же день все стало работать быстро, как часы!
christ_media · N8n установка на ваш vps сервер. Настройка n8n, docker, ai, telegram
Опытный покупатель24.09.2025 · ⭐ 5/5
Была задача наладить работу n8n, redis и базы данных. Заказывал раньше у другого исполнителя, постоянно все ломалось. Заказал у Михаила, на следующий же день все стало работать быстро, как часы!
Спасибо за быструю и хорошую работу. Все сделали оперативно и так как нужно!
Dr-zelenin · N8n установка на ваш vps сервер. Настройка n8n, docker, ai, telegram
06.09.2025 · ⭐ 5/5
Спасибо за быструю и хорошую работу. Все сделали оперативно и так как нужно!
Быстрое решение проблемы, всем рекомендую Михаила в качестве исполнителя! Пробовал собрать аналогичную конфигурацию самостоятельно и через советы нейросетей, в результате куча потраченных сил и средств (из-за простоя сервера). Так что мой совет в итоге - обращайтесь к профессионалам, это выйдет дешевле =) Спасибо Михаилу за профессионализм.
ladohinpy · N8n установка на ваш vps сервер. Настройка n8n, docker, ai, telegram
25.08.2025 · ⭐ 5/5
Быстрое решение проблемы, всем рекомендую Михаила в качестве исполнителя! Пробовал собрать аналогичную конфигурацию самостоятельно и через советы нейросетей, в результате куча потраченных сил и средств (из-за простоя сервера). Так что мой совет в итоге - обращайтесь к профессионалам, это выйдет дешевле =) Спасибо Михаилу за профессионализм.
Михаил выполнил настройку очередного VPS. Быстро, профессионально обходя определенные ограничение хостинг провайдеров.
NadoBy · N8n установка на ваш vps сервер. Настройка n8n, docker, ai, telegram
Освоившийся покупатель12.08.2025 · ⭐ 5/5
Михаил выполнил настройку очередного VPS. Быстро, профессионально обходя определенные ограничение хостинг провайдеров.
Отличная работа, спасибо! Михаил профессионал своего дела, рекомендую!
Dina_Perova · N8n установка на ваш vps сервер. Настройка n8n, docker, ai, telegram
Освоившийся покупатель03.07.2025 · ⭐ 5/5
Отличная работа, спасибо! Михаил профессионал своего дела, рекомендую!