Достъпен е изходният код на Linux дистрибуцията Bottlerocket 1.2.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».
Коренният дял е монтиран в режим само за четене, а дялът с настройките /etc е монтиран в tmpfs и възстановява първоначалното си състояние след рестартиране. Пряка промяна на файлове в директорията /etc, като /etc/resolv.conf и /etc/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".
В новото издание:
- Добавена е поддръжка за огледала на регистър за контейнери.
- Добавена е възможност за използване на самоподписани сертификати.
- Добавен е параметър за настройка на името на хоста.
- Актуализирана е версията на предложеното по подразбиране административно контейнер.
- Добавени са настройки topologyManagerPolicy и topologyManagerScope за kubelet.
- Добавена е поддръжка за компресиране на ядрото с алгоритъма zstd.
- Предоставена е възможност за зареждане в VMware на виртуални машини в формат OVA (Open Virtualization Format).
- Актуализиран е вариантът на дистрибутива aws-k8s-1.21 с поддръжка на Kubernetes 1.21. Поддръжката за aws-k8s-1.16 е прекратена.
- Актуализирани са версиите на пакетите и зависимостите за езика Rust.
Източник: opennet.ru
