Úvod
Privilegovaný Docker je jednou z mnoha užitečných funkcí této výkonné virtualizační platformy. Než začnete pracovat v privilegovaném režimu, ujistěte se, že rozumíte tomu, jak to funguje.
V tomto tutoriálu se dozvíte, jaké jsou privilegované kontejnery Docker, kdy je používat a zda je to pro vás dobrá volba.
Co je režim Privileged Docker?
Privilegovaný režim Docker poskytuje kořenové možnosti kontejneru Docker všem zařízením v hostitelském systému. Spuštění kontejneru v privilegovaném režimu mu dává možnosti jeho hostitelského počítače. Umožňuje mu například upravovat konfigurace App Arm a SELinux.
Díky funkcím jádra hostitele a přístupu k zařízení můžete dokonce nainstalovat novou instanci platformy Docker v rámci privilegovaného kontejneru. Tento režim v podstatě umožňuje spuštění Dockeru uvnitř Dockeru.
Jak zkontrolovat, zda je kontejner privilegovaný?
Chcete-li zkontrolovat, zda používáte kontejner v privilegovaném režimu, použijte příkaz:
docker inspect --format='{{.HostConfig.Privileged}}' [container_id]
Pokud je kontejner privilegovaný, výstup odpoví true
, jako na obrázku níže.
Na druhou stranu, pokud kontejner není privilegovaný, výstup zobrazí zprávu false
.
Jak spustit režim Privileged Docker?
Dejte Dockeru pokyn ke spuštění kontejneru v privilegovaném režimu přidáním --privileged
možnost příkazu run:
sudo docker run --privileged [image_name]
Příklad oprávnění Docker
Pro spuštění kontejneru Ubuntu (interaktivně) v privilegovaném režimu byste použili:
sudo docker run -it --privileged ubuntu
Chcete-li otestovat, zda má kontejner přístup k hostiteli, můžete zkusit vytvořit dočasný souborový systém (tmpfs ) a připojte jej k /mnt :
mount -t tmpfs none /mnt
Nyní vypište statistiku místa na disku (v čitelných člověkem format) pomocí příkazu:
df -h
Nově vytvořený souborový systém by se měl objevit v seznamu, jako na obrázku níže.
Proč není spouštění privilegovaných kontejnerů bezpečné?
Stejně jako Ubuntu odrazuje od používání systému jako root, tak to dělá i Docker. Vystavení jádra a hardwarových zdrojů hostitele jakémukoli vnějšímu kybernetickému útoku je vždy potenciální hrozbou pro systém.
Z tohoto důvodu se nedoporučuje používat privilegované kontejnery v produkčním prostředí.
Možná porušení prostřednictvím privilegovaných kontejnerů
Mít privilegované kontejnery představuje bezpečnostní riziko pro každou organizaci. Vytváří příležitosti pro uživatele se zlými úmysly převzít kontrolu nad systémem.
Povolení přístupu kořenového adresáře kontejneru ke všemu v systému otevírá příležitost pro kybernetické útoky. Kybernetický útočník by se mohl připojit k hostiteli z kontejneru a ohrozit zavedenou infrastrukturu a konfiguraci.
Nejběžnějším scénářem je situace, kdy legitimní uživatel zneužije dané oprávnění ke škodlivé činnosti.
Jak minimalizovat eskalaci oprávnění kontejneru Docker?
Nejlepší způsob, jak zabránit eskalaci oprávnění kontejneru Docker, je nepoužívat privilegované kontejnery vůbec.
Pokud však spouštíte aplikaci, která vyžaduje spouštění s uživatelem root, existuje způsob, jak minimalizovat pravděpodobnost škodlivé činnosti. To se provádí přemapováním jmenného prostoru uživatele , přemapování uživatele pro tento konkrétní kontejner na méně privilegovaného uživatele na hostiteli Docker. Kontejner v podstatě vidí uživatele jako root, zatímco hostitel nikoli.
Přemapování zahrnuje přiřazení rozsahu UID, které fungují v rámci kontejneru (jmenného prostoru) jako normální UID od 0 do 65536, ale nemají žádná oprávnění na hostiteli. Dva soubory spravují konfiguraci uživatele – jeden pro rozsah ID uživatele (/etc/subuid ) a druhý pro rozsah ID skupiny (/etc/subgid ).
Ve výchozím nastavení používá docker dockremap uživatele a skupinu, aby provedli přemapování.