Blog
Praktický bezpečnostný kontrolný zoznam izolácie Docker pre multi-tenant hosting
Zabezpečte svoj multi-tenant Docker hosting pomocou tohto praktického kontrolného zoznamu, ktorý pokrýva používateľov iných ako root, schopnosti (capabilities), seccomp, menné priestory používateľov, obmedzenia zdrojov a súborové systémy iba na čítanie.
Zhrnutie
Multi-tenant Docker hosting vyžaduje silnú izoláciu, aby sa zabránilo únikom z kontajnerov. Tento článok poskytuje praktický bezpečnostný kontrolný zoznam pokrývajúci šesť kľúčových oblastí: spúšťanie ako iný ako root, odobratie schopností (capabilities), použitie seccomp profilov, povolenie presmerovania menných priestorov používateľov, nastavenie obmedzení zdrojov a používanie súborových systémov iba na čítanie pre koreňový adresár. Každý krok obsahuje konkrétny príklad konfigurácie pre Docker Compose. Dozviete sa tiež o bežných nástrahách, ako sú problémy s kompatibilitou jadra pri menných priestoroch používateľov a výkonnostné kompromisy pri aplikácii seccomp. Dodržaním tohto kontrolného zoznamu môžete výrazne znížiť útočnú plochu bez pridania zbytočnej zložitosti. Článok končí odporúčanou základnou konfiguráciou pre produkčné multi-tenant prostredia.
Ak prevádzkujete multi-tenant Docker prostredie, strašidlo útoku únikom z kontajnera vám nedá spať. Jedno zneužitie jadra môže preraziť kontajner a dať útočníkovi neobmedzený prístup k hostiteľovi a všetkým dátam ostatných tenantov. Hoci Docker poskytuje silné izolačné primitíva – menné priestory (namespaces), cgroups a schopnosti (capabilities) – nesprávna konfigurácia vytvára medzery. Tento článok predstavuje krok za krokom bezpečnostný kontrolný zoznam, ktorý môžete aplikovať dnes. Každý krok obsahuje funkčný úryvok Docker Compose a kľúčové upozornenia. Na konci budete mať vylepšenú základnú konfiguráciu, ktorá vyvažuje bezpečnosť a výkon.
1. Spúšťanie kontajnerov ako používateľ iný ako root
Kontajnery sa štandardne spúšťajú ako root vnútri kontajnera. Ak útočník získa root v kontajneri, má výhodu pri úniku. Vždy definujte používateľa iného ako root v Dockerfile.
FROM alpine:3.18
RUN addgroup -S appgroup && adduser -S appuser -G appgroup
USER appuser
V Compose môžete tiež nastaviť používateľa priamo:
services:
app:
image: myapp
user: "1000:1000"
Upozornenie: Niektoré aplikácie vyžadujú root pre legitímne operácie (napr. viazanie na porty pod 1024). Namiesto spúšťania celého kontajnera ako root použite CAP_NET_BIND_SERVICE. Pre hlbší pohľad na základy izolácie si pozrite nášho sprievodcu dosiahnutie skutočnej multi-tenant izolácie v Dockeri.
2. Odobratie všetkých schopností (capabilities) a pridanie iba potrebných
Linuxové schopnosti (capabilities) poskytujú kontajnerom jemnozrnné oprávnenia. Docker štandardne udeľuje sadu schopností. Odoberte všetky a povoľte iba tie potrebné.
services:
app:
image: myapp
cap_drop:
- ALL
cap_add:
- NET_BIND_SERVICE # ak je potrebné
Upozornenie: Schopnosti ako SYS_ADMIN alebo NET_RAW sú zriedka potrebné. Auditom vašej aplikácie určte minimálnu sadu. Odobratie všetkých schopností blokuje mnoho vektorov úniku.
3. Aplikácia seccomp profilu
Seccomp (secure computing mode) filtruje systémové volania dostupné pre kontajner. Docker obsahuje predvolený seccomp profil, ktorý blokuje nebezpečné systémové volania ako clone s určitými príznakmi. Môžete ho ďalej prispôsobiť.
services:
app:
image: myapp
security_opt:
- seccomp=/cesta/k/vlastnemu-profilu.json
Vylepšený profil môže blokovať unshare, ptrace a mount. Začnite s predvoleným profilom Docker a obmedzujte viac. Upozornenie: Príliš prísne profily môžu rozbiť aplikácie. Dôkladne testujte v testovacom prostredí. Viac o obrane proti únikom z kontajnerov si prečítajte v článku obrana proti úniku z kontajnera.
4. Povolenie presmerovania menných priestorov používateľov
Menné priestory používateľov mapujú root používateľa kontajnera na neprivilegovaného používateľa hostiteľa. To znamená, že aj keď útočník získa root v kontajneri, nemá na hostiteľovi žiadne špeciálne oprávnenia.
Povoľte to v Docker daemon úpravou /etc/docker/daemon.json:
{
"userns-remap": "default"
}
Potom reštartujte Docker. Upozornenie: Presmerovanie menných priestorov používateľov má dve nevýhody: rozbíja pripojené zväzky (volumes), ak nie sú nakonfigurované opatrne (súbory vlastní presmerovaný používateľ), a je nekompatibilné s niektorými ovládačmi úložiska ako overlay2 na starších jadrách. Dôkladne testujte.
5. Nastavenie obmedzení zdrojov pomocou cgroups
Obmedzenia zdrojov zabraňujú kompromitovanému kontajneru spustiť útok odmietnutia služby na hostiteľa. Použite cgroups na obmedzenie CPU, pamäte a I/O disku.
services:
app:
image: myapp
deploy:
resources:
limits:
cpus: '0.5'
memory: 512M
Pre Docker Compose v3 použite sekciu deploy (funguje so swarm alebo compose v2). Pre čistý Docker použite --memory a --cpus. Upozornenie: Príliš nízke limity môžu spôsobiť OOM zabitia. Monitorujte využitie a prispôsobte.
6. Použitie súborového systému iba na čítanie pre koreňový adresár
Súborový systém koreňového adresára iba na čítanie zabraňuje útočníkom písať škodlivé binárne súbory alebo meniť konfiguračné súbory vnútri kontajnera.
services:
app:
image: myapp
read_only: true
tmpfs:
- /tmp:noexec,nosuid,size=64m
Pripojte tmpfs na adresáre, ktoré potrebujú zapisovací prístup (napr. /tmp). To núti všetky zapisovateľné dáta byť efemérne. Upozornenie: Niektoré aplikácie vyžadujú trvalé úložisko; na to použite pomenované zväzky (named volumes).
Bežné nástrahy
- Kompatibilita jadra: Presmerovanie menných priestorov používateľov a niektoré seccomp pravidlá vyžadujú moderné Linuxové jadro (4.14+). Skontrolujte verziu jadra.
- Vplyv na výkon: Seccomp a menné priestory používateľov pridávajú malú réžiu, ale je zanedbateľná pre väčšinu pracovných zaťažení. Otestujte svoju konkrétnu aplikáciu.
- Zložitosť: Pridanie všetkých šiestich opatrení naraz môže veci rozbiť. Aplikujte ich jeden po druhom, každú zmenu testujte.
Pre širší pohľad na orchestračné vzory si pozrite nášho sprievodcu navrhovanie multi-tenant Docker architektúry.
Záver
Bezpečný multi-tenant Docker hostiteľ nevyžaduje exotické nástroje – iba správne používanie vstavaných funkcií Docker. Začnite s používateľom iným ako root, odoberte všetky schopnosti, aplikujte seccomp profil, povoľte presmerovanie menných priestorov používateľov, nastavte obmedzenia zdrojov a používajte súborový systém iba na čítanie. Tento kontrolný zoznam tvorí silný základ, ktorý blokuje najbežnejšie techniky úniku. Po implementácii spustite bezpečnostné nástroje ako docker-bench-security na overenie konfigurácie. Pamätajte: bezpečnosť je proces, nie produkt. Ako sa objavujú nové zraniteľnosti jadra, prehodnocujte svoje nastavenia. Pre automatizované vstupné stránky, ktoré prezentujú vašu hostingovú službu, použite Pagenza a spustite svoju stránku do pár minút.
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

