Før .NET 8 kørte containere som root som standard, og fra .NET 8 vil alle vores Linux-containerbilleder indeholde ikke-root-brugere. Du vil kunne hoste .NET-containere med en enkelt kodelinje som ikke-root-bruger. Denne ændring på platformniveau vil gøre din applikation mere sikker og gøre .NET til et af de mest sikre udviklerøkosystemer. Det er en lille ændring, men det har stor betydning for forsvaret i dybden.
Forstå UID'erne og GID'erne i Docker-containere
Som standard kører processen i containeren med root-brugerrettigheder, og denne root-bruger er den samme bruger som root på værtsmaskinen. Lyder det ikke skræmmende, for det betyder, at når en proces i en beholder har den rette chance, kan den styre alt på værtsmaskinen!
Henvisning:Hyperlink-login er synlig.
.NET 8 Docker-billede
Der er to hovedændringer til .NET 8 Docker-billedet, som følger:
- Image opretter en ny app-konto og gruppe, og kører appen med app-kontoen som standard
- Da jeg blev skiftet til port 8080, viste det sig at være port 80, da port 80 er en privilegeret port, kræves root-rettigheder (i hvert fald nogle steder)
.NET Docker-billedkildekodeadresse:Hyperlink-login er synlig.
Afhængighederne er som følger:
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 ser sådan ud:
Som vist nedenfor:
Brug app-kontoen til at indtaste det grundlæggende billede, og kommandoen er som følger:
Output de aktuelle bruger- og miljøvariabler, som vist i følgende figur:
Henvisning:Hyperlink-login er synlig.
Dockerfile-fil
Hvis du skal pakke dit projekt i et Docker-image, skal du oprette en ny .NET 8 Docker-containerunderstøttelse, og standardkonfigurationen af Dockerfile-filen i Linux-miljøet er som følger:
Hvis du sætter systemets tidszone i Dockerfile, følger følgende kode:
Fejlen ved tilladelsesnægtelse kan forekomme som følger:
4>F:\itsvse\Dockerfile : fejl CTC1014: #21 [slut 3/3] RUN ln -snf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && echo Asia/Shanghai > /etc/timezone 4>F:\itsvse\Dockerfile : fejl CTC1014: #21 0.314 ln: kunne ikke oprette symbolsk link '/etc/localtime': Tilladelse nægtet 4>F:\itsvse\Dockerfile : fejl CTC1014: #21 FEJL: proces "/bin/sh -c ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone" blev ikke gennemført uden problemer: exit-kode: 1 4>F:\itsvse\Dockerfile : fejl CTC1014: ------ 4>F:\itsvse\Dockerfile : fejl CTC1014: > [final 3/3] RUN ln -snf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && echo Asia/Shanghai > /etc/timezone: 4>F:\itsvse\Dockerfile : fejl CTC1014: #21 0.314 ln: kunne ikke oprette symbolsk link '/etc/localtime': Tilladelse nægtet Brug root-kontoen til at indstille tidszonen, skift så tilbage til app-kontoen og ændr den som følger:
(Slut)
|