A fost publicată versiunea 1.7.0 a distribuției Linux Bottlerocket, dezvoltată cu participarea companiei Amazon pentru lansarea eficientă și sigură a containerelor izolate. Instrumentele și componentele de gestionare ale distribuției sunt scrise în Rust și sunt distribute sub licențele MIT și Apache 2.0. Bottlerocket este suportat în clusterele Amazon ECS, VMware și AWS EKS Kubernetes, precum și pentru crearea de build-uri și ediții personalizate, care permit utilizarea diverselor instrumente de orchestration și runtime pentru containere.
Distribuția oferă o imagine de sistem atomică și actualizabilă automat, indisolubilă, care include kernelul Linux și un mediu de sistem minim, incluzând doar componentele necesare pentru rularea containerelor. În mediu sunt implicate managerul de sistem systemd, biblioteca Glibc, instrumentele de construcție Buildroot, bootloader-ul GRUB, configuratorul de rețea wicked, runtime-ul pentru containere izolate containerd, platforma de orchestrare a containerelor Kubernetes, autentificatorul aws-iam-authenticator și agentul Amazon ECS.
Instrumentele pentru orchestrarea containerelor sunt furnizate într-un container de gestionare separat, care este activat în mod implicit și gestionat prin API și AWS SSM Agent. Imaginea de bază nu conține un shell de comandă, serverul SSH și limbajele interpretate (de exemplu, nu există Python sau Perl) — instrumentele pentru administratori și uneltele de depanare sunt plasate într-un container de serviciu separat, care este dezactivat în mod implicit.
Principala diferență față de distribuțiile similare, cum ar fi Fedora CoreOS, CentOS/Red Hat Atomic Host, este orientarea primară spre asigurarea unei securități maxime în contextul întăririi protecției sistemului împotriva amenințărilor potențiale, dificultății exploatării vulnerabilităților în componentele OS și creșterii izolării containerelor. Containerele sunt create folosind mecanisme standard ale kernel-ului Linux — cgroups, spații de nume și seccomp. Pentru o izolare suplimentară, în distribuție se aplică SELinux în modul „enforcing”.
Partiția de bază este montată în mod numai pentru citire, iar partiția de configurare /etc este montată în tmpfs și își restabilește starea originală după repornire. Modificarea directă a fișierelor din directorul /etc, cum ar fi /etc/resolv.conf și /etc/containerd/config.toml, nu este suportată – pentru salvarea permanentă a setărilor ar trebui utilizat API-ul sau funcționalitatea ar trebui extinsă în containere separate. Pentru verificarea criptografică a integrității partiției de bază este activat modulul dm-verity, iar în caz de încercare de modificare a datelor la nivel de dispozitiv bloc, sistemul se va reporni.
Cele mai multe componente de sistem sunt scrise în limbajul Rust, care oferă mijloace pentru o utilizare sigură a memoriei, evitând vulnerabilitățile cauzate de accesul la memoria eliberată, dereferențierea pointerilor nuli și depășirea limitelor bufferului. La compilarea implicită se aplică modurile de compilare „--enable-default-pie” și „--enable-default-ssp” pentru a activa randomizarea spațiului de adresare al fișierelor executabile (PIE) și protecția împotriva overflow-ului stivei prin substituția etichetelor de canar. Pentru pachetele scrise în C/C++, sunt adăugate suplimentar flag-urile „-Wall”, „-Werror=format-security”, „-Wp,-D_FORTIFY_SOURCE=2”, „-Wp,-D_GLIBCXX_ASSERTIONS” și „-fstack-clash-protection”.
În noua versiune:
- La instalarea pachetelor RPM, se asigură generarea unei liste de programe în format JSON și montarea acesteia în containerul host ca fișier /var/lib/bottlerocket/inventory/application.json pentru obținerea informațiilor despre pachetele disponibile.
- Containerele „admin” și „control” au fost actualizate.
- Versiunile pachetelor și dependențelor pentru limbajele Go și Rust au fost actualizate.
- Versiunile pachetelor cu programe terțe au fost actualizate.
- Problemele cu configurația tmpfilesd pentru kmod-5.10-nvidia au fost rezolvate.
- La instalarea tuftool, s-a asigurat legarea versiunilor dependențelor.
Sursa: opennet.ro
