Blog
Een praktische Docker-isolatiebeveiligingschecklist voor multi-tenant hosting
Beveilig uw multi-tenant Docker-hosting met deze praktische checklist die non-root-gebruikers, capabilities, seccomp, user namespaces, resource limits en read-only filesystems behandelt.
Samenvatting
Multi-tenant Docker-hosting vereist sterke isolatie om container-ontsnappingen te voorkomen. Dit artikel biedt een praktische beveiligingschecklist met zes kerngebieden: uitvoeren als non-root, capabilities verwijderen, seccomp-profielen toepassen, user namespace remapping inschakelen, resource limits instellen en read-only root filesystems gebruiken. Elke stap bevat een concreet configuratievoorbeeld voor Docker Compose. U leert ook veelgemaakte valkuilen zoals kernelcompatibiliteitsproblemen met user namespaces en prestatietrade-offs bij het toepassen van seccomp. Door deze checklist te volgen, kunt u het aanvalsoppervlak aanzienlijk verkleinen zonder onnodige complexiteit toe te voegen. Het artikel sluit af met een aanbevolen basisconfiguratie voor productieomgevingen met meerdere tenants.
Als u een multi-tenant Docker-omgeving beheert, houdt het spook van een containerontsnappingsaanval u 's nachts wakker. Eén kernel-exploit kan uit een container ontsnappen en een aanvaller ongehinderde toegang geven tot de host en alle gegevens van andere tenants. Hoewel Docker krachtige isolatieprimitieven biedt—namespaces, cgroups en capabilities—laten verkeerde configuraties gaten vallen. Dit artikel presenteert een stapsgewijze beveiligingschecklist die u vandaag nog kunt toepassen. Elke stap bevat een werkend Docker Compose-fragment en belangrijke kanttekeningen. Aan het einde heeft u een geharde basisconfiguratie die beveiliging en prestaties in balans brengt.
1. Containers uitvoeren als een niet-root gebruiker
Standaard worden containers uitgevoerd als root binnen de container. Als een aanvaller root in de container krijgt, heeft hij een voorsprong bij het ontsnappen. Definieer altijd een niet-root gebruiker in uw Dockerfile.
FROM alpine:3.18
RUN addgroup -S appgroup && adduser -S appuser -G appgroup
USER appuser
In Compose kunt u de gebruiker ook direct instellen:
services:
app:
image: myapp
user: "1000:1000"
Let op: Sommige toepassingen hebben root nodig voor legitieme bewerkingen (bijv. binden aan poorten onder 1024). Gebruik CAP_NET_BIND_SERVICE in plaats van de hele container als root uit te voeren. Voor een diepere blik op isolatiegrondslagen, zie onze gids over het bereiken van echte multi-tenant isolatie in Docker.
2. Verwijder alle capabilities en voeg alleen toe wat nodig is
Linux-capabilities geven containers fijnmazige privileges. Standaard kent Docker een set capabilities toe. Verwijder alles en verleen alleen de vereiste.
services:
app:
image: myapp
cap_drop:
- ALL
cap_add:
- NET_BIND_SERVICE # indien nodig
Let op: Capabilities zoals SYS_ADMIN of NET_RAW zijn zelden nodig. Controleer uw toepassing om de minimale set te bepalen. Het verwijderen van alle capabilities blokkeert veel ontsnappingsvectoren.
3. Pas een seccomp-profiel toe
Seccomp (secure computing mode) filtert systeemaanroepen die beschikbaar zijn voor een container. Docker wordt geleverd met een standaard seccomp-profiel dat gevaarlijke systeemoproepen zoals clone met bepaalde vlaggen blokkeert. U kunt het verder aanpassen.
services:
app:
image: myapp
security_opt:
- seccomp=/path/to/custom-profile.json
Een gehard profiel kan unshare, ptrace en mount blokkeren. Begin met de standaard van Docker en beperk verder. Let op: Te strikte profielen kunnen toepassingen breken. Test grondig in een staging-omgeving. Lees voor meer informatie over verdediging tegen containerontsnapping verdedigen tegen containerontsnapping.
4. Schakel user namespace remapping in
User namespaces wijzen de rootgebruiker van de container toe aan een niet-geprivilegieerde hostgebruiker. Dit betekent dat zelfs als een aanvaller root krijgt in de container, hij geen speciale privileges heeft op de host.
Schakel het in op de Docker-daemon door /etc/docker/daemon.json te bewerken:
{
"userns-remap": "default"
}
Start vervolgens Docker opnieuw. Let op: User namespace remapping heeft twee nadelen: het breekt volumemounts wanneer niet zorgvuldig geconfigureerd (bestanden zijn eigendom van de heringedeelde gebruiker) en is incompatibel met sommige opslagstuurprogramma's zoals overlay2 op oudere kernels. Test grondig.
5. Stel resource limits in met cgroups
Resource limits voorkomen dat een gecompromitteerde container een denial-of-service-aanval op de host uitvoert. Gebruik cgroups om CPU, geheugen en schijf-I/O te begrenzen.
services:
app:
image: myapp
deploy:
resources:
limits:
cpus: '0.5'
memory: 512M
Voor Docker Compose v3 gebruikt u de deploy-sectie (werkt met swarm of compose v2). Voor gewone Docker gebruikt u --memory en --cpus. Let op: Te lage limieten kunnen OOM-kills veroorzaken. Monitor het gebruik en pas aan.
6. Gebruik een read-only root filesysteem
Een read-only root filesysteem voorkomt dat aanvallers kwaadaardige binaries schrijven of configuratiebestanden in de container wijzigen.
services:
app:
image: myapp
read_only: true
tmpfs:
- /tmp:noexec,nosuid,size=64m
Mount tmpfs op directories die schrijftoegang nodig hebben (zoals /tmp). Dit dwingt alle schrijfbare gegevens af om tijdelijk te zijn. Let op: Sommige toepassingen vereisen persistente opslag; gebruik named volumes daarvoor.
Veelgemaakte valkuilen
- Kernelcompatibiliteit: User namespace remapping en sommige seccomp-regels vereisen een recente Linux-kernel (4.14+). Controleer uw kernelversie.
- Prestatie-impact: Seccomp en user namespaces voegen een kleine overhead toe, maar dit is verwaarloosbaar voor de meeste workloads. Benchmark uw specifieke app.
- Complexiteit: Het in één keer toevoegen van alle zes maatregelen kan dingen breken. Pas ze één voor één toe, test elke wijziging.
Voor een breder beeld van orchestratiepatronen, zie onze gids over het ontwerpen van een multi-tenant Docker-architectuur.
Conclusie
Een veilige multi-tenant Docker-host vereist geen exotische hulpmiddelen—alleen correct gebruik van de ingebouwde functies van Docker. Begin met een niet-root gebruiker, verwijder alle capabilities, pas een seccomp-profiel toe, schakel user namespace remapping in, stel resource limits in en gebruik een read-only filesysteem. Deze checklist vormt een sterke basis die de meest voorkomende ontsnappingstechnieken blokkeert. Voer na implementatie beveiligingstools uit zoals docker-bench-security om uw configuratie te verifiëren. Onthoud: beveiliging is een proces, geen product. Naarmate er nieuwe kernelkwetsbaarheden opduiken, herzie uw instellingen. Voor geautomatiseerde landingspagina's die uw hostingdienst presenteren, gebruikt u Pagenza om uw site binnen enkele minuten live te zetten.
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

