Amazon опубликовал Bottlerocket 1.0.0, Linux-дистрибутив на базе изолированных контейнеров

Компания Amazon представила первый значительный выпуск специализированного Linux-дистрибутива Bottlerocket 1.0.0, предназначенного для эффективного и безопасного запуска изолированных контейнеров. Инструментарий и управляющие компоненты дистрибутива написаны на языке Rust и распространяются под лицензиями MIT и Apache 2.0. Разработка проекта ведётся на GitHub и доступна для участия представителей сообщества. Образ для развёртывания системы формируется для архитектур x86_64 и Aarch64. ОС адаптирована для запуска в кластерах Amazon ECS и AWS EKS Kubernetes. Предоставлены инструменты и для создания собственных сборок и редакций, в которых могут использоваться иные инструменты оркестровки, ядра и runtime для контейнеров.

Дистрибутив предоставляет ядро Linux и минимальное системное окружение, включающие только компоненты, необходимые для запуска контейнеров. Среди задействованных в проекте пакетов отмечаются системный менеджер systemd, библиотека Glibc, сборочный инструментарий
Buildroot, загрузчик GRUB, конфигуратор сети wicked, runtime для изолированных контейнеров containerd, платформа оркестровки контейнеров Kubernetes, аутентификатор aws-iam-authenticator и агент Amazon ECS.

Дистрибутив обновляется атомарно и поставляется в форме неделимого системного образа. Под систему выделяется два дисковых раздела, один из которых содержит активную систему, а на второй копируется обновление. После развёртывания обновления активным становится второй раздел, а в первом до поступления следующего обновления сохраняется прошлая версия системы, на которую в случае возникновения проблем можно откатиться. Обновления устанавливаются автоматически без участия администратора.

Ключевым отличием от похожих дистрибутивов, таких как Fedora CoreOS, CentOS/Red Hat Atomic Host является первичная ориентация на обеспечение максимальной безопасности в контексте усиления защиты системы от возможных угроз, усложнения эксплуатации уязвимостей в компонентах ОС и повышения изоляции контейнеров. Контейнеры создаются при помощи штатных механизмов ядра Linux — cgroups, пространств имён и seccomp. Для дополнительной изоляции в дистрибутиве применяется SELinux в режиме «enforcing», а для криптографической верификации целостности корневого раздела задействован модуль dm-verity. В случае выявления попытки модификации данных на уровне блочного устройства система перезагружается.

Корневой раздел монтируется в режиме только для чтения, а раздел с настройками /etc монтируется в tmpfs и восстанавливает исходное состояние после перезапуска. Прямое изменение файлов в каталоге /etc, таких как /etc/resolv.conf и /etc/containerd/config.toml, не поддерживается — для постоянного сохранения настроек следует использовать API или выносить функциональность в отдельные контейнеры.

Большинство системных компонентов написаны на языке Rust, предоставляющем средства для безопасной работы с памятью, позволяющие избежать уязвимостей, вызванных обращением к области памяти после её освобождения, разыменованием нулевых указателей и выходом за границы буфера. При сборке по умолчанию применяются режимы компиляции «—enable-default-pie» и «—enable-default-ssp» для включения рандомизации адресного пространства исполняемых файлов (PIE) и защиты от переполнения стека через подстановку канареечных меток.
Для пакетов, написанных на языке C/C++, дополнительно включаются флаги
«-Wall», «-Werror=format-security», «-Wp,-D_FORTIFY_SOURCE=2», «-Wp,-D_GLIBCXX_ASSERTIONS» и «-fstack-clash-protection».

Инструменты для оркестровки контейнеров поставляются в отдельном управляющем контейнере, который включается по умолчанию и управляется через API и AWS SSM Agent. В базовом образе отсутствует командная оболочка, сервер SSH и интерпретируемые языки (например, нет Python или Perl) — средства для администратора и отладочные инструменты вынесены в отдельный служебный контейнер, который по умолчанию отключён.

Источник: opennet.ru