Esu tikras, kad tai nutiko ir jums: bandote surinkti konteinerį asmeniniam naudojimui, norite, kad jis būtų saugesnis naudojant neprivilegijuoti konteineriai Ir staiga atsiduriate įstrigę leidimų klaidų labirinte. Vargina valandų valandas konfigūruoti aplankus vartotojo pagrindiniame kataloge, o tada paaiškėja, kad konteineris negali į juos rašyti arba, kai rašo, pagrindiniame kompiuteryje esantys failai yra sugadinti. neįmanoma valdyti nes jie priklauso fiktyviam vartotojui.
Realybė tokia, kad nors konteinerizavimas paspartino programinės įrangos teikimą, jis atvėrė duris nemaža rizika. Remiantis naujausiais duomenimis, didžioji dauguma gamybinių atvaizdų yra [neaišku – galbūt „neaišku“ arba „neaišku“] kritinių pažeidžiamumųDėl to saugumas yra neginčijamas ramstis. Svarbu ne tik užkirsti kelią įsilaužėlių atakoms, bet ir suprasti, kaip sistema veikia. proceso izoliacija kad mūsų infrastruktūra netaptų sietu.
Konteinerių saugumo ekosistemos supratimas
Kad nebereikėtų spėlioti dėl leidimų, pirmiausia turime žinoti, ką saugome. Konteinerio architektūra yra padalinta į kelis svarbius sluoksnius. Pirma, turime konteinerio vaizdaskuris yra originalus planas; jei jis yra pažeidžiamas, visi jūsų diegiami egzemplioriai bus nesaugūs. Štai kodėl labai svarbu jį naudoti patikimų bazių vaizdai ir nuolat juos atnaujinkite.
Tada vykdymo laikaskuris veikia kaip arbitras tarp pagrindinės operacinės sistemos ir programos. Jei vykdymo aplinka pasenusi, kyla rizika, kad konteinerio pabėgimas smarkiai išauga. Prie to turime pridėti orkestravimo technologijas, tokias kaip „Kubernetes“, kur vaidmenimis pagrįsta prieigos kontrolė (RBAC) Tai vienintelė reali kliūtis nuo neteisėtos prieigos prie valdymo API.
Negalime pamiršti, pagrindinės operacinės sistemosJei užpuolikui pavyksta pažeisti pagrindinio kompiuterio branduolį, jis turi viso domeno raktus. Rekomendacija čia aiški: naudoti minimali operacinė sistema sumažinti atakų paviršių. Galiausiai, tinklas yra dažniausias įėjimo taškas; beveik 30 % pažeidimų įvyksta dėl ryšio sutrikimų, todėl tinklo segmentavimas ir TLS/SSL šifravimas Jie yra privalomi.
Leidimų ir root vartotojo galvos skausmas
Tipinė mėgėjų problema yra darbo eiga su tomais. Sukuriate aplanką, jį prijungiate ir tada, bum!, įvyksta klaida. leidimas atmestasTaip nutinka todėl, kad pagal numatytuosius nustatymus daugelis konteinerių paleidžiami kaip root. Kai bandote priverstinai UID ir GID ties 0 Norėdami, kad jie atitiktų jūsų pagrindinio vartotojo ID, kuriate pavojingą tiltą. Jei konteineris neleis jums konfigūruoti šių ID, sugaišite popietę bandydami išsiaiškinti, kurį vidinį vartotoją programa naudoja atlikdama veiksmą. chown rankinis.
Efektyvus sprendimas yra taikyti mažiausios privilegijos principasNeturėtumėte paleisti nieko kaip root, nebent tai būtų absoliučiai būtina. Norint išspręsti konteineriuose sukurtų failų, kurių negalima ištrinti pagrindiniame kompiuteryje, problemą, būtina sukonfigūruoti „Dockerfile“ naudojant šią instrukciją: VARTOTOJAS, apibrėžiant vartotoją be privilegijų prieš paleidžiant programą.
Jei naudojate „Podman“, sąvoka bešakniai konteineriai Tai įdiegta ir labai naudinga, tačiau reikia suprasti, kaip pagrindiniai vartotojai yra susieti su konteinerio vartotojais. Kad teisės neišeitų iš kontrolės, idealiu atveju programa turėtų būti sukurta taip, kad rašytų į konkrečius maršrutus ir kad... tūrio žemėlapių sudarymas Tai atliekama atsižvelgiant į tikrąjį procesą paleidžiančio vartotojo UID.
Šarvuotų vaizdų kūrimo strategijos
Jei norite nustoti kentėti, turite pakeisti savo vaizdinių kūrimo būdą. Viena žiauriai veiksminga technika yra... kelių etapų kūrimasIš esmės, dvejetainiam failui generuoti naudojate sudėtingą atvaizdą su visais kūrimo įrankiais, o tada į galutinį atvaizdą kopijuojate tik tą failą. itin lengvas.
Naudodami paveikslėlį galite žengti dar toliau subraižytiTai sukuria konteinerį, kuriame nėra absoliučiai nieko: jokio apvalkalo, jokio paketų tvarkyklės, tik jūsų programa. Tai praktiškai neleidžia užpuolikui vykdyti kenkėjiškų komandų, jei jam pavyksta patekti, nes Nėra komandų interpretatoriaus galima.
Kita saugumo priemonė – išvalyti bet kokio dvejetainio failo su leidimais atvaizdą. setuid arba setgidŠios teisės leidžia vykdyti failą su failo savininko, o ne jį paleidusio vartotojo, privilegijomis, o tai yra greitkelis... privilegijų eskalavimasPaprasta komanda, skirta ieškoti ir pašalinti šiuos bitus kuriant vaizdą, gali sutaupyti daug rūpesčių.
Privilegijuoto režimo pavojai ir „Linux“ galimybės
Kartais, iš nevilties, kad negalime išspręsti leidimų problemos, pasiduodame pagundai naudoti vėliavėlę –privilegijuotasPamirškite tai daryti. Privilegijuotas režimas nutraukia konteinerio izoliaciją ir suteikia jums visišką prieigą prie pagrindinio kompiuterio įrenginių. Tai tas pats, kas duoti savo namų raktus nepažįstamajam vien todėl, kad jis nežinojo, kaip atidaryti sodo vartus.
Vietoj to, turėtumėte žaisti su Linux galimybės„Docker“ priskiria numatytųjų leidimų rinkinį (pvz., CAP_CHOWN arba CAP_NET_RAW). Jei jūsų programai nereikia manipuliuoti tinklu žemu lygiu, protingiausias būdas yra pašalinti nereikalingus pajėgumus ir pridėkite tik tuos, kurie griežtai privalomi --cap-add.
Tiems, kurie valdo rimtesnes aplinkas, yra autorizacijos papildiniai pvz., „opa-docker-authz“. Jie leidžia perimti skambučius į „Docker“ demono API ir blokuoti bet kokius bandymus paleisti konteinerį privilegijuotu režimu, užtikrinant, kad niekas, net ir netyčia, nepaliktų durų atvirų pagrindiniam kompiuteriui.
Aplinkos optimizavimas ir priežiūra
Naudojant „Alpine Linux“, neapsiribinkite ties 5 MB atvaizdo dydžiu, jei tai sukelia suderinamumo problemų su bibliotekomis. Kartais geriau naudoti šiek tiek didesnį „Debian“ atvaizdą. stabilizuotas ir žinomas komandos. Svarbiausia yra įdiegti pažeidžiamumų skenavimas Automatizuotas CI/CD srautas, skirtas CVE aptikti prieš atvaizdui pasiekiant gamybos aplinką.
Kalbant apie saugyklą, tai neleidžia programai rašyti į šakninę failų sistemą. Konfigūruokite tik skaitymui skirta failų sistema (rootfs) ir apibrėžia konkrečius tomus tik tiems duomenims, kuriuos reikia išsaugoti. Tai ne tik saugiau, bet ir skatina švaresnę architektūrą ir be turtopalengvinant horizontalų mastelio keitimą.
Suplanuotų procesų atveju nedėkite „cron“ užduoties svetainės konteineryje. Auksinė taisyklė yra tokia: vienas procesas vienam konteineriuiŠvariausias būdas yra naudoti programos atvaizdą, norint paleisti trumpalaikį konteinerį, kuris vykdo užduotį ir tada pats save sunaikina, arba valdyti „cron“ iš pagrindinio kompiuterio, iškviečiant konteinerio variklį naudojant komandas.
Konteinerių saugumas yra nuolatinis procesas, apimantis root prieigos panaikinimą, branduolio galimybių apribojimą ir nereikalingų įrankių pašalinimą iš konteinerių atvaizdų. Derinant neprivilegijuotus vartotojus su apsaugos nuo pažeidimų vykdymo metu užtikrinimu ir nuolatiniu stebėjimu, sukuriama aplinka, kurioje funkcionalumas nekenkia pagrindinės sistemos vientisumui.
Aistringas rašytojas apie baitų pasaulį ir technologijas apskritai. Man patinka dalytis savo žiniomis rašydamas, būtent tai ir darysiu šiame tinklaraštyje, parodysiu jums įdomiausius dalykus apie programėles, programinę įrangą, techninę įrangą, technologijų tendencijas ir kt. Mano tikslas – padėti jums paprastai ir smagiai naršyti skaitmeniniame pasaulyje.

