Blog
Praktický bezpečnostní kontrolní seznam izolace Dockeru pro víceklientové hostování
Zabezpečte své víceklientové hostování Dockeru pomocí tohoto praktického kontrolního seznamu, který pokrývá nerootové uživatele, schopnosti (capabilities), seccomp, jmenné prostory uživatelů, omezení zdrojů a souborové systémy pouze pro čtení.
Shrnutí
Víceklientové hostování Dockeru vyžaduje silnou izolaci, aby se zabránilo únikům z kontejnerů. Tento článek poskytuje praktický bezpečnostní kontrolní seznam pokrývající šest klíčových oblastí: běh jako nerootový uživatel, odebrání schopností (capabilities), použití profilů seccomp, povolení přemapování jmenných prostorů uživatelů, nastavení omezení zdrojů a použití kořenových souborových systémů pouze pro čtení. Každý krok obsahuje konkrétní příklad konfigurace pro Docker Compose. Dozvíte se také běžné nástrahy, jako jsou problémy s kompatibilitou jádra u jmenných prostorů uživatelů a kompromisy v výkonu při použití seccomp. Dodržováním tohoto kontrolního seznamu můžete výrazně snížit útočnou plochu, aniž byste přidávali zbytečnou složitost. Článek končí doporučenou základní konfigurací pro produkční víceklientová prostředí.
Pokud provozujete víceklientové prostředí Dockeru, přízrak útoku úniku z kontejneru vám nedá spát. Jeden exploit jádra může proniknout z kontejneru a poskytnout útočníkovi neomezený přístup k hostiteli a datům všech ostatních tenantů. I když Docker poskytuje výkonné primitivy izolace – jmenné prostory, cgroups a schopnosti – chybná konfigurace zanechává mezery. Tento článek představuje krok za krokem bezpečnostní kontrolní seznam, který můžete použít ještě dnes. Každý krok obsahuje funkční ukázku Docker Compose a klíčová upozornění. Na konci budete mít zesílenou základní konfiguraci, která vyvažuje bezpečnost a výkon.
1. Spouštění kontejnerů jako nerootový uživatel
Kontejnery se standardně spouštějí jako root uvnitř kontejneru. Pokud útočník získá root v kontejneru, má náskok při úniku. Vždy definujte nerootového uživatele ve svém Dockerfile.
FROM alpine:3.18
RUN addgroup -S appgroup && adduser -S appuser -G appgroup
USER appuser
V Compose můžete také nastavit uživatele přímo:
services:
app:
image: myapp
user: "1000:1000"
Upozornění: Některé aplikace vyžadují root pro legitimní operace (např. bindování na porty pod 1024). Použijte CAP_NET_BIND_SERVICE místo spouštění celého kontejneru jako root. Pro hlubší pohled na základy izolace se podívejte na našeho průvodce dosažením skutečné víceklientové izolace v Dockeru.
2. Odebrání všech schopností a přidání pouze těch potřebných
Linuxové schopnosti (capabilities) poskytují kontejnerům jemně odstupňovaná oprávnění. Ve výchozím nastavení Docker uděluje sadu schopností. Odeberte vše a udělte pouze ty, které jsou vyžadovány.
services:
app:
image: myapp
cap_drop:
- ALL
cap_add:
- NET_BIND_SERVICE # pokud je potřeba
Upozornění: Schopnosti jako SYS_ADMIN nebo NET_RAW jsou málokdy potřeba. Auditováním aplikace určete minimální sadu. Odebrání všech schopností blokuje mnoho vektorů úniku.
3. Použití profilu Seccomp
Seccomp (secure computing mode) filtruje systémová volání dostupná kontejneru. Docker je dodáván s výchozím profilem seccomp, který blokuje nebezpečná systémová volání jako clone s určitými příznaky. Můžete ho dále přizpůsobit.
services:
app:
image: myapp
security_opt:
- seccomp=/path/to/custom-profile.json
Zesílený profil může blokovat unshare, ptrace a mount. Začněte s výchozím profilem Dockeru a více omezte. Upozornění: Příliš přísné profily mohou narušit aplikace. Důkladně testujte v testovacím prostředí. Další informace o obraně proti únikům z kontejnerů naleznete v článku obrana proti únikům z kontejnerů.
4. Povolení přemapování jmenných prostorů uživatelů
Jmenné prostory uživatelů mapují uživatele root v kontejneru na neprivilegovaného uživatele hostitele. To znamená, že i když útočník získá root uvnitř kontejneru, nemá na hostiteli žádná zvláštní oprávnění.
Povolte to v démonu Dockeru úpravou /etc/docker/daemon.json:
{
"userns-remap": "default"
}
Poté restartujte Docker. Upozornění: Přemapování jmenných prostorů uživatelů má dvě nevýhody: narušuje připojování svazků, pokud není pečlivě nakonfigurováno (soubory vlastní přemapovaný uživatel) a je nekompatibilní s některými ovladači úložiště, jako je overlay2 na starších jádrech. Důkladně testujte.
5. Nastavení omezení zdrojů pomocí Cgroups
Omezení zdrojů zabraňují napadenému kontejneru spustit útok odmítnutí služby proti hostiteli. Použijte cgroups k omezení CPU, paměti a diskového I/O.
services:
app:
image: myapp
deploy:
resources:
limits:
cpus: '0.5'
memory: 512M
Pro Docker Compose v3 použijte sekci deploy (funguje s swarm nebo compose v2). Pro prostý Docker použijte --memory a --cpus. Upozornění: Příliš nízká omezení může způsobit zabití kvůli nedostatku paměti (OOM). Sledujte využití a upravte podle potřeby.
6. Použití kořenového souborového systému pouze pro čtení
Kořenový souborový systém pouze pro čtení brání útočníkům v zápisu škodlivých binárek nebo úpravách konfiguračních souborů uvnitř kontejneru.
services:
app:
image: myapp
read_only: true
tmpfs:
- /tmp:noexec,nosuid,size=64m
Připojte tmpfs na adresáře, které potřebují zápis (např. /tmp). To vynutí, aby všechna zapisovatelná data byla dočasná. Upozornění: Některé aplikace vyžadují trvalé úložiště; použijte pro to pojmenované svazky.
Běžné nástrahy
- Kompatibilita jádra: Přemapování jmenných prostorů uživatelů a některá pravidla seccomp vyžadují recentní Linuxové jádro (4.14+). Zkontrolujte verzi jádra.
- Dopad na výkon: Seccomp a jmenné prostory uživatelů přidávají malou režii, která je pro většinu pracovních zátěží zanedbatelná. Změřte výkon své konkrétní aplikace.
- Složitost: Přidání všech šesti opatření najednou může způsobit problémy. Aplikujte je postupně, každou změnu otestujte.
Pro širší pohled na orchestrační vzory se podívejte na našeho průvodce návrhem víceklientové architektury Dockeru.
Závěr
Bezpečný víceklientový Docker hostitel nevyžaduje exotické nástroje – pouze správné použití vestavěných funkcí Dockeru. Začněte s nerootovým uživatelem, odeberte všechny schopnosti, použijte profil seccomp, povolte přemapování jmenných prostorů uživatelů, nastavte omezení zdrojů a použijte souborový systém pouze pro čtení. Tento kontrolní seznam tvoří silnou základní konfiguraci, která blokuje nejběžnější techniky úniku. Po implementaci spusťte bezpečnostní nástroje jako docker-bench-security pro ověření konfigurace. Pamatujte: bezpečnost je proces, ne produkt. Jakmile se objeví nové zranitelnosti jádra, přehodnoťte svá nastavení. Pro automatizované vstupní stránky, které předvádějí vaši hostingovou službu, použijte Pagenza a spusťte svůj web během minut.
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

