Înainte de .NET 8, containerele rulau ca root implicit, iar începând cu .NET 8, toate imaginile noastre de containere Linux vor conține utilizatori non-root. Vei putea găzdui containere .NET cu o singură linie de cod ca utilizator non-root. Această schimbare la nivel de platformă va face aplicația ta mai sigură și va face din .NET unul dintre cele mai sigure ecosisteme pentru dezvoltatori. Aceasta este o schimbare mică, dar are un impact major asupra apărării în adâncime.
Înțelege UID-urile și GID-urile în containerele Docker
În mod implicit, procesul din container rulează cu privilegii de utilizator root, iar acest utilizator root este același utilizator cu root-ul din mașina gazdă. Nu sună înfricoșător, pentru că înseamnă că, odată ce un proces dintr-un container are șansele potrivite, poate controla totul pe calculatorul gazdă!
Referință:Autentificarea cu hyperlink este vizibilă.
Imagine .NET 8 Docker
Există două schimbări principale la imaginea Docker .NET 8, după cum urmează:
- Image creează un nou cont de aplicație și un grup și rulează aplicația împreună cu contul de aplicație implicit
- Comutat la portul 8080, s-a dovedit a fi portul 80, deoarece portul 80 este un port privilegiat, sunt necesare privilegii root (cel puțin în unele locuri)
Adresa codului sursă al imaginii .NET Docker:Autentificarea cu hyperlink este vizibilă.
Dependențele sunt următoarele:
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 arată astfel:
Așa cum se arată mai jos:
Folosește contul aplicației pentru a introduce imaginea de bază, iar comanda este următoarea:
Afișează variabilele curente ale utilizatorului și mediului, așa cum se arată în figura următoare:
Referință:Autentificarea cu hyperlink este vizibilă.
Fișier Dockerfile
Dacă trebuie să împachetezi proiectul într-o imagine Docker, trebuie să creezi un nou suport pentru containere .NET 8 Docker, iar configurația implicită a fișierului Dockerfile din mediul Linux este următoarea:
Dacă setezi fusul orar al sistemului în Dockerfile, următorul cod:
Eroarea de permisiune refuzată poate apărea astfel:
4>F:\itsvse\Dockerfile : eroare CTC1014: #21 [3/3 final] RUN Ln -snf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && echo Asia/Shanghai > /etc/fus orar 4>F:\itsvse\Dockerfile : eroare CTC1014: #21 0.314 ln: eșuat la crearea linkului simbolic '/etc/localtime': Permisiune refuzată 4>F:\itsvse\Dockerfile : eroare CTC1014: #21 EROARE: procesul "/bin/sh -c ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone" nu s-a finalizat cu succes: cod de ieșire: 1 4>F:\itsvse\Dockerfile : eroare CTC1014: ------ 4>F:\itsvse\Dockerfile : eroare CTC1014: > [ultimele 3/3] RUN Ln -snf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && echo Asia/Shanghai > /etc/fus orar: 4>F:\itsvse\Dockerfile : eroare CTC1014: #21 0.314 ln: eșuat la crearea linkului simbolic '/etc/localtime': Permisiune refuzată Folosește contul root pentru a seta fusul orar, apoi revine la contul aplicației și modifică-l astfel:
(Sfârșit)
|