Издаден е новият випуск на Linux дистрибутива Bottlerocket 1.7.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".
В новото издание:
- При инсталиране на RPM пакети е осигурено генериране на списък с програми в формат JSON и монтиране на него в хост-контейнера като файл /var/lib/bottlerocket/inventory/application.json за получаване на информация за наличните пакети.
- Актуализирани са контейнерите „admin“ и „control“.
- Актуализирани са версиите на пакетите и зависимостите за езиците Go и Rust.
- Актуализирани са версиите на пакетите с външни програми.
- Решени са проблемите с конфигурацията на tmpfilesd за kmod-5.10-nvidia.
- При инсталиране на tuftool е осигурена привързаност на версиите на зависимостите.
Източник: opennet.ru
