0Pricing
Docker & DevOps Fundamentals · Lekcja

Bezpieczeństwo kontenerów w czasie działania

Wdrażaj najlepsze praktyki zabezpieczania kontenerów w czasie działania, w tym zarządzania uprawnieniami użytkowników i limitami zasobów.

Bezpieczeństwo kontenerów w czasie działania to bezpłatna lekcja Docker & DevOps Fundamentals na CoddyKit. To lekcja 2 z 4. Możesz przeczytać całą lekcję poniżej za darmo — a potem ćwiczyć ją interaktywnie w przeglądarce z wbudowanym edytorem kodu i tutorem AI dostępnym 24/7. To część ścieżki edukacyjnej Docker & DevOps Fundamentals, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs Docker & DevOps Fundamentals zawiera 4 lekcji w sumie.

Podstawy bezpieczeństwa w czasie działania

Witamy w lekcji Bezpieczeństwo kontenerów w czasie działania! Tworzenie bezpiecznych obrazów ma kluczowe znaczenie, ale co dzieje się po uruchomieniu kontenera?

Ta lekcja koncentruje się na najlepszych praktykach ochrony aplikacji podczas ich działania, ograniczając potencjalne szkody wynikające z podatności lub ataków.

Bezpieczeństwo kontenerów w czasie działania — ilustracja 1

Zasada najmniejszych uprawnień

Podstawową koncepcją bezpieczeństwa jest zasada najmniejszych uprawnień. Oznacza ona przyznawanie jednostce, takiej jak kontener lub użytkownik, wyłącznie uprawnień absolutnie niezbędnych do wykonywania jej funkcji — i żadnych dodatkowych.

Stosowanie tej zasady zmniejsza powierzchnię ataku i ogranicza skutki przejęcia kontenera.

Unikanie uruchamiania jako root

Domyślnie procesy wewnątrz kontenera Docker są uruchamiane jako użytkownik root, który ma pełne uprawnienia administracyjne w kontenerze.

  • Ryzyko: Jeśli atakujący przejmie kontrolę nad kontenerem działającym z uprawnieniami użytkownika root, może potencjalnie wykorzystać podatności w demonie Docker lub jądrze, aby uzyskać dostęp root do systemu hosta.
  • Najlepsza praktyka: Procesy w kontenerze należy zawsze uruchamiać jako użytkownik inny niż root.

Uruchamianie jako użytkownik inny niż root

Użytkownika (według nazwy lub UID) dla procesu kontenera można określić za pomocą flagi --user wraz z poleceniem docker run. W tym przykładzie polecenie id jest uruchamiane w kontenerze Alpine jako użytkownik 1000.

Jeśli użytkownik 1000 nie istnieje, Docker i tak użyje tego UID.

docker run --rm -it --user 1000 alpine id

Zrozumienie mechanizmu Linux Capabilities

Tradycyjne systemy Linux mają użytkownika root z uprawnieniami typu „wszystko albo nic”. Mechanizm Linux Capabilities rozdziela potężne uprawnienia roota na mniejsze, niezależne jednostki.

Dzięki temu proces może otrzymać tylko konkretne uprawnienia przypominające uprawnienia roota, których potrzebuje (np. możliwość nasłuchiwania na portach o niskich numerach lub surowy dostęp do sieci), bez pełnych uprawnień roota.

Odbieranie niepotrzebnych capabilities

Kontenery Docker są domyślnie uruchamiane z dużym zestawem capabilities. Można odebrać niepotrzebne capabilities za pomocą --cap-drop, aby dodatkowo ograniczyć możliwości kontenera.

W tym przykładzie odbieramy capability NET_RAW. Polecenie ping, które wymaga NET_RAW, zakończy się wtedy niepowodzeniem, pokazując działanie tego ograniczenia.

docker run --rm -it --cap-drop=NET_RAW alpine ping -c 1 localhost || echo "Ping failed: NET_RAW capability dropped!"

Kontrolowanie zasobów kontenera

Kontenery współdzielą jądro i zasoby hosta. Niekontrolowane zużycie zasobów przez jeden kontener może doprowadzić do odmowy usługi (DoS) wobec innych kontenerów, a nawet samego hosta.

  • Limity procesora: Zapobiegają monopolizowaniu czasu procesora przez kontener.
  • Limity pamięci: Uniemożliwiają kontenerowi zużycie całej dostępnej pamięci RAM, zapobiegając niestabilności systemu.

Wprowadzanie limitów zasobów

Limity procesora i pamięci można ustawić bezpośrednio za pomocą docker run. Ten przykład ogranicza pamięć do 128 MB, a użycie procesora do 0,5 (połowy jednego rdzenia procesora).

Dzięki temu kontener działa poprawnie i nie pozbawia zasobów innych procesów.

docker run --rm -it --memory="128m" --cpus="0.5" alpine sh -c "echo 'Container running with limited resources.' && free -h"

Systemy plików tylko do odczytu

Wiele aplikacji po uruchomieniu nie musi zapisywać danych w głównym systemie plików. Ustawienie systemu plików jako tylko do odczytu zapewnia istotne korzyści w zakresie bezpieczeństwa:

  • Zapobieganie modyfikacjom: Atakujący nie może modyfikować istniejących plików ani zapisywać nowych, złośliwych plików.
  • Ograniczenie trwałości zmian: Wszelkie wprowadzone zmiany są nietrwałe i zostają utracone po ponownym uruchomieniu kontenera.
  • Wymuszanie niezmienności: Promuje projektowanie, w którym kontenery można usuwać, a konfiguracja znajduje się na zewnątrz.

Wdrażanie kontenerów tylko do odczytu

Podczas uruchamiania kontenera należy użyć flagi --read-only. Każda próba zapisu w systemie plików kontenera (poza jawnie zamontowanymi wolumenami) zakończy się niepowodzeniem.

Spróbuj utworzyć plik w tym kontenerze tylko do odczytu:

docker run --rm -it --read-only alpine sh -c "touch /test.txt || echo 'Error: Cannot write to read-only filesystem!'"

Sprawdzenie bezpieczeństwa w czasie działania

Które z poniższych praktyk są dobre w kontekście zabezpieczania kontenerów w czasie działania?

Podsumowanie bezpieczeństwa w czasie działania

Świetna praca! Dowiedzieli się Państwo, jak zwiększać bezpieczeństwo kontenerów podczas ich działania:

  • Najmniejsze uprawnienia: Należy przyznawać wyłącznie niezbędne uprawnienia.
  • Użytkownicy inni niż root: Należy unikać uruchamiania procesów jako root.
  • Capabilities: Należy odbierać niepotrzebne capabilities systemu Linux.
  • Limity zasobów: Należy kontrolować użycie procesora i pamięci.
  • Tylko do odczytu: Należy ustawiać systemy plików jako niezmienne, aby zapobiegać zapisom.

Praktyki te znacznie zmniejszają powierzchnię ataku i skutki potencjalnego przejęcia. Proszę dalej ćwiczyć!

Często zadawane pytania

Czy lekcja „Bezpieczeństwo kontenerów w czasie działania” jest bezpłatna?

Tak — pełny tekst „Bezpieczeństwo kontenerów w czasie działania” jest dostępny za darmo tutaj w sieci. Aby ćwiczyć ją interaktywnie (wbudowany edytor kodu i tutor AI dostępny 24/7) i odblokować resztę kursu Docker & DevOps Fundamentals, przejdź na CoddyKit PRO. Kurs Docker & DevOps Fundamentals zawiera 4 lekcji w sumie.

Co nauczysz się w „Bezpieczeństwo kontenerów w czasie działania”?

Wdrażaj najlepsze praktyki zabezpieczania kontenerów w czasie działania, w tym zarządzania uprawnieniami użytkowników i limitami zasobów. Ćwiczysz Docker & DevOps Fundamentals z praktycznym kodem, który uruchamiasz bezpośrednio w przeglądarce, a tutor AI dostępny 24/7 odpowiada na Twoje pytania podczas pracy nad lekcją.

Czy potrzebuję doświadczenia, aby zacząć Docker & DevOps Fundamentals?

Nie wymagamy żadnego doświadczenia. Docker & DevOps Fundamentals w CoddyKit jest strukturyzowany dla początkujących i zaawansowanych użytkowników, więc możesz zacząć tutaj lub od początku i uczyć się w swoim tempie. To lekcja 2 z 4.

Ile czasu zajmuje lekcja „Bezpieczeństwo kontenerów w czasie działania”?

Większość lekcji CoddyKit trwa około 5–10 minut. Każda lekcja to mały, interaktywny krok, dzięki czemu robisz systematyczne postępy i zawsze wracasz dokładnie do tego samego miejsca — na webie i w aplikacji.

Czy mogę pisać i uruchamiać kod w tej lekcji Docker & DevOps Fundamentals?

Tak. Każda lekcja Docker & DevOps Fundamentals zawiera wbudowany edytor kodu, więc piszesz i uruchamiasz prawdziwy kod bezpośrednio w przeglądarce i od razu otrzymujesz sprzężenie zwrotne od AI — bez konfiguracji na komputerze.

Wszystkie lekcje w tym kursie

  1. Skanowanie obrazów kontenerów pod kątem bezpieczeństwa
  2. Bezpieczeństwo kontenerów w czasie działania
  3. Zarządzanie sekretami i RBAC
  4. Zasady sieciowe i sieć zgodna z zasadą najmniejszych uprawnień
← Powrót do Docker & DevOps Fundamentals