È stata pubblicata la versione 1.7.0 della distribuzione Linux Bottlerocket, sviluppata con il supporto di Amazon per un avvio efficace e sicuro di container isolati. Gli strumenti e i componenti di gestione della distribuzione sono scritti in Rust e vengono distribuiti sotto licenze MIT e Apache 2.0. Bottlerocket supporta l'esecuzione in cluster Amazon ECS, VMware e AWS EKS Kubernetes, oltre a consentire la creazione di build e varianti personalizzate che possono utilizzare diversi strumenti di orchestrazione e runtime per i container.
La distribuzione fornisce un'immagine di sistema atomica, indissolubile e automaticamente aggiornata, che include il kernel Linux e un ambiente di sistema minimale, contenente solo i componenti necessari per l'avvio dei container. Nel suo ambiente sono coinvolti il manager 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 contenitori sono forniti in un contenitore di gestione separato, che è abilitato per impostazione predefinita e gestito tramite API e AWS SSM Agent. L'immagine di base non include una shell di comando, un 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 contenitore di servizio separato, che è disabilitato per impostazione predefinita.
La principale differenza rispetto a distribuzioni simili come Fedora CoreOS e CentOS/Red Hat Atomic Host è l'orientamento primario verso la massima sicurezza, in un contesto di potenziamento della protezione del sistema da potenziali minacce, complicando l'exploitation delle vulnerabilità nei componenti del sistema operativo e aumentando l'isolamento dei contenitori. I contenitori vengono creati utilizzando i meccanismi standard del kernel Linux — cgroups, namespace e seccomp. Per un'ulteriore isolamento, il supporto SELinux è abilitato in modalità 'enforcing'.
La partizione principale viene montata in modalità di sola lettura, mentre la partizione delle impostazioni /etc viene montata in tmpfs e ripristina lo stato originale dopo il riavvio. Le modifiche dirette ai file nella cartella /etc, come /etc/resolv.conf e /etc/containerd/config.toml, non sono supportate: per il salvataggio permanente delle impostazioni è necessario utilizzare l'API o trasferire la funzionalità in contenitori separati. Per la verifica crittografica dell'integrità della partizione principale è attivato il modulo dm-verity, e in caso venga rilevato un tentativo di modifica dei dati a livello di dispositivo a blocchi, il sistema si riavvia.
La maggior parte dei componenti di sistema sono scritti in Rust, un linguaggio che fornisce strumenti per una gestione della memoria sicura, evitando così vulnerabilità dovute all'accesso a memoria liberata, dereferenziazione di puntatori nulli e overflow del buffer. Durante la compilazione predefinita, vengono applicati i flag di compilazione «—enable-default-pie» e «—enable-default-ssp» per attivare la randomizzazione dello spazio degli indirizzi dei file eseguibili (PIE) e per fornire protezione contro l'overflow dello stack tramite la sostituzione di etichette canarie. Per i pacchetti scritti in C/C++, vengono inclusi ulteriori flag «-Wall», «-Werror=format-security», «-Wp,-D_FORTIFY_SOURCE=2», «-Wp,-D_GLIBCXX_ASSERTIONS» e «-fstack-clash-protection».
Nel nuovo rilascio:
- Durante l'installazione di pacchetti RPM è garantita la generazione di un elenco di programmi in formato JSON e il suo montaggio nel container host come file /var/lib/bottlerocket/inventory/application.json per ottenere informazioni sui pacchetti disponibili.
- Aggiornati i container «admin» e «control».
- Aggiornate le versioni dei pacchetti e delle dipendenze per i linguaggi Go e Rust.
- Aggiornate le versioni dei pacchetti di software di terze parti.
- Risolviti i problemi con la configurazione di tmpfilesd per kmod-5.10-nvidia.
- Durante l'installazione di tuftool è garantito il collegamento tra le versioni delle dipendenze.
Fonte: opennet.ru
