Przed .NET 8 kontenery domyślnie działały jako root, a począwszy od .NET 8, wszystkie nasze obrazy kontenerów Linuksa będą zawierać użytkowników niebędących root. Będziesz mógł hostować kontenery .NET z jedną linią kodu jako użytkownik nierootowy. Ta zmiana na poziomie platformy sprawi, że Twoja aplikacja stanie się bezpieczniejsza i stanie się jednym z najbardziej bezpiecznych ekosystemów deweloperskich. To drobna zmiana, ale ma duży wpływ na głębię obrony.
Zrozum UID i GID w kontenerach Docker
Domyślnie proces w kontenerze uruchamia się z uprawnieniami użytkownika root, a ten użytkownik root to ten sam użytkownik co root w maszynie hosta. Czy to nie brzmi przerażająco, bo oznacza, że gdy proces w kontenerze ma odpowiednią szansę, może kontrolować wszystko na komputerze hosta!
Odniesienie:Logowanie do linku jest widoczne.
Obraz Dockera .NET 8
W obrazie dockera .NET 8 wprowadzono dwie główne zmiany, które są następujące:
- Image tworzy nowe konto i grupę w aplikacji oraz domyślnie uruchamia aplikację z tym kontem
- Przełączyłem się na port 8080, okazało się, że to port 80, ponieważ port 80 jest uprzywilejowany, wymagane są uprawnienia root (przynajmniej w niektórych miejscach)
Adres źródłowy kodu kodu źródłowego obrazu obrazu .NET Docker:Logowanie do linku jest widoczne.
Zależności są następujące:
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 wygląda tak:
Jak pokazano poniżej:
Użyj konta aplikacji, aby wprowadzić podstawowy obraz, a polecenie brzmi następująco:
Wyjściowo wypisz aktualne zmienne użytkownika i środowiska, jak pokazano na poniższym rysunku:
Odniesienie:Logowanie do linku jest widoczne.
Plik Dockerfile
Jeśli musisz zapakować swój projekt do obrazu Docker, musisz stworzyć nowe wsparcie dla kontenera dockera .NET 8, a domyślna konfiguracja plików Dockerfile w środowisku Linux wygląda następująco:
Jeśli ustawisz strefę czasową systemu w pliku Docker, następujący kod:
Błąd odrzucenia uprawnień może wystąpić następująco:
4>F:\itsvse\Dockerfile : błąd CTC1014: #21 [final 3/3] RUN ln -snf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime & echo Asia/Shanghai > etc/timezone 4>F:\itsvse\Dockerfile : błąd CTC1014: #21 0.314 ln: nie udało się utworzyć symbolicznego linku '/etc/localtime': Pozwolenie odrzucone 4>F:\itsvse\Dockerfile : błąd CTC1014: #21 BŁĄD: proces "/bin/sh -c ln -snf /usr/share/zoneinfo/$TZ /etc/localtime & echo $TZ > /etc/timezone" nie zakończył się pomyślnie: kod wyjścia: 1 4>F:\itsvse\Dockerfile : błąd CTC1014: ------ 4>F:\itsvse\Dockerfile : błąd CTC1014: > [ostatni 3/3] RUN ln -snf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime & echo Asia/Shanghai > /etc/timezone: 4>F:\itsvse\Dockerfile : błąd CTC1014: #21 0.314 ln: nie udało się utworzyć symbolicznego linku '/etc/localtime': Pozwolenie odrzucone Użyj konta root, aby ustawić strefę czasową, potem przełącz się z powrotem do konta aplikacji i zmodyfikuj je w następujący sposób:
(Koniec)
|