Se ha publicado la versión 1.8.0 del sistema operativo Linux Bottlerocket, desarrollado con la colaboración de Amazon para el despliegue eficiente y seguro de contenedores aislados. Las herramientas y componentes de gestión del sistema están escritos en Rust y se distribuyen bajo las licencias MIT y Apache 2.0. Se admite la ejecución de Bottlerocket en clústeres de Amazon ECS, VMware y AWS EKS Kubernetes, así como la creación de compilaciones y ediciones personalizadas que permiten el uso de diversas herramientas de orquestación y runtime para contenedores.
La distribución proporciona una imagen del sistema atómica y actualizable automáticamente, que incluye el núcleo de Linux y un entorno de sistema mínimo, conteniendo solo los componentes necesarios para ejecutar contenedores. En el entorno se utilizan el gestor de sistemas systemd, la biblioteca Glibc, la herramienta de construcción Buildroot, el cargador de arranque GRUB, el configurador de red wicked, el runtime para contenedores aislados containerd, la plataforma de orquestación de contenedores Kubernetes, el autenticador aws-iam-authenticator y el agente de Amazon ECS.
Las herramientas para la orquestación de contenedores se suministran en un contenedor de gestión separado, que está habilitado por defecto y se gestiona a través de la API y AWS SSM Agent. La imagen base no incluye un intérprete de comandos. servidor SSH y lenguajes interpretados (por ejemplo, no hay Python o Perl) — las herramientas para administradores y las herramientas de depuración se han trasladado a un contenedor de servicio separado, que está deshabilitado por defecto.
La principal diferencia con otras distribuciones similares, como Fedora CoreOS y CentOS/Red Hat Atomic Host, es la orientación primaria hacia la maximización de la seguridad en el contexto de fortalecer la protección del sistema contra posibles amenazas, complicar la explotación de vulnerabilidades en los componentes del sistema operativo y aumentar la aislamiento de los contenedores. Los contenedores se crean mediante los mecanismos estándar del núcleo de Linux: cgroups, espacios de nombres y seccomp. Para una mayor isolación, la distribución utiliza SELinux en modo "enforcing".
La partición raíz se monta en modo solo lectura, y la partición de configuración /etc se monta en tmpfs y se restablece a su estado original después de un reinicio. No se admite la modificación directa de archivos en el directorio /etc, como /etc/resolv.conf y /etc/containerd/config.toml; para guardar configuraciones de manera persistente, se deben utilizar las API o trasladar la funcionalidad a contenedores separados. Se utiliza el módulo dm-verity para la verificación criptográfica de la integridad de la partición raíz, y si se detecta un intento de modificar datos a nivel de dispositivo de bloque, el sistema se reinicia.
La mayoría de los componentes del sistema están escritos en Rust, que proporciona herramientas para trabajar de manera segura con la memoria, evitando vulnerabilidades causadas por el acceso a áreas de memoria después de haber sido liberadas, la desreferenciación de punteros nulos y sobrepasar los límites del búfer. Al compilar por defecto, se utilizan los modos de compilación "--enable-default-pie" y "--enable-default-ssp" para habilitar la aleatorización del espacio de direcciones de archivos ejecutables (PIE) y protección contra desbordamientos de pila mediante la inserción de marcas canarias. Para paquetes escritos en C/C++, se incluyen además las banderas "-Wall", "-Werror=format-security", "-Wp,-D_FORTIFY_SOURCE=2", "-Wp,-D_GLIBCXX_ASSERTIONS" y "-fstack-clash-protection".
En esta nueva versión:
- Se ha actualizado el contenido de los contenedores administrativos y de gestión.
- El runtime para contenedores aislados se ha actualizado a la rama containerd 1.6.x.
- Se garantiza el reinicio de los procesos en segundo plano que coordinan el funcionamiento de los contenedores después de los cambios en el almacenamiento de certificados.
- Se ha añadido la posibilidad de establecer parámetros de arranque del kernel a través de la sección de Configuración de Arranque.
- Se ha incluido la opción de ignorar bloques vacíos al controlar la integridad de la partición raíz mediante dm-verity.
- Se ha proporcionado la posibilidad de vinculación estática de nombres de host en /etc/hosts.
- Se ha introducido la capacidad de generar la configuración de red utilizando la herramienta netdog (se ha añadido el comando generate-net-config).
- Se han propuesto nuevas variantes del sistema con soporte para Kubernetes 1.23. Se ha reducido el tiempo de arranque de los pods en Kubernetes al desactivar la opción configMapAndSecretChangeDetectionStrategy. Se han añadido nuevas configuraciones para los kubelets: provider-id y podPidsLimit.
- Se ha sugerido una nueva variante del sistema «aws-ecs-1-nvidia» para Amazon Elastic Container Service (Amazon ECS), que se suministra con controladores NVIDIA.
- Se ha añadido soporte para dispositivos de almacenamiento Microchip Smart Storage y MegaRAID SAS. Se ha ampliado la compatibilidad con tarjetas de red de chips Broadcom.
- Se han actualizado las versiones de paquetes y dependencias para los lenguajes Go y Rust, así como las versiones de paquetes de programas de terceros. El SDK de Bottlerocket se ha actualizado a la versión 0.26.0.
Fuente: opennet.ru
