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

компанія Amazon представила перший значний випуск спеціалізованого Linux-дистрибутиву Пляшка 1.0.0призначений для ефективного та безпечного запуску ізольованих контейнерів. Інструментарій та керуючі компоненти дистрибутива написані мовою Rust та поширюються під ліцензіями MIT та Apache 2.0. Розробка проекту ведеться на GitHub та доступна для участі представників спільноти. Образ для розгортання системи формується для архітектур x86_64 та Aarch64. ОС адаптована для запуску у кластерах Amazon ECS та AWS EKS Kubernetes. Надані інструменти та для створення власних збірок та редакцій, в яких можуть використовуватись інші інструменти оркестрування, ядра та runtime для контейнерів.

Дистрибутив надає ядро ​​Linux та мінімальне системне оточення, що включають лише компоненти, необхідні для запуску контейнерів. Серед пакетів, що задіяні в проекті, відзначаються системний менеджер systemd, бібліотека Glibc, складальний інструментарій.
Buildroot, завантажувач GRUB, конфігуратор мережі злий, runtime для ізольованих контейнерів контейнер, платформа оркестрування контейнерів 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

Додати коментар або відгук