Pubblicata la versione 1.8.0 della distribuzione Linux Bottlerocket, sviluppata in collaborazione con Amazon per un avvio efficace e sicuro di contenitori isolati. Gli strumenti e i componenti di gestione della distribuzione sono scritti in Rust e distribuiti con licenze MIT e Apache 2.0. È supportato l'avvio di Bottlerocket in cluster Amazon ECS, VMware e AWS EKS Kubernetes, nonché la generazione di build e edizioni personalizzate che consentono l'uso di vari strumenti di orchestrazione e runtime per i contenitori.
La distribuzione fornisce un'immagine di sistema atomica e automaticamente aggiornabile, che include il kernel Linux e un ambiente di sistema minimo, comprensivo solo dei componenti necessari per l'esecuzione dei container. Nell'ambiente sono coinvolti il gestore di sistema systemd, la libreria Glibc, l'ambiente di build Buildroot, il bootloader GRUB, il configuratore di rete wicked, il runtime per container isolati containerd, la piattaforma di orchestrazione dei container Kubernetes, l'autenticatore aws-iam-authenticator e l'agente Amazon ECS.
Gli strumenti per l'orchestrazione dei container sono forniti in un container di gestione separato, attivato di default e gestito tramite API e AWS SSM Agent. Nell'immagine di base non è presente una shell. server SSH e linguaggi interpretati (ad esempio, non ci sono Python o Perl) — gli strumenti per l'amministratore e gli strumenti di debug sono stati spostati in un container di servizio separato, che per impostazione predefinita è disattivato.
La principale differenza rispetto a distribuzioni simili, come Fedora CoreOS, CentOS/Red Hat Atomic Host, è l'orientamento primario a fornire la massima sicurezza nel contesto del rafforzamento della protezione del sistema contro potenziali minacce, complicando l'esploitazione di vulnerabilità nei componenti del sistema operativo e aumentando l'isolamento dei container. I container sono creati utilizzando i meccanismi standard del kernel Linux — cgroups, spazi dei nomi e seccomp. Per ulteriore isolamento, nella distribuzione viene utilizzato SELinux in modalità "enforcing".
La partizione di root è montata in modalità di sola lettura, mentre la partizione di configurazione /etc è montata in tmpfs e ripristina lo stato originale dopo il riavvio. La modifica diretta dei file nella directory /etc, come /etc/resolv.conf e /etc/containerd/config.toml, non è supportata: per la conservazione permanente delle impostazioni è necessario utilizzare l'API o spostare la funzionalità in contenitori separati. Per la verifica crittografica dell'integrità della partizione di root è coinvolto il modulo dm-verity, e in caso di tentativi di modifica dei dati a livello di dispositivo blocco, il sistema viene riavviato.
La maggior parte dei componenti di sistema è scritta in linguaggio Rust, che fornisce strumenti per un'attività sicura in memoria, evitando vulnerabilità causate da accessi a aree di memoria dopo il loro rilascio, dereferenziazione di puntatori nulli e fuoriuscita dai limiti del buffer. Durante la compilazione, per impostazione predefinita vengono applicati i flag di compilazione "--enable-default-pie" e "--enable-default-ssp" per attivare la randomizzazione degli spazi di indirizzi dei file eseguibili (PIE) e la protezione da overflow dello stack attraverso l'inserimento di marcatori di canarini. Per i pacchetti scritti in C/C++, vengono attivati anche i flag "-Wall", "-Werror=format-security", "-Wp,-D_FORTIFY_SOURCE=2", "-Wp,-D_GLIBCXX_ASSERTIONS" e "-fstack-clash-protection."
Nel nuovo rilascio:
- Aggiornato il contenuto dei contenitori di amministrazione e gestione.
- Il runtime per i contenitori isolati è stato aggiornato alla versione containerd 1.6.x.
- Assicurato il riavvio dei processi in background che coordinano il funzionamento dei contenitori, dopo le modifiche nello storage dei certificati.
- Fornita la possibilità di impostare i parametri di avvio del kernel tramite la sezione Boot Configuration.
- Incluso l'ignorare i blocchi vuoti durante il controllo dell'integrità della partizione root utilizzando dm-verity.
- Fornita la possibilità di binding statico dei nomi host in /etc/hosts.
- Fornita la possibilità di generare configurazioni di rete tramite l'utilità netdog (aggiunta il comando generate-net-config).
- Offerti nuovi pacchetti della distribuzione con supporto per Kubernetes 1.23. Ridotto il tempo di avvio dei pod in Kubernetes disattivando la modalità configMapAndSecretChangeDetectionStrategy. Aggiunte nuove impostazioni per i kubelet: provider-id e podPidsLimit.
- Proposto un nuovo pacchetto della distribuzione "aws-ecs-1-nvidia" per Amazon Elastic Container Service (Amazon ECS), fornito con driver NVIDIA.
- Aggiunto supporto per dispositivi di archiviazione Microchip Smart Storage e MegaRAID SAS. Espanso il supporto per le schede Ethernet basate su chip Broadcom.
- Aggiornate le versioni dei pacchetti e delle dipendenze per i linguaggi Go e Rust, così come le versioni dei pacchetti con software di terze parti. Bottlerocket SDK è stato aggiornato alla versione 0.26.0.
Fonte: opennet.ru
