Blogi
Tõelise mitmeüürniku isoleerimise saavutamine Dockeris
Dockeri jagatud kernelimudel toob riske mitmeüürniku keskkondadesse. See juhend annab konkreetsed sammud isoleerimise tugevdamiseks kasutajanimeruumide, seccomp, AppArmor, liivakastimistööriistade ja orkestreerimise parimate praktikate abil.
Kokkuvõte
Dockeri konteinerid jagavad hosti kerneli, mis võib olla turvarisk mitmeüürniku keskkondades, kus üürnikud ei pruugi üksteist usaldada. See artikkel selgitab isoleerimise lünki vaikimisi Dockeri seadistustes ja pakub konkreetseid samme isoleerimise tugevdamiseks Linuxi nimeruumide, cgroupide, kasutajanimeruumide, seccomp, AppArmor ja riistvaravirtualiseerimise abil. Sa õpid, kuidas seadistada üürnikupõhiseid Dockeri deemoneid, kasutada liivakastimistööriistu nagu gVisor või Firecracker tugevama isoleerimise jaoks ning orkestreerida Kubernetes'iga mitmeüürniku keskkonda. Samuti käsitleme õige infrastruktuuriteenuse pakkuja valimist, kes pakub KVM-põhist virtualiseerimist täiendava eralduskihina. Lõpuks on sul plaan turvaliste mitmeüürniku töökoormuste käitamiseks Dockeriga.
Kui majutad mitut üürnikku ühel Dockeri hostil, ei piisa vaikimisi konteineri isoleerimisest – mis põhineb Linuxi nimeruumidel ja cgroupidel – sageli. Ühe üürniku konteinerist põgenemine võib ohustada kogu hosti ja kõiki teisi konteinereid. See probleem on eriti terav jagatud majutuses, SaaS platvormidel või muudes stsenaariumides, kus usaldamatu kood töötab koos sinu omaga. Hea uudis: saad virnastada mitu isoleerimistehnikat, et luua tugevdatud mitmeüürniku keskkond. See juhend viib läbi kuus praktilist sammu, alates lihtsast nagu kasutajanimeruumid kuni edasijõudnudeni nagu liivakastimise käituskeskkonnad ja infrastruktuuri valikud.
Dockeri vaikimisi isoleerimise mõistmine
Docker kasutab Linuxi nimeruume protsesside, võrgu, failisüsteemi ja muude ressursside isoleerimiseks. Cgroupid piiravad protsessori, mälu ja sisend-väljundit. Kuid need jagavad ühte kerneli – haavatavus kernelis võib mõjutada kõiki konteinereid. Tõeliseks mitmeüürniku keskkonnaks, eriti usaldamatute üürnikega, vajad kaitse sügavust. Nagu arutatud artiklis Mitmeüürniku Dockeri arhitektuuri kavandamine: õige isoleerimistaseme valimine, ulatuvad isoleerimistasemed nõrgast (ainult nimeruumid) tugevani (riistvaravirtualiseerimine). Ehitame üles nõrgemast alustades.
1. samm: Luba kasutajanimeruumid
Vaikimisi vastendub root konteineri sees root-iga hostis. Konteinerist põgenemine annab täieliku juurdepääsu hostile. Kasutajanimeruumid vastendavad konteineri root-i ümber mitteroot-kasutajaks väljaspool. Luba see globaalselt käsuga dockerd --userns-remap=default või konteineripõhiselt lipuga --userns=host. See lihtne samm kõrvaldab paljud privilegeerimise rünnakud. Testi oma rakendusi: mõned, mis nõuavad hostitaseme õigusi (nt failisüsteemide ühendamine), võivad katki minna. Drupal või WordPress saitide puhul on see tavaliselt ohutu.
2. samm: Rakenda seccomp ja AppArmor profiilid
Seccomp piirab süsteemikutseid, mida konteiner saab teha. Docker tarnib vaikimisi seccomp profiili, mis blokeerib ohtlikud süsteemikutsed nagu mount ja reboot. Mitmeüürniku keskkonnas pinguta seda veelgi – blokeeri ebatavalised süsteemikutsed, mida põgenemistööriistad kasutavad. Samamoodi saab AppArmor piirata konteineri protsesse. Loo kohandatud AppArmor profiil, mis keelab kirjutamisjuurdepääsu kerneli liidestele ja piirab failiteid. Mõlemad seatakse lipuga --security-opt. Kombineeri need kihiliseks kaitseks.
3. samm: Kasuta üürnikupõhiseid Dockeri deemoneid
Ühe Dockeri deemonina kõigi üürnike jaoks on riskantne – igasugune konteinerist põgenemine võib pääseda deemonipesale. Isoleeri deemonid üürniku kohta, kasutades Docker-in-Docker (DinD) või kaugdeemoni lõpp-punkte. Näiteks käivita Dockeri deemon konteineri sees lipuga --privileged (kuid see nõrgendab isoleerimist). Parem lähenemine: käivita eraldi deemonid eraldi virtuaalmasinates või kasuta Dockeri eksperimentaalset --group funktsiooni koos kasutajanimeruumidega. Orkestreerimisel on Kubernetes'i nimeruumipõhine isoleerimine praktilisem, nagu käsitletud artiklis Konteinerist põgenemise vastu kaitsmine: praktiline juhend Dockeri isoleerimiseks mitmeüürniku majutuses.
4. samm: Kaalu liivakastimise käituskeskkondi
Kui Linuxi kernel ise on usaldamatu, kasuta liivakastimise käituskeskkonda, mis lisab kerge VM-kihi. gVisor (runsc) peatab süsteemikutsed ja rakendab oma kerneli, samas kui Firecracker kasutab mikro-VM-e riistvaravirtualiseerimisega. Mõlemad integreeruvad Dockeriga containerd käituskeskkondade kaudu. Näiteks lisa "runtimes": {"runsc": {}} Dockeri deemoni seadesse ja käivita konteinerid käsuga --runtime=runsc. Toimivuse ülekulu on 5–15%, kuid isoleerimine on tunduvalt tugevam. Ideaalne kõrge turvalisusega mitmeüürniku seadistustes.
5. samm: Orkestreeri Kubernetes'i ja turvapoliitikatega
Kubernetes pakub loomulikku mitmeüürniku tuge nimeruumide, Pod-turvastandardite ja võrgupoliitikate kaudu. Määratle üürnikupõhised nimeruumid ressursikvootidega ja jõusta piiratud pod-turvakontekste (eemalda kõik võimalused, kirjutuskaitstud juurfailisüsteem). Sisselaskekontrollijad nagu OPA/Gatekeeper võivad blokeerida valeseadistused. Kui haldad palju üürnikke, automatiseerib Kubernetes isoleerimise jõustamise. Tootmisühise orkestreerimise kohta vaata artiklit Beyond Docker Compose: tootmisvalmis konteineriseeritud rakenduste orkestreerimine.
6. samm: Vali õige majutusteenuse pakkuja
Sinu infrastruktuuriteenuse pakkuja hüperviisor mängib rolli. Docker jagatud majutuses (OpenVZ) annab nõrga isoleerimise – üks üürnik võib näha teisi protsesse. Eelista pakkujaid, kes kasutavad KVM-i või VMware't, mis pakuvad riistvarataseme eraldust. Pakkujad nagu DigitalOcean, Kamatera või AWS pakuvad KVM-põhiseid VPS-e pühendatud ressurssidega. Raudbetooni puhul veendu, et BIOS-taseme virtualiseerimine on sisse lülitatud pesastatud konteinerite jaoks. Pakkuja, kes isoleerib üürnikud hüperviisori kihil, täiendab sinu konteineri isoleerimist. Nagu üksikasjalikult kirjeldatud artiklis Dockeri isoleerimise valdamine turvaliseks ja tõhusaks veebimajutuseks, tuleks ka hosti OS tugevdada minimaalse ründepinnaga.
Hoiatused ja kompromissid
Iga lisakiht lisab keerukust ja jõudluskulu. Kasutajanimeruumid võivad katki teha hosti ühendatud köited. Seccomp profiilid nõuavad häälestamist rakenduse põhjal. Liivakastimise käituskeskkonnad nagu gVisor ei toeta kõiki süsteemikutseid – sinu rakendus ei pruugi töötada. Üürnikupõhised Dockeri deemonid suurendavad mälukulu. Vali isoleerimistase, mis sobib sinu ohumudeliga: usaldusväärsete üürnike puhul võivad vaikimisi nimeruumid piisata; avaliku SaaS-i puhul investeeri käituskeskkonna liivakastidesse ja Kubernetes'i poliitikatesse. Testi põhjalikult enne tootmisesse viimist.
Kokkuvõte
Tõeline mitmeüürniku isoleerimine Dockeris on saavutatav, kui kihistada mitu kerneli funktsiooni, käituskeskkonna liivakaste ja orkestreerimiskontrolle. Alusta kasutajanimeruumidest ja seccomp'ist, siis liigu edasi üürnikupõhiste deemonite või liivakastimise käituskeskkondade juurde. Suuremahuliseks pakub Kubernetes poliitikapõhist isoleerimist. Kombineeri alati hüperviisori tasemel eraldatud hostiga maineka pakkuja juures. Ükski tehnika pole kuulikindel, kuid nende kombineerimine loob tugeva kaitse. Su üürnikud tänavad sind – ja seda teeb ka sinu turvaaudit.
Sources (5)
- Docker and Container Isolation - Medium
- Enhanced Container Isolation - Docker Docs
- Container orchestration is the automated process of deploying, managing, scaling, and networking containers in production.
- Container Orchestration 101 - Docker
- Best 10 Docker Container Hosting Platforms in 2026 - Purvaco Technology

