Blogg
Hårda Docker-containrar för multi-tenant-hosting: En steg-för-steg-guide för isolering
Lär dig hur du låser ner Docker-containrar för multi-tenant-miljöer med praktiska säkerhetsåtgärder som icke-rootanvändare, borttagna kapaciteter, skrivskyddade filsystem och nätverksisolering.

Sammanfattning
En multi-tenant Docker-hostingsplattform kräver lufttät containerisolering för att förhindra att hyresgäster stör varandra eller rymmer till värden. Denna guide levererar en konkret, steg-för-steg-härdningsprocess du kan tillämpa idag. Du lär dig att konfigurera icke-rootanvändare, ta bort onödiga Linux-kapaciteter, montera filsystem som skrivskyddade, införa resursbegränsningar via cgroups, segmentera nätverk och tillämpa seccomp- eller AppArmor-profiler. Vi kommer också att täcka när man ska komplettera containrar med virtuella maskiner för maximal säkerhet. I slutet har du en checklista för att systematiskt eliminera vanliga containerrymningsvektorer och hålla din multi-tenant-infrastruktur verkligt isolerad.
Det verkliga problemet med multi-tenant-containrar
Docker-containrar delar värdens kernel, och om isolering är felkonfigurerad kan en hyresgäst teoretiskt komma åt en annans data, förbruka all CPU eller till och med bryta sig ut till värden. Som hostingleverantör behöver du lufttäta gränser utan att offra containerns prestandafördelar. Många team börjar med standardinställningar för Docker, som är designade för utveckling, inte produktion för multi-tenant. Den goda nyheten: med en systematisk härdningschecklista kan du låsa ner varje container till nästan VM-nivå av isolering samtidigt som du behåller Dockets hastighet.
Denna artikel går igenom varje härdningssteg med praktiska exempel och varningar. I slutet har du en repeterbar process för att distribuera säkra multi-tenant-containrar.
Steg 1: Kör containrar som icke-root
Som standard körs Docker-containrar som root. Om en container komprometteras får angriparen root-privilegier inuti containern och kan försöka rymma. Skapa först en dedikerad användare i din Dockerfile och växla till den:
FROM ubuntu:22.04
RUN useradd -m appuser
USER appuser
Varning: Vissa processer (t.ex. bindning till portar < 1024) kräver root. I sådana fall, använd flaggan --cap-add för att endast bevilja nödvändig kapacitet, som --cap-add=NET_BIND_SERVICE, och kör fortfarande processen under en icke-rootanvändare.
För mer om grundläggande isolering, se vår guide om att uppnå verklig multi-tenant-isolering i Docker.
Steg 2: Ta bort alla Linux-kapaciteter och lägg endast tillbaka vad du behöver
Linux-kapaciteter delar upp root-privilegier i små enheter. Docker-containrar kommer med en standarduppsättning av kapaciteter som är för tillåtande för multi-tenant-hosting. Ta bort alla och lägg endast tillbaka vad din applikation kräver:
docker run --cap-drop=ALL --cap-add=NET_BIND_SERVICE my-app
Vanliga kapaciteter att undvika: SYS_ADMIN (containerrymning), NET_RAW (paketavlyssning), SYS_PTRACE (processfelsökning). Använd docker run med --security-opt no-new-privileges för att förhindra privilegieeskalering via setuid-binärer.
Steg 3: Montera rotfilsystemet som skrivskyddat
Angripare skriver ofta skadliga skript till containerfilsystemet. Genom att göra rotfilsystemet skrivskyddat förhindrar du det:
docker run --read-only --tmpfs /tmp:rw,noexec,nosuid,size=64m my-app
--tmpfs skapar en tillfällig skrivbar montering för kataloger som /tmp och /var/run. Flaggan noexec förhindrar exekvering från den monteringen. Detta tillvägagångssätt tvingar angripare att navigera genom skrivbara kataloger, vilket du kan övervaka.
Steg 4: Inför resursbegränsningar med cgroups
Obegränsade containrar kan utföra överbelastningsattacker genom att förbruka värdens minne eller CPU. Använd Dockets runtime-begränsningar:
docker run --memory=512m --memory-swap=512m --cpus=0.5 --pids-limit=100 my-app
--memoryoch--memory-swapsätter hårda gränser (ingen swap).--cpusbegränsar CPU.--pids-limitförhindrar fork-bomber genom att begränsa antalet processer.
Varning: Resursbegränsningar tillämpas av cgroups, men de förhindrar inte dataexfiltration via nätverk. Kombinera med nätverksisolering (nästa steg).
Steg 5: Segmentera nätverk med anpassade Docker-nätverk
Som standard delar Docker-containrar ett bridge-nätverk. I en multi-tenant-installation måste du isolera varje hyresgästs nätverksstack. Skapa ett dedikerat nätverk per hyresgäst:
docker network create tenant-alpha --internal
docker run --network tenant-alpha my-app
Använd flaggan --internal för att blockera utgående internetåtkomst, exponera sedan endast nödvändiga portar via -p. För mer avancerad nätverkssegmentering, överväg att säkra webbappar med Docker-isolering.
Varning: Interna nätverk förhindrar direkt container-till-container-kommunikation över hyresgäster, men DNS-läckor kan fortfarande uppstå om du använder host-nätverk. Håll dig till bridge- eller overlay-nätverk.
Steg 6: Tillämpa Seccomp- och AppArmor-profiler
Seccomp filtrerar systemanrop, och AppArmor (eller SELinux) tillämpar obligatoriska åtkomstkontroller. Docker tillhandahåller en standard seccomp-profil som blockerar farliga systemanrop som clone med vissa flaggor. För strängare isolering, skapa en anpassad profil:
docker run --security-opt seccomp=./custom.json --security-opt apparmor=docker-default my-app
Du kan generera en basprofil med docker run --rm -it --security-opt seccomp=unconfined my-app strace -c -S time och sedan beskära. Varning: Alltför restriktiva profiler kan bryta legitim funktionalitet. Testa noggrant i staging.
Steg 7: Överväg hybridisolering med virtuella maskiner
Om dina hyresgäster kräver absolut isolering (t.ex. reglerad industri), kör containrar inuti en lättvikts-VM. Verktyg som Sysbox eller Kata Containers ger hårdvarunivåseparering utan att offra containerhastighet. Detta är tillvägagångssättet som används av Dockets Enhanced Container Isolation (ECI). Även om omkostnaderna är högre än för bare containrar, är de långt lägre än fulla VMs per arbetsbelastning.
För mer om att välja rätt isoleringsnivå, läs designa en multi-tenant Docker-arkitektur.
Sammanfattning: En härdningschecklista
- Bygg containrar med icke-rootanvändare.
- Ta bort alla kapaciteter, lägg endast till nödvändiga.
- Montera filsystemet skrivskyddat med tillfälliga skrivbara monteringar.
- Sätt minnes-, CPU- och PID-gränser.
- Skapa isolerade Docker-nätverk per hyresgäst.
- Tillämpa anpassade seccomp- och AppArmor-profiler.
- Utvärdera hybrid-VM-containrar för hög säkerhet.
Slutsats
Containerhärdning är inte en engångsuppgift – det är en pågående disciplin. Stegen ovan utgör en säkerhetsbaslinje för multi-tenant-hosting. Kom ihåg att ingen enskild åtgärd garanterar säkerhet; försvar på djupet är nyckeln. Börja med grunderna: icke-rootanvändare och borttagna kapaciteter. Lägg sedan på resursgränser och nätverkssegmentering. För de mest känsliga arbetsbelastningarna, kombinera containrar med VM:ar. Med denna guide kan du tryggt distribuera multi-tenant Docker-miljöer som är både effektiva och säkra.
