Voor .NET 8 draaiden containers standaard als root, en vanaf .NET 8 zullen al onze Linux-containerimages niet-rootgebruikers bevatten. Je kunt .NET-containers hosten met één regel code als niet-rootgebruiker. Deze verandering op platformniveau zal je applicatie veiliger maken en .NET tot een van de veiligste ontwikkelaarsecosystemen maken. Dit is een kleine verandering, maar het heeft een grote impact op verdediging in diepte.
Begrijp de UID's en GID's in Docker-containers
Standaard draait het proces in de container met rootgebruikersrechten, en deze rootgebruiker is dezelfde gebruiker als de root op de hostmachine. Klinkt dat niet eng, want het betekent dat zodra een proces in een container de juiste kans krijgt, het alles op de hostmachine kan aansturen!
Referentie:De hyperlink-login is zichtbaar.
.NET 8 Docker-image
Er zijn twee hoofdwijzigingen aan de .NET 8 Docker-afbeelding, als volgt:
- Image maakt een nieuw app-account en groep aan, en draait de app standaard met het app-account
- Toen ik naar poort 8080 schakelde, bleek het poort 80 te zijn, aangezien poort 80 een bevoorrechte poort is, zijn rootprivileges vereist (althans op sommige plaatsen)
.NET Docker image broncodeadres:De hyperlink-login is zichtbaar.
De afhankelijkheden zijn als volgt:
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 ziet er zo uit:
Zoals hieronder getoond:
Gebruik het app-account om de basisafbeelding in te voeren, en het commando is als volgt:
Voer de huidige gebruikers- en omgevingsvariabelen uit, zoals weergegeven in de volgende figuur:
Referentie:De hyperlink-login is zichtbaar.
Dockerfile-bestand
Als je je project in een Docker-image moet verpakken, moet je een nieuwe .NET 8 Docker-containerondersteuning aanmaken, en de standaard Linux-omgeving Dockerfile-bestandsconfiguratie is als volgt:
Als je de systeemtijdzone in het Dockerfile instelt, volgt de volgende code:
De fout 'Toestemming geweigerd' kan als volgt optreden:
4>F:\itsvse\Dockerfile : fout CTC1014: #21 [final 3/3] RUN ln -snf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && echo Asia/Shanghai > /etc/timezone 4>F:\itsvse\Dockerfile : fout CTC1014: #21 0.314 ln: geen symbolische link kon maken '/etc/localtime': Toestemming geweigerd 4>F:\itsvse\Dockerfile : fout CTC1014: #21 FOUT: proces "/bin/sh -c ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone" is niet succesvol voltooid: exitcode: 1 4>F:\itsvse\Dockerfile : fout CTC1014: ------ 4>F:\itsvse\Dockerfile : fout CTC1014: > [final 3/3] RUN ln -snf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && echo Asia/Shanghai > /etc/timezone: 4>F:\itsvse\Dockerfile : fout CTC1014: #21 0.314 ln: geen symbolische link kon maken '/etc/localtime': Toestemming geweigerd Gebruik het rootaccount om de tijdzone in te stellen, schakel dan terug naar het app-account en pas het als volgt aan:
(Einde)
|