Sobes.tech
Middle

Proč je považováno za špatnou praxi spouštět kontejner jako uživatel root v Kubernetes?

sobes.tech AI

Odpověď od AI

Spouštění kontejnerů jako uživatel root v Kubernetes představuje zvýšená bezpečnostní rizika:

  • Vysoká úroveň privilegií: V případě kompromitace kontejneru získá útočník root práva uvnitř kontejneru. To může umožnit eskalaci privilegií na hostitelském systému nebo přístup k dalším zdrojům clusteru.
  • Přístup k souborovému systému hostitele: Bez vhodných omezení může root proces uvnitř kontejneru mít přístup k souborovému systému uzlu, na kterém běží, což zvyšuje pravděpodobnost neoprávněných změn nebo úniku dat.
  • Zranitelnosti jádra: Root uživatel v kontejneru může využít zranitelnosti jádra Linuxu k opuštění kontejneru a získání kontroly nad hostitelem.
  • Těžkosti s auditem: Sledování akcí root uživatele je složitější, což ztěžuje odhalování a vyšetřování bezpečnostních incidentů.
  • Dědičnost privilegií: Pokud jsou spuštěny jiné procesy z root uživatele, budou mít také vysokou úroveň privilegií.

Doporučuje se dodržovat princip minimálních práv a spouštět kontejnery s neprivilegovaným uživatelem. To lze nakonfigurovat v manifestu podu pomocí securityContext:

securityContext:
  runAsUser: 1000  # Použití neprivilegovaného uživatele s ID 1000
  runAsGroup: 3000 # Přiřazení ke skupině s ID 3000 (volitelné)
  allowPrivilegeEscalation: false # Zakázat eskalaci privilegií
readOnlyRootFilesystem: true # Zakázat zápis do kořenového souborového systému kontejneru

Dále lze použít:

  • Pod Security Policies / Pod Security Admission: Pro aplikaci bezpečnostních politik na úrovni podu.
  • AppArmor / SELinux: Pro dodatečnou izolaci kontejnerů.
  • Použití obrazů kontejnerů s výslovně uvedeným neprivilegovaným uživatelem: V Dockerfile pomocí instrukce USER.
# Příklad Dockerfile s určením uživatele
FROM ubuntu:latest
# Vytvoření neprivilegovaného uživatele
RUN useradd -ms /bin/bash myuser
# Přepnutí na tohoto uživatele
USER myuser
CMD ["/bin/bash"]