Предполагая:
Dockerfile
, который я не проверяю.docker build
или аналогичный) в своей инфраструктуре.Это небезопасно для моей инфраструктуры/машины?
Если да, то почему?
Для большего контекста это похоже на систему CI, в которой я создаю образы Docker клиента в своей инфраструктуре.
@DazWilkin "Это небезопасно?" да нет. Это основано на мнении? Я ищу факты о том, почему это небезопасно.
Это не вопрос программирования. Вопросы оперативного типа больше подходят для других сайтов, таких как serverfault.SE.
«небезопасный» не так четко определен, как вы думаете. Небезопасно ли иметь доступ к любым другим незащищенным службам в вашей локальной сети? Были ли какие-либо из этих сервисов созданы/настроены с предположением, что только «доброжелательный» код сможет добраться до них? Тогда вы нарушите это предположение. Считается ли «растрачивание ресурсов» угрозой безопасности? (В некоторых ситуациях это, конечно, так, в других – не очень). Как вы гарантируете, что в вашей инфраструктуре докеров не будет использоваться старое непропатченное программное обеспечение с известными эксплойтами?
Вообще говоря, если вы не просматриваете файл Dockerfile, не зная, какой инструмент вы собираетесь использовать, он может быть небезопасным. Фактически, Dockerfile содержит набор инструкций, которые будут составлять ваш образ, и может включать в себя импортированные библиотеки и специальное программное обеспечение, которое будет размещаться и выполняться.
При запуске сборки Docker каждый уровень выполняется в контексте контейнера. Таким образом, риски ограничиваются тем, какой доступ доступен к строительному контейнеру.
Итак, сопутствующие вопросы безопасности могут быть как на внутреннем, так и на внешнем уровне:
Чтобы углубиться в безопасность Docker, важно понять, как ее улучшить. С помощью Docker вы можете попытаться ограничить риски безопасности, ограничив возможности экземпляра движка Docker, например:
Наконец, вы можете предотвратить повреждение Dockerfile, выполнив следующие действия:
«это может быть небезопасно». Спасибо. Есть идеи, почему?
Я отредактировал свой ответ, добавив гораздо больше информации о потенциальных рисках безопасности, связанных с созданием образов Docker.
Вы предоставляете произвольный доступ к коду для записи на диск, использования памяти, использования до 5 минут процессорного времени, доступа к сети и доступа к тому же ядру, выполняющему все остальное на хосте. Я мог бы придумать различные атаки:
Да,
Он может иметь любую конфигурацию и устанавливать любое программное обеспечение внутри контейнера, а также может быть соединен с доступом к различным частям вашей сети и системы.
Для непрофессионалов докер — это просто более эффективный вариант виртуальной машины, на ней может быть что угодно.
В конечном счете, не загружайте и не создавайте контейнеры, в которых вы не уверены, используйте надежные источники. Вы должны просмотреть файл docker перед его созданием. Файл docker покажет, что устанавливается в образе, а также любые конфигурации, которые могут раскрыть сеть или создать мост.
Если вы не совсем понимаете сам файл, отключите все, что связано с сетью, портами или конфигурацией хоста, в файле docker, раскрутите контейнер и используйте cli, рабочий стол docker или аналогичный инструмент, где вы можете просмотреть файловую систему контейнеров/покопаться внутри.
Вопросы, основанные на мнениях, не приветствуются при переполнении стека. ИМХО, ответ «да», потому что вы не можете доказать, что данный
Dockerfile
не повредит вашей инфраструктуре. Я считаю, что срок не имеет значения. Проблема в том, чтоDockerfile
может запускать произвольный код в вашей инфраструктуре.