Публикувана версия на Linux дистрибуцията Bottlerocket 1.8.0, разработвана с участието на компанията Amazon за ефективно и безопасно стартиране на изолирани контейнери. Инструментите и управляващите компоненти на дистрибуцията са написани на езика Rust и се разпространяват под лицензите MIT и Apache 2.0. Поддържа се стартиране на Bottlerocket в клъстери на Amazon ECS, VMware и AWS EKS Kubernetes, както и създаване на произволни сборки и редакции, допускащи използването на различни инструменти за оркестрация и runtime за контейнери.
Дистрибутивът предоставя атомарно и автоматично обновяемо неделимо системно изображение, включващо ядро Linux и минимална системна среда, съдържаща само компоненти, необходими за стартиране на контейнери. В средата са включени системният мениджър systemd, библиотеката Glibc, сборъчният инструментариум Buildroot, зареждачът GRUB, конфигураторът на мрежата wicked, runtime за изолирани контейнери containerd, платформата за оркестрация на контейнери Kubernetes, аутентификаторът aws-iam-authenticator и агентът Amazon ECS.
Инструментите за оркестрация на контейнери се предоставят в отделен управляващ контейнер, който е включен по подразбиране и се управлява чрез API и AWS SSM Agent. В базовото изображение липсва команден интерфейс, сървър SSH и интерпретируемите езици (например, няма Python или Perl) — средствата за администратори и отладъчните инструменти са изнесени в отделен помощен контейнер, който по подразбиране е деактивиран.
Ключовата разлика от подобни дистрибутиви, като Fedora CoreOS, CentOS/Red Hat Atomic Host, е основната ориентация към предоставяне на максимална сигурност в контекста на усилването на защитата на системата от възможни заплахи, усложняване на експлоатацията на уязвимости в компонентите на ОС и повишаване на изолацията на контейнерите. Контейнерите се създават с помощта на стандартните механизми на ядрото Linux — cgroups, пространства за име и seccomp. За допълнителна изолация в дистрибутива се прилага SELinux в режим „enforcing“.
Коренният дял се монтира в режим само за четене, а дялът с настройки 등 монтируется в tmpfs и възстановява първоначалното състояние след рестарт. Пряко изменение на файловете в каталога 등, като 등/resolv.conf и 등/containerd/config.toml, не се поддържа — за дългосрочно запазване на настройките трябва да се използва API или да се изнасят функции в отделни контейнери. За криптографска проверка на целостта на коренния дял се използва модулът dm-verity, а при установяване на опити за модификация на данни на ниво блоково устройство системата се рестартира.
Повечето системни компоненти са написани на езика 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.
В новото издание:
- Обновено е съдържанието на административния и управляващия контейнер.
- Runtime за изолирани контейнери е обновен до версия containerd 1.6.x.
- Осигурен е рестарт на фоновите процеси, координиращи работата на контейнерите, след промени в хранилището на сертификати.
- Предоставена е възможност за настройване на параметри на ядрата при зареждане чрез секция Boot Configuration.
- Включено е игнориране на празни блокове при проверка на целостта на основния дял с помощта на dm-verity.
- Предоставена е възможност за статично свързване на имена на хостове в /etc/hosts.
- Предоставена е възможност за генериране на мрежова конфигурация с помощта на утилитата netdog (добавена команда generate-net-config).
- Предложени са нови варианти на дистрибуцията с поддръжка на Kubernetes 1.23. Съкратено е времето за стартиране на pod-ове в Kubernetes чрез деактивиране на режима configMapAndSecretChangeDetectionStrategy. Добавени са нови настройки за kubelet: provider-id и podPidsLimit.
- Предложен е нов вариант на дистрибуцията «aws-ecs-1-nvidia» за Amazon Elastic Container Service (Amazon ECS), доставен с NVIDIA драйвери.
- Добавена е поддръжка за устройства за съхранение Microchip Smart Storage и MegaRAID SAS. Разширена е поддръжката на Ethernet карти на чипове Broadcom.
- Актуализирани са версиите на пакетите и зависимостите за езиците Go и Rust, както и версиите на пакетите от трети страни. Bottlerocket SDK е обновен до версия 0.26.0.
Източник: opennet.ru
