Blogi
Käytännön Docker-eristysturvallisuuden tarkistuslista monivuokraajaympäristöön
Suojaa monivuokraaja Docker-ympäristösi tällä käytännön tarkistuslistalla, joka kattaa ei-root-käyttäjät, kapasiteetit, seccomp:n, käyttäjä-nimiavaruudet, resurssirajat ja vain luku -tiedostojärjestelmät.
Yhteenveto
Monivuokraaja Docker-ympäristö vaatii vahvan eristyksen estääkseen konttipakenemiset. Tämä artikkeli tarjoaa käytännön turvallisuustarkistuslistan, joka kattaa kuusi keskeistä aluetta: aja ei-root-käyttäjänä, pudota kapasiteetit, käytä seccomp-profiileja, ota käyttäjä-nimiavaruuden uudelleenmappaus käyttöön, aseta resurssirajat ja käytä vain luku -juuritiedostojärjestelmää. Jokainen vaihe sisältää konkreettisen konfiguraatioesimerkin Docker Composelle. Opit myös yleisiä sudenkuoppia, kuten ytimen yhteensopivuusongelmia käyttäjä-nimiavaruuksien kanssa ja suorituskyvyn kompromisseja seccomp:n käytössä. Noudattamalla tätä tarkistuslistaa voit merkittävästi vähentää hyökkäyspinta-alaa lisäämättä tarpeetonta monimutkaisuutta. Artikkeli päättyy suositeltuun peruskonfiguraatioon tuotannon monivuokraajaympäristöille.
Jos ylläpidät monivuokraaja Docker-ympäristöä, konttipakenemishyökkäyksen haamu pitää sinut hereillä öisin. Yksi ytimen hyväksikäyttö voi murtautua ulos kontista ja antaa hyökkääjälle esteettömän pääsyn isäntään ja kaikkien muiden vuokralaisten tietoihin. Vaikka Docker tarjoaa tehokkaita eristysperuspalikoita – nimiavaruuksia, cgroup-ryhmiä ja kapasiteetteja – väärä konfigurointi jättää aukkoja. Tämä artikkeli esittelee vaiheittaisen turvallisuustarkistuslistan, jota voit soveltaa heti. Jokainen vaihe sisältää toimivan Docker Compose -pätkän ja keskeiset varoitukset. Lopuksi sinulla on kovetettu perustaso, joka tasapainottaa turvallisuuden ja suorituskyvyn.
1. Aja kontit ei-root-käyttäjänä
Kontit ajetaan oletuksena root-käyttäjänä kontin sisällä. Jos hyökkääjä saa root-oikeudet konttiin, hänellä on etumatka pakenemiseen. Määrittele aina ei-root-käyttäjä Dockerfilessäsi.
FROM alpine:3.18
RUN addgroup -S appgroup && adduser -S appuser -G appgroup
USER appuser
Composessa voit asettaa käyttäjän suoraan:
services:
app:
image: myapp
user: "1000:1000"
Varoitus: Jotkut sovellukset tarvitsevat root-oikeuksia laillisiin toimenpiteisiin (esim. porttien sitominen alle 1024). Käytä CAP_NET_BIND_SERVICE sen sijaan, että ajaisit koko kontin rootina. Katso tarkemmin eristyksen perusteista oppaastamme true multi-tenant isolation in Docker.
2. Pudota kaikki kapasiteetit ja lisää vain tarvittavat
Linux-kapasiteetit antavat konteille hienojakoisia oikeuksia. Oletuksena Docker myöntää joukon kapasiteetteja. Pudota kaikki ja myönnä vain tarvittavat.
services:
app:
image: myapp
cap_drop:
- ALL
cap_add:
- NET_BIND_SERVICE # jos tarvitaan
Varoitus: Kapasiteetteja kuten SYS_ADMIN tai NET_RAW tarvitaan harvoin. Tarkista sovelluksesi minimijoukon määrittämiseksi. Kaikkien kapasiteettien pudottaminen estää monia pakenemisvektoreita.
3. Käytä seccomp-profiilia
Seccomp (secure computing mode) suodattaa järjestelmäkutsuja, jotka ovat kontin käytettävissä. Dockerissa on oletusarvoinen seccomp-profiili, joka estää vaarallisia järjestelmäkutsuja kuten clone tietyillä lipuilla. Voit muokata sitä edelleen.
services:
app:
image: myapp
security_opt:
- seccomp=/path/to/custom-profile.json
Kovetettu profiili saattaa estää unshare, ptrace ja mount. Aloita Dockerin oletuksesta ja rajoita lisää. Varoitus: Liian tiukat profiilit voivat rikkoa sovelluksia. Testaa perusteellisesti testausympäristössä. Lue lisää konttipakenemispuolustuksesta artikkelista defending against container escape.
4. Ota käyttäjä-nimiavaruuden uudelleenmappaus käyttöön
Käyttäjä-nimiavaruudet mappaavat kontin root-käyttäjän etuoikeuttamattomaan isäntäkäyttäjään. Tämä tarkoittaa, että vaikka hyökkääjä saisi root-oikeudet kontin sisällä, hänellä ei ole erityisiä oikeuksia isännässä.
Ota se käyttöön Docker daemonissa muokkaamalla tiedostoa /etc/docker/daemon.json:
{
"userns-remap": "default"
}
Käynnistä Docker uudelleen. Varoitus: Käyttäjä-nimiavaruuden uudelleenmappauksella on kaksi haittapuolta: se rikkoo volyymien liitokset, jos niitä ei ole konfiguroitu huolellisesti (tiedostot kuuluvat uudelleenmapatulle käyttäjälle) ja se on yhteensopimaton joidenkin tallennusajureiden, kuten overlay2:n, kanssa vanhemmissa ytimissä. Testaa perusteellisesti.
5. Aseta resurssirajat cgroup-ryhmillä
Resurssirajat estävät vaarantunutta konttia käynnistämästä palvelunestohyökkäystä isäntää vastaan. Käytä cgroup-ryhmiä CPU:n, muistin ja levyn I/O:n rajoittamiseen.
services:
app:
image: myapp
deploy:
resources:
limits:
cpus: '0.5'
memory: 512M
Docker Compose v3:ssa käytä deploy-osiota (toimii swarm- tai compose v2:n kanssa). Tavallisessa Dockerissa käytä --memory ja --cpus. Varoitus: Liian alhaiset rajat voivat aiheuttaa OOM-tappoja. Seuraa käyttöä ja säädä vastaavasti.
6. Käytä vain luku -juuritiedostojärjestelmää
Vain luku -juuritiedostojärjestelmä estää hyökkääjiä kirjoittamasta haitallisia binäärejä tai muokkaamasta asetustiedostoja kontin sisällä.
services:
app:
image: myapp
read_only: true
tmpfs:
- /tmp:noexec,nosuid,size=64m
Liitä tmpfs hakemistoihin, jotka tarvitsevat kirjoitusoikeutta (kuten /tmp). Tämä pakottaa kaiken kirjoitettavan datan olemaan väliaikaista. Varoitus: Jotkut sovellukset tarvitsevat pysyvää tallennustilaa; käytä nimettyjä volyymeja siihen.
Yleisiä sudenkuoppia
- Ytimen yhteensopivuus: Käyttäjä-nimiavaruuden uudelleenmappaus ja jotkut seccomp-säännöt vaativat uudehkon Linux-ytimen (4.14+). Tarkista ytimen versio.
- Suorituskykyvaikutus: Seccomp ja käyttäjä-nimiavaruudet lisäävät pientä lisärasitusta, mutta se on mitätön useimmille työkuormille. Mittaroi oma sovelluksesi.
- Monimutkaisuus: Kaikkien kuuden toimenpiteen lisääminen kerralla voi rikkoa asioita. Ota ne käyttöön yksi kerrallaan, testaa jokainen muutos.
Laajemman kuvan orkestrointimalleista saat oppaastamme designing a multi-tenant Docker architecture.
Yhteenveto
Turvallinen monivuokraaja Docker-isäntä ei vaadi eksoottisia työkaluja – vain Dockerin sisäänrakennettujen ominaisuuksien oikeaoppista käyttöä. Aloita ei-root-käyttäjällä, pudota kaikki kapasiteetit, käytä seccomp-profiilia, ota käyttäjä-nimiavaruuden uudelleenmappaus käyttöön, aseta resurssirajat ja käytä vain luku -tiedostojärjestelmää. Tämä tarkistuslista muodostaa vahvan perustason, joka estää yleisimmät pakenemistekniikat. Toteutuksen jälkeen aja turvallisuustyökaluja kuten docker-bench-security varmistaaksesi konfiguraation. Muista: turvallisuus on prosessi, ei tuote. Kun uusia ydinhaavoittuvuuksia ilmenee, tarkista asetukset uudelleen. Automaattisia laskeutumissivuja varten, jotka esittelevät isännöintipalveluasi, käytä Pagenzaa saadaksesi sivustosi käyttöön minuuteissa.
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

