Před .NET 8 běžely kontejnery ve výchozím nastavení jako root a od .NET 8 budou všechny naše Linux obrazy kontejnerů obsahovat uživatele bez rootu. Jako uživatel bez root kódu budete moci hostovat .NET kontejnery s jedním řádkem kódu. Tato změna na úrovni platformy učiní vaši aplikaci bezpečnější a udělá z .NET jeden z nejbezpečnějších vývojářských ekosystémů. Je to malá změna, ale má velký dopad na obranu v hloubce.
Pochopte UID a GID v Docker kontejnerech
Ve výchozím nastavení proces v kontejneru běží s root uživatelskými oprávněními a tento root uživatel je stejný uživatel jako root v hostitelském stroji. Nezní to děsivě, protože to znamená, že jakmile má proces v kontejneru správnou šanci, může ovládat vše na hostitelském stroji!
Odkaz:Přihlášení k hypertextovému odkazu je viditelné.
Obraz dockeru .NET 8
Existují dvě hlavní změny v obraze .NET 8 Dockeru, a to následovně:
- Image vytvoří nový účet a skupinu v aplikaci a spustí aplikaci ve výchozím nastavení s tímto účtem
- Když jsem přepnul na port 8080, ukázalo se, že to byl port 80, protože port 80 je privilegovaný, root oprávnění jsou vyžadována (alespoň na některých místech)
Zdrojová adresa kódu obrázku .NET Docker:Přihlášení k hypertextovému odkazu je viditelné.
Závislosti jsou následující:
aspnet:8.0-bookworm-slim -> dotnet/runtime-8.0.0-bookworm-slim-amd64 -> dotnet/runtime-deps-8.0.0-bookworm-slim-amd64 -> amd64/debian:bookworm-slim
dotnet/runtime-deps-8.0.0-bookworm-slim-amd64 vypadá takto:
Jak je uvedeno níže:
Použijte aplikační účet k zadání základního obrázku a příkaz je následující:
Výstup aktuálních uživatelských a environmentálních proměnných, jak je znázorněno na následujícím obrázku:
Odkaz:Přihlášení k hypertextovému odkazu je viditelné.
Dockerfile soubor
Pokud potřebujete zabalit svůj projekt do Docker image, musíte vytvořit novou podporu dockeru pro .NET 8 a výchozí nastavení souboru Dockerfile pro Linux je následující:
Pokud nastavíte systémové časové pásmo v Dockerfile, následující kód:
Chyba Povolení zamítnuté může nastat následovně:
4>F:\itsvse\Dockerfile : chyba CTC1014: #21 [finální 3/3] RUN ln -snf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime & echo Asia/Shanghai > /etc/timezone 4>F:\itsvse\Dockerfile : chyba CTC1014: #21 0.314 ln: nepodařilo se vytvořit symbolický odkaz '/etc/localtime': Povolení zamítnuto 4>F:\itsvse\Dockerfile : chyba CTC1014: #21 CHYBA: proces "/bin/sh -c ln -snf /usr/share/zoneinfo/$TZ /etc/localtime & echo $TZ > /etc/timezone" nebyl úspěšně dokončen: výstupní kód: 1 4>F:\itsvse\Dockerfile : chyba CTC1014: ------ 4>F:\itsvse\Dockerfile : chyba CTC1014: > [finální 3/3] RUN ln -snf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime & echo Asia/Shanghai > /etc/timezone: 4>F:\itsvse\Dockerfile : chyba CTC1014: #21 0.314 ln: nepodařilo se vytvořit symbolický odkaz '/etc/localtime': Povolení zamítnuto Použijte root účet k nastavení časového pásma, pak se vraťte zpět k účtu v aplikaci a upravte ho následovně:
(Konec)
|