Sobes.tech
Middle

Dlaczego uruchamianie kontenera jako użytkownik root w Kubernetes jest uważane za złą praktykę?

sobes.tech AI

Odpowiedź od AI

Uruchamianie kontenerów jako użytkownik root w Kubernetes stwarza zwiększone ryzyko bezpieczeństwa:

  • Wysoki poziom uprawnień: W przypadku naruszenia bezpieczeństwa kontenera, atakujący uzyskuje prawa root wewnątrz kontenera. Może to umożliwić eskalację uprawnień na systemie hosta lub dostęp do innych zasobów klastra.
  • Dostęp do systemu plików hosta: Bez odpowiednich ograniczeń, proces root wewnątrz kontenera może mieć dostęp do systemu plików węzła, na którym jest uruchomiony, co zwiększa ryzyko nieautoryzowanych zmian lub wycieku danych.
  • Luki w jądrze: Użytkownik root w kontenerze może wykorzystać luki w jądrze Linux, aby opuścić kontener i przejąć kontrolę nad hostem.
  • Trudności w audycie: Śledzenie działań użytkownika root jest trudniejsze, co utrudnia wykrycie i zbadanie incydentów bezpieczeństwa.
  • Dziedziczenie uprawnień: Jeśli inne procesy są uruchamiane przez użytkownika root, również będą miały wysoki poziom uprawnień.

Zaleca się stosowanie zasady najmniejszych uprawnień, uruchamiając kontenery z użytkownikiem nieuprzywilejowanym. Można to skonfigurować w manifeście poda za pomocą securityContext:

securityContext:
  runAsUser: 1000  # Użycie nieuprzywilejowanego użytkownika z ID 1000
  runAsGroup: 3000 # Przynależność do grupy z ID 3000 (opcjonalnie)
  allowPrivilegeEscalation: false # Zabrania podnoszenia uprawnień
readOnlyRootFilesystem: true # Zabrania zapisu w systemie plików głównym kontenera

Dodatkowo można używać:

  • Polityk bezpieczeństwa Pod / Pod Security Admission: Do stosowania polityk bezpieczeństwa na poziomie poda.
  • AppArmor / SELinux: Do dodatkowej izolacji kontenerów.
  • Użycie obrazów kontenerów z wyraźnie określonym nieuprzywilejowanym użytkownikiem: W Dockerfile za pomocą instrukcji USER.
# Przykład Dockerfile z określeniem użytkownika
FROM ubuntu:latest
# Tworzenie nieuprzywilejowanego użytkownika
RUN useradd -ms /bin/bash myuser
# Przełączenie na tego użytkownika
USER myuser
CMD ["/bin/bash"]