Blog

Otvrđivanje Docker kontejnera za hosting s više stanara: Vodič za izolaciju korak po korak

Naučite kako osigurati Docker kontejnere za okruženja s više stanara uz praktične sigurnosne mjere poput korisnika bez root privilegija, uklonjenih sposobnosti, datotečnih sustava samo za čitanje i mrežne izolacije.

Sažetak

Pokretanje Docker hosting platforme s više stanara zahtijeva nepropusnu izolaciju kontejnera kako bi se spriječilo da stanari ometaju jedni druge ili pobjegnu na host. Ovaj vodič donosi konkretan proces otvrđivanja korak po korak koji možete primijeniti danas. Naučit ćete konfigurirati korisnike bez root privilegija, ukloniti nepotrebne Linux sposobnosti, montirati datotečne sustave samo za čitanje, primijeniti ograničenja resursa putem cgroups, segmentirati mreže i primijeniti seccomp ili AppArmor profile. Također ćemo pokriti kada nadograditi kontejnere virtualnim strojevima za maksimalnu sigurnost. Na kraju ćete imati popis za provjeru kako biste sustavno eliminirali uobičajene vektore bijega iz kontejnera i održali svoju infrastrukturu s više stanara istinski izoliranom.

Stvarni problem s kontejnerima s više stanara

Docker kontejneri dijele kernel hosta, a ako je izolacija pogrešno konfigurirana, jedan stanar teoretski može pristupiti podacima drugog, potrošiti sav CPU ili čak pobjeći na host. Kao pružatelj hostinga, trebate nepropusne granice bez žrtvovanja prednosti performansi kontejnera. Mnogi timovi počinju sa zadanim Docker postavkama, koje su dizajnirane za razvoj, a ne za produkcijsko višestanarsko okruženje. Dobra vijest: uz sustavni popis za provjeru otvrđivanja, možete zaključati svaki kontejner do razine izolacije bliske VM-u, zadržavajući Dockerovu brzinu.

Ovaj članak vas vodi kroz svaki korak otvrđivanja s praktičnim primjerima i upozorenjima. Na kraju ćete imati ponovljiv proces za implementaciju sigurnih kontejnera s više stanara.

Korak 1: Pokrenite kontejnere kao korisnik bez root privilegija

Prema zadanim postavkama, Docker kontejneri se pokreću kao root. Ako je kontejner kompromitiran, napadač dobiva root privilegije unutar kontejnera i može pokušati bijeg iz kontejnera. Prvo, stvorite namjenskog korisnika u vašem Dockerfileu i prebacite se na njega:

FROM ubuntu:22.04
RUN useradd -m appuser
USER appuser

Upozorenje: Neki procesi (npr. vezivanje na portove < 1024) zahtijevaju root. U tim slučajevima, koristite zastavicu --cap-add za dodjelu samo potrebne sposobnosti, poput --cap-add=NET_BIND_SERVICE, i i dalje pokrenite proces pod korisnikom bez root privilegija.

Za više o temeljnoj izolaciji, pogledajte naš vodič o postizanju istinske višestanarske izolacije u Dockeru.

Korak 2: Uklonite sve Linux sposobnosti i vratite samo ono što vam treba

Linux sposobnosti razbijaju root privilegije na male jedinice. Docker kontejneri dolaze sa zadanim skupom sposobnosti koje su previše permisivne za hosting s više stanara. Uklonite sve i vratite samo ono što vaša aplikacija zahtijeva:

docker run --cap-drop=ALL --cap-add=NET_BIND_SERVICE my-app

Uobičajene sposobnosti koje treba izbjegavati: SYS_ADMIN (bijeg iz kontejnera), NET_RAW (praćenje paketa), SYS_PTRACE (otsitranje procesa). Koristite docker run s --security-opt no-new-privileges kako biste spriječili eskalaciju privilegija putem setuid binarnih datoteka.

Korak 3: Montirajte korijenski datotečni sustav samo za čitanje

Napadači često pišu zlonamjerne skripte u datotečni sustav kontejnera. Postavljanjem korijenskog datotečnog sustava samo za čitanje to sprječavate:

docker run --read-only --tmpfs /tmp:rw,noexec,nosuid,size=64m my-app

--tmpfs stvara privremeni zapisivi mont za direktorije poput /tmp i /var/run. Zastavica noexec sprječava izvršavanje s tog monta. Ovaj pristup prisiljava napadače da se kreću kroz zapisive direktorije, koje možete nadzirati.

Korak 4: Primijenite ograničenja resursa s cgroups

Neograničeni kontejneri mogu izvršiti napade uskraćivanjem usluge iscrpljivanjem memorije ili CPU-a hosta. Koristite Dockerova ograničenja izvođenja:

docker run --memory=512m --memory-swap=512m --cpus=0.5 --pids-limit=100 my-app
  • --memory i --memory-swap postavljaju tvrda ograničenja (bez zamjene).
  • --cpus ograničava CPU.
  • --pids-limit sprječava fork bombe ograničavanjem broja procesa.

Upozorenje: Ograničenja resursa provode cgroups, ali ne sprječavaju istjecanje podataka putem mreže. Kombinirajte s mrežnom izolacijom (sljedeći korak).

Korak 5: Segmentirajte mreže prilagođenim Docker mrežama

Prema zadanim postavkama, Docker kontejneri dijele mostnu mrežu. U postavci s više stanara, morate izolirati mrežni stog svakog stanara. Stvorite namjensku mrežu po stanaru:

docker network create tenant-alpha --internal
docker run --network tenant-alpha my-app

Koristite zastavicu --internal za blokiranje odlaznog pristupa internetu, zatim izložite samo potrebne portove putem -p. Za napredniju segmentaciju mreže, razmotrite osiguranje web aplikacija Docker izolacijom.

Upozorenje: Interne mreže sprječavaju izravnu komunikaciju između kontejnera među stanarima, ali DNS curenje se i dalje može dogoditi ako koristite host mrežu. Držite se mostnih ili overlay mreža.

Korak 6: Primijenite seccomp i AppArmor profile

Seccomp filtrira sistemske pozive, a AppArmor (ili SELinux) provodi obavezne kontrole pristupa. Docker pruža zadani seccomp profil koji blokira opasne sistemske pozive poput clone s određenim zastavicama. Za strožu izolaciju, stvorite prilagođeni profil:

docker run --security-opt seccomp=./custom.json --security-opt apparmor=docker-default my-app

Možete generirati osnovni profil s docker run --rm -it --security-opt seccomp=unconfined my-app strace -c -S time i zatim ga smanjiti. Upozorenje: Previše restriktivni profili mogu pokvariti legitimnu funkcionalnost. Temeljito testirajte u pripremnom okruženju.

Korak 7: Razmotrite hibridnu izolaciju s virtualnim strojevima

Ako vaši stanari zahtijevaju apsolutnu izolaciju (npr. regulirana industrija), pokrenite kontejnere unutar laganog VM-a. Alati poput Sysbox ili Kata Containers pružaju odvajanje na razini hardvera bez žrtvovanja brzine kontejnera. Ovo je pristup koji koristi Dockerova Enhanced Container Isolation (ECI). Iako je režijski trošak veći od golih kontejnera, znatno je manji od punih VM-ova po radnom opterećenju.

Za više o odabiru prave razine izolacije, pročitajte dizajniranje višestanarske Docker arhitekture.

Sve zajedno: Popis za provjeru otvrđivanja

  1. Izgradite kontejnere s korisnikom bez root privilegija.
  2. Uklonite sve sposobnosti, dodajte samo potrebne.
  3. Montirajte datotečni sustav samo za čitanje s privremenim zapisivim montovima.
  4. Postavite ograničenja memorije, CPU-a i PID-a.
  5. Stvorite izolirane Docker mreže po stanaru.
  6. Primijenite prilagođene seccomp i AppArmor profile.
  7. Procijenite hibridne VM kontejnere za visoke sigurnosne potrebe.

Zaključak

Otvrđivanje kontejnera nije jednokratni zadatak – to je stalna disciplina. Gore navedeni koraci čine sigurnosnu osnovu za hosting s više stanara. Upamtite da nijedna pojedinačna mjera ne jamči sigurnost; obrana u dubini je ključna. Počnite s osnovama: korisnici bez root privilegija i uklonjene sposobnosti. Zatim dodajte ograničenja resursa i mrežnu segmentaciju. Za najosjetljivija radna opterećenja, kombinirajte kontejnere s VM-ovima. Uz ovaj vodič, možete pouzdano implementirati višestanarska Docker okruženja koja su i učinkovita i sigurna.

Sources (5)