Сигуран сам да вам се ово десило: покушавате да саставите контејнер за личну употребу, желите да га учините безбеднијим користећи непривилеговани контејнери И одједном се нађете заробљени у лавиринту грешака у дозволама. Фрустрирајуће је проводити сате конфигуришући фасцикле у кућном директоријуму корисника само да бисте открили да контејнер не може да пише у њих или да су, када то учини, резултујуће датотеке на хосту оштећене. немогуће управљати јер припадају фантомском кориснику.
Реалност је да, иако је контејнеризација убрзала испоруку софтвера, отворила је врата значајним ризицима. Према последњим подацима, велика већина продукцијских слика носи [нејасно - могуће „нејасно“ или „нејасно“] критичне рањивостиЗбог тога је безбедност стуб о коме се не може преговарати. Не ради се само о спречавању хакерских напада, већ о разумевању како систем функционише. изолација процеса како наша инфраструктура не би постала сито.
Разумевање екосистема безбедности контејнера
Да бисмо престали да нагађамо са дозволама, прво морамо да знамо шта штитимо. Архитектура контејнера је подељена на неколико критичних слојева. Прво, имамо слика контејнерашто је оригинални план; ако је ово рањиво, све инстанце које распоредите биће небезбедне. Зато је важно користити поуздане основне слике и редовно их ажурирајте.
Онда време извршавањакоји делује као арбитар између оперативног система домаћина и апликације. Ако је извршно окружење застарело, ризик од бекство из контејнера драматично се повећава. Овоме морамо додати оркестрацију, као што је Кубернетес, где контрола приступа заснована на улогама (RBAC) То је једина права препрека против неовлашћеног приступа API-ју за управљање.
Не можемо заборавити хост оперативни системАко нападач успе да компромитује језгро хоста, он држи кључеве целог домена. Препорука овде је јасна: користите минимални оперативни систем да би се смањила површина напада. Коначно, мрежа је најчешћа улазна тачка; скоро 30% пробоја се дешава због кварова у повезивању, тако да сегментација мреже и TLS/SSL енкрипција Они су обавезни.
Главобоља дозвола и root корисника
Типичан проблем за хобисте је ток рада са запреминама. Направите фасциклу, монтирате је, и онда, бум!, грешка. дозвола одбијенаТо се дешава зато што се, подразумевано, многи контејнери покрећу као root. Када покушате да присилите UID и GID на 0 Да бисте их подударали са вашим корисником хоста, креирате опасан мост. Ако вам контејнер не дозвољава да конфигуришете ове ИД-ове, на крају ћете потрошити поподне покушавајући да схватите ког интерног корисника апликација користи за извршавање chown упутство.
Ефикасно решење је примена принцип најмање привилегијаНе би требало да покрећете ништа као root осим ако није апсолутно неопходно. Да бисте решили проблем датотека креираних од стране контејнера које не можете да обришете на хосту, неопходно је да конфигуришете Dockerfile помоћу следеће инструкције: КОРИСНИК, дефинисање корисника без привилегија пре покретања апликације.
Ако користите Подман, концепт контејнери без корена Нативан је и веома користан, али захтева да разумете како су корисници хоста мапирани на кориснике контејнера. Да би се спречило да дозволе измакну контроли, идеално би било да апликација буде дизајнирана да пише на одређене руте и да мапирање запремине То се ради узимајући у обзир стварни UID корисника који покреће процес.
Стратегије за изградњу оклопљених слика
Ако желите да престанете да патите, морате да промените начин на који конструишете своје слике. Једна брутално ефикасна техника је... вишестепене градњеУ основи, користите тешку слику са свим алатима за изградњу да бисте генерисали бинарну датотеку, а затим копирате само ту датотеку на коначну слику. изузетно лагана.
Можете чак ићи даље користећи слику огребетеОво ствара контејнер који нема апсолутно ништа: нема љуску, нема менаџер пакета, само вашу апликацију. Ово чини нападачу практично немогућим да изврши злонамерне команде ако успе да уђе, јер Нема интерпретатора команди доступно.
Још једна безбедносна мера је чишћење слике било које бинарне датотеке са дозволама setuid или setgidОве дозволе омогућавају да се датотека изврши са привилегијама власника датотеке, а не корисника који је покреће, што је аутопут за... ескалација привилегијаЈедноставна команда за претраживање и уклањање ових делова током креирања слике може вам уштедети много проблема.
Опасности привилегованог режима и могућности Линукса
Понекад, из очаја због немогућности да решимо проблем са дозволама, упадамо у искушење да користимо заставицу –привилегованЗаборавите на то. Привилеговани режим прекида изолацију контејнера и даје вам потпун приступ уређајима домаћина. То је као да дате кључеве од своје куће странцу само зато што није знао како да отвори баштенску капију.
Уместо тога, требало би да се играте са Могућности ЛинуксаДокер додељује скуп подразумеваних дозвола (као што су CAP_CHOWN или CAP_NET_RAW). Ако ваша апликација не мора да манипулише мрежом на ниском нивоу, најпаметнији приступ је елиминишите непотребне могућности и додајте само оне које су строго потребне --cap-add.
За оне који управљају озбиљнијим окружењима, постоје додаци за ауторизацију као што је opa-docker-authz. Оне омогућавају пресретање позива API-ју Docker демона и блокирање сваког покушаја покретања контејнера у привилегованом режиму, осигуравајући да нико, чак ни грешком, не остави врата отворена хосту.
Оптимизација и одржавање окружења
Немојте се оптерећивати величином слике од 5MB када користите Alpine Linux ако то изазива проблеме са компатибилношћу са библиотекама. Понекад је пожељнија мало већа Debian слика. стабилизован и познат од стране тима. Оно што је кључно јесте имплементација скенирање рањивости Аутоматизовани CI/CD цевовод за откривање CVE пре него што слика стигне до продукције.
Што се тиче складиштења, спречава апликацију да пише у коренски фајл систем. Конфигуришите фајл систем само за читање (rootfs) и дефинише одређене запремине само за податке који треба да се чувају. Ово није само безбедније, већ и намеће чистију архитектуру и без имовинеолакшавање хоризонталног скалирања.
За заказане процесе, немојте стављати cron задатак унутар контејнера веб странице. Златно правило је један процес по контејнеруНајчистији приступ је да користите слику ваше апликације за покретање ефемерног контејнера који извршава задатак, а затим се сам уништава, или да управљате cron-ом са хоста позивањем контејнерског механизма помоћу команди.
Безбедност контејнера је континуирани процес који подразумева елиминисање root приступа, ограничавање могућности језгра и уклањање непотребних алата из слика контејнера. Комбиновањем непривилегованих корисника са ојачавањем током извршавања и сталним праћењем, постиже се окружење у којем функционалност не угрожава интегритет хост система.
Страствени писац о свету бајтова и технологије уопште. Волим да делим своје знање кроз писање, и то је оно што ћу радити на овом блогу, показивати вам све најзанимљивије ствари о гаџетима, софтверу, хардверу, технолошким трендовима и још много тога. Мој циљ је да вам помогнем да се крећете у дигиталном свету на једноставан и забаван начин.

