È stato rilasciato il sistema operativo Linux Bottlerocket 1.8.0, sviluppato con la partecipazione di Amazon per l'esecuzione efficace e sicura di container isolati. Gli strumenti e i componenti di gestione del sistema sono scritti in Rust e distribuiti sotto le licenze MIT e Apache 2.0. È supportato il lancio di Bottlerocket in cluster Amazon ECS, VMware e AWS EKS Kubernetes, oltre alla creazione di build e versioni personalizzate che consentono l'uso di vari 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:
- Aggiornato il contenuto dei container amministrativi e di gestione.
- Il runtime per i container isolati è stato aggiornato alla versione containerd 1.6.x.
- Garantito il riavvio dei processi in background che coordinano il funzionamento dei container dopo le modifiche nel deposito dei certificati.
- Fornita la possibilità di impostare i parametri di avvio del kernel tramite la sezione Boot Configuration.
- Inclusa l'ignoranza dei blocchi vuoti durante il controllo dell'integrità della partizione root tramite dm-verity.
- Fornita la possibilità di legare staticamente i nomi degli host in /etc/hosts.
- È stata introdotta la possibilità di generare una configurazione di rete tramite lo strumento netdog (aggiunta il comando generate-net-config).
- Sono state proposte nuove varianti del sistema operativo con supporto per Kubernetes 1.23. Ridotto il tempo di avvio dei pod in Kubernetes disabilitando la modalità configMapAndSecretChangeDetectionStrategy. Sono state aggiunte nuove impostazioni per i kubelet: provider-id e podPidsLimit.
- È stata proposta una nuova variante del sistema operativo «aws-ecs-1-nvidia» per Amazon Elastic Container Service (Amazon ECS), fornita con driver NVIDIA.
- Aggiunto il supporto per dispositivi di archiviazione Microchip Smart Storage e MegaRAID SAS. Ampliato il supporto per le schede Ethernet con chip Broadcom.
- Aggiornate le versioni dei pacchetti e le dipendenze per i linguaggi Go e Rust, così come le versioni dei pacchetti con software di terze parti. Bottlerocket SDK aggiornato alla versione 0.26.0.
Fonte: opennet.ru
