Контейнер существует как управляемый процесс даже при широких разрешениях. Изоляцию оценивают по его фактическим полномочиям, подключениям и ресурсным границам, а не по наличию образа.
Изоляция контейнеров
Определение
Изоляция контейнеров — набор границ между процессом, соседними нагрузками и основной системой. В Linux её образуют пространства имён, ограничения ресурсов, права пользователя, полномочия ядра, фильтры системных вызовов и правила доступа к файлам и устройствам.
Также ищут: Container isolation · граница безопасности контейнера · изоляция рабочей нагрузки
Зачем это знать
Образ с непривилегированным процессом и тот же образ с широким доступом к узлу имеют разный риск. Перед размещением приложений разных заказчиков проверьте общие ресурсы и разрешения. Требование изоляции нельзя закрыть одной строкой «работает в контейнере».
Карта понятия
Сравнить
Связано
Что подтверждено
Изоляция контейнера Linux складывается из нескольких механизмов. Пространства имён разделяют видимость, cgroup ограничивает потребление, а полномочия и правила доступа определяют разрешённые действия.
Граница применимости: Механизмы изоляции обычного контейнера процессов Linux.
Обычные контейнеры Linux разделяют ядро узла. Границу отказа или компрометации такого контейнера нельзя автоматически приравнивать к виртуальной машине с отдельным гостевым ядром.
Граница применимости: Контейнеры уровня операционной системы; дополнительная изоляция виртуальной машиной вне этой области.
Подключение каталога узла с правом записи даёт процессу возможность менять доступные ему файлы этого каталога. Отдельная корневая файловая система контейнера не отменяет явно выданный доступ.
Граница применимости: Подключения файловых систем и права процесса в конфигурации OCI для Linux.
Корневая файловая система только для чтения не делает все данные контейнера неизменяемыми: отдельно подключённые каталоги могут оставаться доступными для записи. Их права задаются независимо.
Граница применимости: Настройка корневой файловой системы и отдельных подключений в OCI Runtime Specification.
Полномочия ядра Linux и фильтр системных вызовов ограничивают разные стороны действий процесса. Снятие одного полномочия не заменяет проверку подключений, устройств и остальных разрешений.
Граница применимости: Настройки полномочий, системных вызовов и устройств в конфигурации контейнера OCI для Linux.
Раздельная сеть и список процессов не защищают узел от исчерпания памяти соседним контейнером. Ограничения ресурсов нужно настраивать и проверять отдельно от изоляции видимости.
Граница применимости: Сопоставление пространств имён Linux и контроллеров cgroup v2.
Не путать
Что проверить
- Назовите, от кого защищаете нагрузку: от ошибки приложения, соседнего арендатора или администратора узла.
- Определите, разделяют ли нагрузки ядро, сеть и список процессов.
- Проверьте пользователя процесса и выданные ему полномочия ядра.
- Перечислите каталоги и устройства узла, доступные контейнеру.
- Проверьте права записи каждого подключения отдельно от корневой файловой системы.
- Проверьте фильтр системных вызовов и совместимость ограничений с приложением.
- Испытайте ограничения памяти и процессора при одновременной нагрузке соседей.
Первоисточники
- namespaces(7) — Linux manual page
Описывает отдельные представления системных ресурсов в пространствах имён Linux и перечисляет изолируемые классы объектов.
- Control Group v2
Описывает иерархическое распределение ресурсов, контроллеры, ограничения, учёт потребления и пространство имён cgroup.