Minimisma Linuksa distribuo Bottlerocket estis publikigita por ruli ujojn. La plej grava afero pri li

Minimisma Linuksa distribuo Bottlerocket estis publikigita por ruli ujojn. La plej grava afero pri li

Amazon Kompanio anoncita pri la fina eldono Botelkesto — speciala distribuo por prizorgi ujojn kaj efike administri ilin.

Bottlerocket (cetere, la nomo donita al malgrandaj memfaritaj nigraj pulvoraj raketoj) ne estas la unua OS por ujoj, sed verŝajne ĝi disvastiĝos danke al defaŭlta integriĝo kun AWS-servoj. Kvankam la sistemo estas koncentrita sur la Amazon-nubo, la malferma fontkodo permesas ĝin konstrui ie ajn: loke sur servilo, sur Raspberry Pi, en iu ajn konkuranta nubo, kaj eĉ en senenhava medio.

Ĉi tio estas tute inda anstataŭaĵo por la CoreOS-distribuo, kiun Red Hat enterigis.

Fakte, la Amazon Web Services-dividado jam havas Amazon Linukson, kiu ĵus eliris en sia dua versio: ĝi estas ĝeneraluzebla distribuo, kiu povas esti rulita en Docker-ujo aŭ per la Linukso KVM, Microsoft Hyper-V kaj VMware. ESXi-hiperviziiloj. Ĝi estis optimumigita por funkcii en la AWS-nubo, sed kun la liberigo de Bottlerocket, ĉiuj estas kuraĝigitaj ĝisdatigi al nova sistemo, kiu estas pli sekura, moderna kaj uzas malpli da rimedoj.

AWS anoncis Bottlerocket en marto 2020. Ŝi tuj konfesis, ke ĉi tio ne estas la unua "Linukso por ujoj", citante CoreOS, Rancher OS kaj Project Atomic kiel fontojn de inspiro. La programistoj skribis, ke la operaciumo estas "la rezulto de la lecionoj, kiujn ni lernis de funkciado de produktadservoj laŭ la skalo de Amazon dum longa tempo, kaj la sperto, kiun ni akiris dum la lastaj ses jaroj pri kiel funkciigi ujojn."

Ekstrema minimalismo

Linukso estas senigita de ĉio, kio ne necesas por ruli ujojn. Ĉi tiu dezajno, laŭ la kompanio, reduktas la ataksurfacon.

Ĉi tio signifas, ke malpli da pakaĵoj estas instalitaj sur la baza sistemo, kio faciligas konservi kaj ĝisdatigi la OS, kaj ankaŭ reduktas la verŝajnecon de problemoj pro dependecoj, reduktante la uzadon de rimedoj. Esence, ĉio ĉi tie funkcias ene de apartaj ujoj, kaj la subesta sistemo estas preskaŭ nuda.

Amazon ankaŭ forigis ĉiujn ŝelojn kaj interpretistojn, forigante la riskon de ili esti uzataj aŭ de uzantoj hazarde eskaladi privilegiojn. Por minimumismo kaj sekureco, la baza bildo ne inkluzivas komandan ŝelon, SSH-servilon aŭ interpretitajn lingvojn kiel Python. Administranto-iloj estas metitaj en apartan servujon, kiu estas malebligita defaŭlte.

La sistemo estas administrita laŭ du manieroj: per la API kaj instrumentado.

Anstataŭ pakaĵmanaĝero kiu ĝisdatigas individuajn programojn, Bottlerocket elŝutas kompletan dosiersistembildon kaj rekomencas en ĝi. Se ŝarĝo malsukcesas, ĝi aŭtomate retroiras, kaj malsukceso de laborŝarĝo povas ekigi malfunkcion permane (komando per API).

Kadro TUF (La Ĝisdatiga Kadro) elŝutas bild-bazitajn ĝisdatigojn al alternaj aŭ "malmuntitaj" sekcioj. Du diskpartoj estas asignitaj por la sistemo, unu el kiuj enhavas la aktivan sistemon, kaj la ĝisdatigo estas kopiita al la dua. En ĉi tiu kazo, la radikdisko estas muntita en nurlegebla reĝimo, kaj la sekcio /etc muntita kun la dosiersistemo en RAM tmpfs kaj restarigas la originan staton post rekomenco. Rekta modifo de agordaj dosieroj en /etc ne subtenata: por konservi agordojn vi devus uzi la API aŭ movi la funkciojn en apartajn ujojn.

Minimisma Linuksa distribuo Bottlerocket estis publikigita por ruli ujojn. La plej grava afero pri li
API-ĝisdatigoskemo

Sekureco

Ujoj estas kreitaj per normaj mekanismoj de la Linukso-kerno - cgroups, nomspacoj kaj seccomp, kaj estas uzataj kiel deviga alirkontrolsistemo, tio estas, por plia izolado. SELinux en "deviga" reĝimo.

Defaŭlte, politikoj estas ebligitaj por dividi rimedojn inter ujoj kaj la kerno. Binaroj estas protektitaj per flagoj por malhelpi uzantojn aŭ programojn ekzekuti ilin. Kaj se oni atingas la dosiersistemon, Bottlerocket ofertas ilon por kontroli kaj spuri ajnajn ŝanĝojn faritajn.

La "kontrolita lanĉo" reĝimo estas efektivigita per la aparato-mapper-verity funkcio (dm-verity), kiu kontrolas la integrecon de la radikdisko dum lanĉo. AWS priskribas dm-verity kiel "trajton de la Linukso-kerno, kiu provizas integrecajn kontrolojn por malhelpi malware funkcii en la OS, kiel anstataŭi kerna sistemprogramaro."

Ankaŭ estas filtrilo en la sistemo eGMP (plilongigita BPF, evoluigita fare de Alexey Starovoitov), kiu permesas al kernomoduloj esti anstataŭigitaj kun pli sekuraj BPF-programoj por malaltnivelaj sistemoperacioj.

Ekzekuta Modelo
Uzanto difinita
Kompilo
Sekureco
Malsukcesa reĝimo
Aliro al rimedoj

Uzanto
la tasko
jes
iu ajn
uzantrajtoj
interrompi la ekzekuton
sistemvoko, misfaro

La kerno
la tasko
neniu
statika
neniu
kerno paniko
rektaj

GMP
evento
jes
JIT, CO-RE
konfirmo, JIT
erarmesaĝo
limigitaj helpantoj

Kiel BPF diferencas de regula uzanto aŭ kernnivela kodo fonto

AWS diris, ke Bottlerocket "utiligas mastruman modelon kiu plue plibonigas sekurecon malhelpante ligojn al produktaj serviloj kun administraj privilegioj" kaj estas "taŭga por grandaj distribuitaj sistemoj kie kontrolo de ĉiu individua gastiganto estas limigita."

Administra ujo estas provizita por sistemaj administrantoj. Sed AWS ne opinias, ke administranto ofte devos labori ene de Bottlerocket: "La ago ensaluti en apartan petskribon de Bottlerocket estas destinita por maloftaj operacioj: altnivela sencimigado kaj solvo de problemoj," skribi programistoj.

Rusta lingvo

La OS-instrumentado supre de la kerno estas plejparte skribita en Rust. Ĉi tiu lingvo estas laŭ sia naturo reduktas la verŝajnecon de nesekura memoraliroKaj forigas raskondiĉojn inter fadenoj.

Flagoj estas aplikataj defaŭlte dum konstruado --enable-default-pie и --enable-default-ssp por ebligi hazardigon de la adrespaco de ruleblaj dosieroj (pozicio-sendependa rulebla, PIE) kaj staka superflua protekto.

Por C/C++-pakaĵoj, pliaj flagoj estas inkluzivitaj -Wall, -Werror=format-security, -Wp,-D_FORTIFY_SOURCE=2, -Wp,-D_GLIBCXX_ASSERTIONS и -fstack-clash-protection.

Krom Rust kaj C/C++, kelkaj pakaĵoj estas skribitaj en Go.

Integriĝo kun AWS-servoj

La diferenco de similaj kontenaj operaciumoj estas, ke Amazon optimumigis Bottlerocket por funkcii per AWS kaj integriĝi kun aliaj AWS-servoj.

La plej populara kontenerorkestro estas Kubernetes, do AWS enkondukis integriĝon kun sia propra Enterprise Kubernetes Service (EKS). Orkestraj iloj venas en aparta kontrolujo botelraketo-kontrolo-ujo, kiu estas ebligita defaŭlte kaj administrita per la API kaj AWS SSM Agent.

Estos interese vidi ĉu Bottlerrocket ekflugas, pro la fiasko de iuj similaj iniciatoj en la pasinteco. Ekzemple, PhotonOS de Vmware montriĝis nepostulita, kaj RedHat aĉetis CoreOS kaj fermis la projekton, kiu estis konsiderita pioniro en la kampo.

La integriĝo de Bottlerocket al AWS-servoj igas ĉi tiun sistemon unika laŭ sia propra maniero. Ĉi tio eble estas la ĉefa kialo, kial iuj uzantoj eble preferas Bottlerocket ol aliaj distroj kiel CoreOS aŭ Alpine. La sistemo estas komence desegnita por labori kun EKS kaj ECS, sed ni ripetas, ke tio ne estas necesa. Unue, Bottlerocket povas kunveni mem kaj uzu ĝin, ekzemple, kiel gastigitan solvon. Due, uzantoj de EKS kaj ECS ankoraŭ havos la kapablon elekti sian OS.

La fontkodo de Bottlerocket estas publikigita sur GitHub sub la permesilo Apache 2.0. La programistoj jam havas respondi al cimraportoj kaj ĉefpetoj.

Pri la Rajtoj de Reklamado

VDSina ofertas VDS kun ĉiutaga pago. Eblas instali ajnan operaciumon, inkluzive de via propra bildo. Ĉiu servilo estas konektita al interreta kanalo de 500 Megabitoj kaj estas protektita kontraŭ DDoS-atakoj senpage!

Minimisma Linuksa distribuo Bottlerocket estis publikigita por ruli ujojn. La plej grava afero pri li

fonto: www.habr.com

Aldoni komenton