La version du système d'exploitation Linux Bottlerocket 1.8.0 a été publiée, développée avec la participation d'Amazon pour un lancement efficace et sécurisé de conteneurs isolés. Les outils et composants de gestion du système sont écrits en Rust et sont distribués sous les licences MIT et Apache 2.0. Bottlerocket prend en charge le déploiement dans les clusters Amazon ECS, VMware et AWS EKS Kubernetes, ainsi que la création de compilations personnalisées et d'éditions permettant l'utilisation de divers outils d'orchestration et runtimes pour conteneurs.
La distribution fournit une image système atomique et automatiquement mise à jour, incluant le noyau Linux et un environnement système minimal, ne comprenant que les composants nécessaires au lancement de conteneurs. L'environnement utilise le gestionnaire système systemd, la bibliothèque Glibc, les outils de construction Buildroot, le chargeur d'amorçage GRUB, le configurateur réseau wicked, le runtime pour conteneurs isolés containerd, la plateforme d'orchestration de conteneurs Kubernetes, l'authentificateur aws-iam-authenticator et l'agent Amazon ECS.
Les outils d'orchestration de conteneurs sont fournis dans un conteneur de gestion distinct, qui est activé par défaut et géré via l'API et l'AWS SSM Agent. L'image de base ne comprend pas de shell. serveur SSH et les langages interprétés (comme Python ou Perl) - les outils pour les administrateurs et les outils de débogage sont placés dans un conteneur distinct, qui est désactivé par défaut.
La principale différence par rapport à des distributions similaires, telles que Fedora CoreOS, CentOS/Red Hat Atomic Host, réside dans l'accent mis sur la sécurité maximale afin de renforcer la protection du système contre d'éventuelles menaces, de compliquer l'exploitation des vulnérabilités dans les composants du système d'exploitation, et d'accroître l'isolation des conteneurs. Les conteneurs sont créés à l'aide de mécanismes natifs du noyau Linux - cgroups, espaces de noms et seccomp. Pour une isolation supplémentaire, SELinux est utilisé en mode « enforcing ».
La partition racine est montée en mode lecture seule, tandis que la partition de configuration /etc est montée en tmpfs et restaure son état d'origine après un redémarrage. La modification directe des fichiers dans le répertoire /etc, tels que /etc/resolv.conf et /etc/containerd/config.toml, n'est pas supportée - pour une conservation permanente des paramètres, il convient d'utiliser l'API ou d'externaliser les fonctionnalités dans des conteneurs séparés. Un module dm-verity est utilisé pour la vérification cryptographique de l'intégrité de la partition racine, et en cas de détection d'une tentative de modification des données au niveau du périphérique de bloc, le système redémarre.
La plupart des composants système sont écrits en Rust, qui offre des outils pour une gestion sécurisée de la mémoire, évitant ainsi les vulnérabilités causées par l'accès à la mémoire après sa libération, la déréférenciation de pointeurs nuls et les débordements de tampon. Les modes de compilation par défaut «--enable-default-pie» et «--enable-default-ssp» sont appliqués pour activer la randomisation de l'espace d'adresse des fichiers exécutables (PIE) et protéger contre les débordements de pile via des substituts de canari. Pour les paquets écrits en C/C++, des drapeaux supplémentaires «-Wall», «-Werror=format-security», «-Wp,-D_FORTIFY_SOURCE=2», «-Wp,-D_GLIBCXX_ASSERTIONS» et «-fstack-clash-protection» sont également activés.
Dans cette nouvelle version :
- Le contenu des conteneurs d'administration et de gestion a été mis à jour.
- Le runtime pour conteneurs isolés a été mis à jour vers la branche containerd 1.6.x.
- Le redémarrage des processus en arrière-plan, coordonnant le fonctionnement des conteneurs, a été assuré après les modifications dans le stockage des certificats.
- La possibilité de passer des paramètres de démarrage du noyau via la section Configuration de démarrage a été fournie.
- L'ignorance des blocs vides lors du contrôle de l'intégrité de la partition racine à l'aide de dm-verity a été activée.
- La possibilité de lier statiquement les noms d'hôtes dans /etc/hosts a été ajoutée.
- La possibilité de générer une configuration réseau à l'aide de l'outil netdog (ajout de la commande generate-net-config) a été fournie.
- De nouvelles variantes de distribution compatibles avec Kubernetes 1.23 ont été proposées. Le temps de démarrage des pods dans Kubernetes a été réduit grâce à la désactivation du mode configMapAndSecretChangeDetectionStrategy. De nouveaux paramètres kubelet ont été ajoutés : provider-id et podPidsLimit.
- Une nouvelle variante du système « aws-ecs-1-nvidia » pour le service de conteneurs d'Amazon (Amazon ECS), livré avec des pilotes NVIDIA, a été proposée.
- Le support des dispositifs de stockage Microchip Smart Storage et MegaRAID SAS a été ajouté. Le support des cartes Ethernet basées sur des puces Broadcom a été élargi.
- Les versions des paquets et des dépendances pour les langages Go et Rust, ainsi que les versions des paquets de logiciels tiers, ont été mises à jour. Le Bottlerocket SDK a été mis à jour vers la version 0.26.0.
Source : opennet.ru
