Блог
Praktična Docker sigurnosna lista za izolaciju u višekorisničkom hostingu
Osigurajte svoj višekorisnički Docker hosting ovom praktičnom listom koja pokriva korisnike koji nisu root, mogućnosti, seccomp, korisničke imenske prostore, ograničenja resursa i samo za čitanje datotečne sisteme.
Sažetak
Višekorisnički Docker hosting zahteva snažnu izolaciju kako bi se sprečila bekstva iz kontejnera. Ovaj članak pruža praktičnu sigurnosnu listu koja pokriva šest ključnih oblasti: rad kao ne-root, uklanjanje mogućnosti, primena seccomp profila, omogućavanje preslikavanja korisničkih imenskih prostora, postavljanje ograničenja resursa i korišćenje samo za čitanje korenskih datotečnih sistema. Svaki korak uključuje konkretan primer konfiguracije za Docker Compose. Takođe ćete naučiti uobičajene zamke poput problema sa kompatibilnošću kernela sa korisničkim imenskim prostorima i kompromisa u performansama pri primeni seccomp-a. Prateći ovu listu, možete značajno smanjiti napadnu površinu bez dodavanja nepotrebne složenosti. Članak se završava preporučenom osnovnom konfiguracijom za produkcijska višekorisnička okruženja.
Ako vodite višekorisničko Docker okruženje, sablast napada bekstva iz kontejnera ne da vam mira noću. Jedan eksploatisanje kernela može izaći iz kontejnera i dati napadaču neograničen pristup hostu i podacima svih drugih korisnika. Iako Docker pruža snažne primitive izolacije—imenske prostore, cgroups i mogućnosti—pogrešna konfiguracija ostavlja praznine. Ovaj članak predstavlja korak-po-korak sigurnosnu listu koju možete primeniti danas. Svaki korak uključuje radni isečak Docker Compose i ključna upozorenja. Na kraju ćete imati otvrdnutu osnovu koja balansira sigurnost i performanse.
1. Pokretanje kontejnera kao korisnik koji nije root
Kontejneri podrazumevano rade kao root unutar kontejnera. Ako napadač stekne root u kontejneru, ima prednost za bekstvo. Uvek definišite korisnika koji nije root u vašem Dockerfile-u.
FROM alpine:3.18
RUN addgroup -S appgroup && adduser -S appuser -G appgroup
USER appuser
U Compose-u, takođe možete direktno postaviti korisnika:
services:
app:
image: myapp
user: "1000:1000"
Upozorenje: Neke aplikacije zahtevaju root za legitimne operacije (npr. vezivanje za portove ispod 1024). Koristite CAP_NET_BIND_SERVICE umesto da pokrećete ceo kontejner kao root. Za dublji uvid u osnove izolacije, pogledajte naš vodič o postizanju istinske višekorisničke izolacije u Docker-u.
2. Uklonite sve mogućnosti i dodajte samo ono što je potrebno
Linux mogućnosti daju kontejnerima fino-granulisane privilegije. Podrazumevano, Docker dodeljuje skup mogućnosti. Uklonite sve i dodelite samo one koje su potrebne.
services:
app:
image: myapp
cap_drop:
- ALL
cap_add:
- NET_BIND_SERVICE # if needed
Upozorenje: Mogućnosti poput SYS_ADMIN ili NET_RAW retko su potrebne. Revidirajte svoju aplikaciju da odredite minimalni skup. Uklanjanjem svih mogućnosti blokirate mnoge vektore bekstva.
3. Primena seccomp profila
Seccomp (sigurnosni režim računanja) filtrira sistemske pozive dostupne kontejneru. Docker dolazi sa podrazumevanim seccomp profilom koji blokira opasne sistemske pozive poput clone sa određenim zastavicama. Možete ga dodatno prilagoditi.
services:
app:
image: myapp
security_opt:
- seccomp=/path/to/custom-profile.json
Otvrdnuti profil može blokirati unshare, ptrace, i mount. Počnite sa Dockerovim podrazumevanim i dodatno ograničite. Upozorenje: Previše strogi profili mogu slomiti aplikacije. Testirajte temeljno u okruženju za testiranje. Više o odbrani od bekstva iz kontejnera pročitajte u odbrana od bekstva iz kontejnera.
4. Omogućite preslikavanje korisničkog imenskog prostora
Korisnički imenski prostori preslikavaju root korisnika kontejnera na neprivilegovanog korisnika hosta. To znači da čak i ako napadač stekne root unutar kontejnera, nema posebne privilegije na hostu.
Omogućite na Docker demonu uređivanjem /etc/docker/daemon.json:
{
"userns-remap": "default"
}
Zatim ponovo pokrenite Docker. Upozorenje: Preslikavanje korisničkog imenskog prostora ima dva nedostatka: kvari montiranje volumena kada nije pažljivo konfigurisano (datoteke su u vlasništvu preslikanog korisnika) i nekompatibilno je sa nekim drajverima skladišta poput overlay2 na starijim kernelima. Testirajte temeljno.
5. Postavljanje ograničenja resursa pomoću cgroups
Ograničenja resursa sprečavaju kompromitovani kontejner da pokrene napad uskraćivanja usluge na host. Koristite cgroups da ograničite CPU, memoriju i I/O diska.
services:
app:
image: myapp
deploy:
resources:
limits:
cpus: '0.5'
memory: 512M
Za Docker Compose v3, koristite deploy sekciju (radi sa swarm ili compose v2). Za običan Docker, koristite --memory i --cpus. Upozorenje: Postavljanje granica prenisko može izazvati OOM ubijanja. Pratite upotrebu i prilagodite.
6. Korišćenje samo za čitanje korenskog datotečnog sistema
Samo za čitanje korenski datotečni sistem sprečava napadače da upisuju zlonamerne binarne datoteke ili menjaju konfiguracione datoteke unutar kontejnera.
services:
app:
image: myapp
read_only: true
tmpfs:
- /tmp:noexec,nosuid,size=64m
Montirajte tmpfs na direktorijume kojima je potreban upis (poput /tmp). Ovo tera sve podatke za upis da budu prolazni. Upozorenje: Neke aplikacije zahtevaju trajno skladište; koristite imenovane volumene za to.
Uobičajene zamke
- Kompatibilnost kernela: Preslikavanje korisničkog imenskog prostora i neka seccomp pravila zahtevaju noviji Linux kernel (4.14+). Proverite verziju kernela.
- Uticaj na performanse: Seccomp i korisnički imenski prostori dodaju mali režijski trošak, ali je zanemarljiv za većinu opterećenja. Izmerite performanse svoje specifične aplikacije.
- Složenost: Dodavanje svih šest mera odjednom može pokvariti stvari. Primenjujte ih jednu po jednu, testirajte svaku promenu.
Za širi pregled obrazaca orkestracije, pogledajte naš vodič o dizajniranju višekorisničke Docker arhitekture.
Zaključak
Siguran višekorisnički Docker host ne zahteva egzotične alate—samo pravilnu upotrebu Dockerovih ugrađenih funkcija. Počnite sa ne-root korisnikom, uklonite sve mogućnosti, primenite seccomp profil, omogućite preslikavanje korisničkog imenskog prostora, postavite ograničenja resursa i koristite samo za čitanje datotečni sistem. Ova lista čini snažnu osnovu koja blokira najčešće tehnike bekstva. Nakon implementacije, pokrenite sigurnosne alate poput docker-bench-security da proverite konfiguraciju. Zapamtite: sigurnost je proces, a ne proizvod. Kako se pojavljuju nove ranjivosti kernela, preispitajte svoja podešavanja. Za automatske odredišne stranice koje prikazuju vašu hosting uslugu, koristite Pagenza da vaš sajt bude uživo za nekoliko minuta.
Sources (5)
- Docker and Container Isolation
- Chapter 2. Container Hosts and Multi-tenancy | Container Security Guide | OpenShift Container Platform | 3.6 | Red Hat Documentation
- What is Container Escape? - Aqua Security
- Container escape vulnerabilities allow attackers to break out of isolated environments and gain unauthorized access to host systems.
- Enhanced Container Isolation - Docker Docs

