È disponibile il rilascio della distribuzione Linux Bottlerocket 1.2.0, sviluppata in collaborazione con Amazon per avviare in modo efficiente e sicuro container isolati. Gli strumenti e i componenti di gestione della distribuzione sono scritti in Rust e distribuiti sotto le licenze MIT e Apache 2.0. È supportato l'avvio di Bottlerocket nei cluster Amazon ECS, VMware e AWS EKS Kubernetes, oltre alla creazione di versioni e build arbitrarie che consentono l'uso di diversi strumenti di orchestrazione e runtime per 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:
- Aggiunto supporto per i mirror del registro delle immagini dei container.
- Aggiunta la possibilità di utilizzare certificati autofirmati.
- Aggiunto un parametro per configurare il nome host.
- Aggiornata la versione del container amministrativo predefinito.
- Aggiunte le impostazioni topologyManagerPolicy e topologyManagerScope per kubelet.
- Aggiunto supporto alla compressione del kernel tramite l'algoritmo zstd.
- Fornita la possibilità di caricamento in VMware di macchine virtuali in formato OVA (Open Virtualization Format).
- Aggiornata la distribuzione aws-k8s-1.21 con supporto per Kubernetes 1.21. È stata interrotta la supporto per aws-k8s-1.16.
- Aggiornate le versioni dei pacchetti e le dipendenze per il linguaggio Rust.
Fonte: opennet.ru
