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
Dockerfileza pomocą instrukcjiUSER.
# 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"]