Как сделать контейнер безопаснее?
- Почему не стоит запускать контейнер от root?
Не root внутри контейнера, минимальный образ (меньше пакетов — меньше уязвимостей), сканирование образов в CI (Trivy, Grype), файловая система только для чтения, сброс capabilities, запрет privileged и монтирования docker.sock, секреты не в образе и не в переменных, видимых всем, фиксированные версии и подпись образов.
- root в контейнере при уязвимости рантайма или неосторожном монтировании — root на хосте
- Kubernetes: securityContext — runAsNonRoot, readOnlyRootFilesystem, allowPrivilegeEscalation: false
- Сетевые политики ограничивают, кто с кем может общаться
А ещё Pod Security Standards (restricted) включают эти правила на уровне кластера
Подробно
Почему важно. Контейнер изолирован общим ядром. Ошибка в рантайме, privileged-режим, монтирование /var/run/docker.sock или каталогов хоста дают выход на хост. Запуск от root делает последствия максимальными.
Список мер:
USERв Dockerfile,runAsNonRootв Kubernetes;- distroless или slim-образ, регулярное обновление базового образа;
readOnlyRootFilesystem: true, временные каталоги — emptyDir;capabilities: drop: ["ALL"], добавлять только нужные;- запрет privileged и hostPath;
- сканирование образов и зависимостей в CI, блокировка критичных уязвимостей;
- подпись образов (cosign) и проверка при деплое;
- сетевые политики по принципу «запрещено всё, что не разрешено».
Что хотят услышать
- Почему root опасен.
- Минимальные образы и сканирование.
- Ограничения в рантайме и Kubernetes.
Проверьте себя
Несколько верных вариантов. Подумайте, потом откройте ответ.
Показать варианты и ответ
- ✓Запуск не от root и минимальный базовый образ
- ✓Сканирование образов в CI
- ✗Монтирование docker.sock в контейнер приложения
- ✓Файловая система только для чтения и сброс capabilities
Связанные вопросы
Разбор собеседования с sotto
После собеседования sotto разбирает разговор: оценка, каждый вопрос — хорошо, частично или слабо, чего не хватило в ответе и над чем поработать к следующему разу. Первые 30 минут бесплатно.