Blogg
En praktisk Docker-isoleringssäkerhetschecklista för flerklienthosting
Säkra din flerklient-Dockerhosting med denna praktiska checklista som täcker icke-rootanvändare, capabilities, seccomp, användarnamnrymder, resursgränser och skrivskyddade filsystem.
Sammanfattning
Multi-tenant Docker-värd kräver stark isolering för att förhindra containerflykter. Denna artikel ger en praktisk säkerhetschecklista som täcker sex nyckelområden: kör som icke-root, ta bort capabilities, använd seccomp-profiler, aktivera användarnamnrymdmappning, sätt resursgränser och använd skrivskyddade rotfilsystem. Varje steg innehåller ett konkret konfigurationsexempel för Docker Compose. Du kommer också att lära dig vanliga fallgropar som kompatibilitetsproblem med kernel för användarnamnrymder och prestandaavvägningar vid tillämpning av seccomp. Genom att följa denna checklista kan du avsevärt minska attackytan utan att lägga till onödig komplexitet. Artikeln avslutas med en rekommenderad baslinjekonfiguration för produktionsmiljöer med flera klienter.
Om du driver en multi-tenant Docker-miljö håller spöket av en containerflyktsattack dig vaken om nätterna. En enda kernel-exploit kan bryta sig ur en container och ge en angripare obegränsad åtkomst till värden och alla andra klienters data. Medan Docker tillhandahåller kraftfulla isoleringsprimitiver – namnområden, cgroups och capabilities – lämnar felkonfiguration luckor. Denna artikel presenterar en steg-för-steg säkerhetschecklista som du kan tillämpa idag. Varje steg innehåller ett fungerande Docker Compose-utdrag och viktiga varningar. I slutet har du en härdad baslinje som balanserar säkerhet och prestanda.
1. Kör containrar som en icke-root-användare
Containrar körs som standard som root inuti containern. Om en angripare får root i containern har de ett försprång att fly. Definiera alltid en icke-root-användare i din Dockerfile.
FROM alpine:3.18
RUN addgroup -S appgroup && adduser -S appuser -G appgroup
USER appuser
I Compose kan du också ställa in användaren direkt:
services:
app:
image: myapp
user: "1000:1000"
Varning: Vissa applikationer kräver root för legitima operationer (t.ex. bindning till portar under 1024). Använd CAP_NET_BIND_SERVICE istället för att köra hela containern som root. För en djupare titt på isoleringsgrunder, se vår guide om att uppnå verklig multi-tenant-isolering i Docker.
2. Ta bort alla capabilities och lägg endast till det som behövs
Linux-capabilities ger containrar finkorniga rättigheter. Som standard beviljar Docker en uppsättning capabilities. Ta bort allt och bevilja endast de som krävs.
services:
app:
image: myapp
cap_drop:
- ALL
cap_add:
- NET_BIND_SERVICE # if needed
Varning: Capabilities som SYS_ADMIN eller NET_RAW behövs sällan. Granska din applikation för att bestämma minimiuppsättningen. Att ta bort alla capabilities blockerar många flyktvektorer.
3. Använd en seccomp-profil
Seccomp (secure computing mode) filtrerar systemanrop som är tillgängliga för en container. Docker levereras med en standard seccomp-profil som blockerar farliga syscalls som clone med vissa flaggor. Du kan anpassa den ytterligare.
services:
app:
image: myapp
security_opt:
- seccomp=/path/to/custom-profile.json
En härdad profil kan blockera unshare, ptrace och mount. Börja med Dockets standard och begränsa mer. Varning: Alltför strikta profiler kan bryta applikationer. Testa noggrant i en staging-miljö. För mer om containerflyktsförsvar, läs försvar mot containerflykt.
4. Aktivera användarnamnrymdmappning
Användarnamnrymder mappar containerns root-användare till en oprivilegierad värdanvändare. Detta innebär att även om en angripare får root i containern har de inga särskilda rättigheter på värden.
Aktivera det på Docker-demonen genom att redigera /etc/docker/daemon.json:
{
"userns-remap": "default"
}
Starta sedan om Docker. Varning: Användarnamnrymdmappning har två nackdelar: det bryter volymmonteringar när de inte konfigureras noggrant (filer ägs av den omappade användaren) och är inkompatibelt med vissa lagringsenheter som overlay2 på äldre kärnor. Testa noggrant.
5. Sätt resursgränser med cgroups
Resursgränser förhindrar en komprometterad container från att starta en överbelastningsattack mot värden. Använd cgroups för att begränsa CPU, minne och disk-I/O.
services:
app:
image: myapp
deploy:
resources:
limits:
cpus: '0.5'
memory: 512M
För Docker Compose v3, använd deploy-sektionen (fungerar med swarm eller compose v2). För vanlig Docker, använd --memory och --cpus. Varning: Att sätta gränser för lågt kan orsaka OOM-dödningar. Övervaka användning och justera därefter.
6. Använd skrivskyddat rotfilsystem
Ett skrivskyddat rotfilsystem förhindrar angripare från att skriva skadliga binärer eller ändra konfigurationsfiler inuti containern.
services:
app:
image: myapp
read_only: true
tmpfs:
- /tmp:noexec,nosuid,size=64m
Montera tmpfs på kataloger som behöver skrivåtkomst (som /tmp). Detta tvingar all skrivbar data att vara flyktig. Varning: Vissa applikationer kräver beständig lagring; använd namngivna volymer för det.
Vanliga fallgropar
- Kernel-kompatibilitet: Användarnamnrymdmappning och vissa seccomp-regler kräver en ny Linux-kernel (4.14+). Kontrollera din kernelversion.
- Prestandapåverkan: Seccomp och användarnamnrymder tillför en liten overhead, men den är försumbar för de flesta arbetsbelastningar. Benchmarka din specifika app.
- Komplexitet: Att lägga till alla sex åtgärder på en gång kan bryta saker. Tillämpa dem en i taget, testa varje förändring.
För en bredare bild av orkestreringsmönster, se vår guide om att designa en multi-tenant Docker-arkitektur.
Slutsats
En säker multi-tenant Docker-värd kräver inga exotiska verktyg – bara korrekt användning av Dockets inbyggda funktioner. Börja med en icke-root-användare, ta bort alla capabilities, använd en seccomp-profil, aktivera användarnamnrymdmappning, sätt resursgränser och använd ett skrivskyddat filsystem. Denna checklista utgör en stark baslinje som blockerar de vanligaste flyktteknikerna. Efter implementering, kör säkerhetsverktyg som docker-bench-security för att verifiera din konfiguration. Kom ihåg: säkerhet är en process, inte en produkt. När nya kernel-sårbarheter upptäcks, se över dina inställningar. För automatiserade målsidor som visar upp din hostingtjänst, använd Pagenza för att få din webbplats live på några minuter.
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

