Код-ревью Middle Безопасность контейнеров обновлено
Ревью: запуск агента мониторинга
Вопрос
Найди проблемы безопасности в запуске контейнера агента, которому нужно читать метрики Docker и диск хоста.
docker run -d --name agent \
--privileged \
--user root \
-v /:/host \
-v /var/run/docker.sock:/var/run/docker.sock \
-e API_TOKEN=tok_live_8f2a9c \
--restart always \
vendor/agent:latest
Коротко
Безопаснее: Доступ к API Docker идёт через прокси сокета, который разрешает только чтение списка контейнеров и статистики. Монтирование docker.sock с :ro не помогает: флаг запрещает запись в файл сокета, но не ограничивает команды API.
Что должен найти ревьюер
- Безопасностьстрока 2
--privilegedдаёт все capabilities и доступ к устройствам: агенту метрик это не нужно. Выдать конкретные capabilities, если требуется. - Безопасностьстрока 3Явный запуск от root. Использовать непривилегированного пользователя, если агент это поддерживает.
- Безопасностьстрока 4Корень хоста смонтирован на запись. Монтировать только нужные пути (
/proc,/sys) и только для чтения (:ro). - Безопасностьстрока 5Сокет Docker даёт полный контроль над хостом. Если без него никак, смонтировать
:ro(это не ограничивает API!), а лучше использовать прокси сокета с разрешением только на чтение нужных эндпоинтов. - Безопасностьстрока 6Токен в переменной окружения в командной строке: виден в истории shell,
psиdocker inspect. Передать файлом или через секреты. - Ошибкастрока 8Тег
latestу стороннего агента с такими правами: неконтролируемые обновления. Закрепить версию или digest.
Разбор
Безопаснее:
docker run -d --name agent \
--user 10001 \
--cap-drop=ALL --security-opt no-new-privileges \
--read-only \
-v /proc:/host/proc:ro -v /sys:/host/sys:ro \
-v /run/agent/token:/run/secrets/token:ro \
-e DOCKER_HOST=tcp://socket-proxy:2375 \
--restart unless-stopped \
vendor/agent:3.2.1
Доступ к API Docker идёт через прокси сокета, который разрешает только чтение списка контейнеров и статистики. Монтирование docker.sock с :ro не помогает: флаг запрещает запись в файл сокета, но не ограничивает команды API. Агенты с широкими правами выбирают по доверию к поставщику и закрепляют версию.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.