Sobes.tech
Middle

Waarom wordt het uitvoeren van een container als root-gebruiker in Kubernetes als slechte praktijk beschouwd?

sobes.tech AI

Antwoord van AI

Het starten van containers als root-gebruiker in Kubernetes brengt verhoogde beveiligingsrisico's met zich mee:

  • Hoge privileges: In het geval van een compromittering van de container krijgt de aanvaller rootrechten binnen de container. Dit kan escalatie van privileges op het host-systeem mogelijk maken of toegang geven tot andere resources in de cluster.
  • Toegang tot het bestandssysteem van de host: Zonder juiste beperkingen kan het root-proces binnen de container toegang krijgen tot het bestandssysteem van de node waarop het draait, wat de kans op ongeautoriseerde wijzigingen of datalekken vergroot.
  • Kernel-kwetsbaarheden: Root-gebruiker in de container kan gebruik maken van kernel-kwetsbaarheden van Linux om uit de container te ontsnappen en controle over de host te krijgen.
  • Audit-zwakheden: Het traceren van de acties van de root-gebruiker is moeilijker, wat het moeilijk maakt om beveiligingsincidenten te detecteren en te onderzoeken.
  • Erfenis van privileges: Als andere processen worden gestart door de root-gebruiker, zullen zij ook een hoog privilege-niveau hebben.

Het wordt aanbevolen om het principe van minimale privileges te volgen door containers uit te voeren met een niet-bevoorrechte gebruiker. Dit kan worden geconfigureerd in het pod-manifest met behulp van securityContext:

securityContext:
  runAsUser: 1000  # Gebruik van een niet-bevoorrechte gebruiker met ID 1000
  runAsGroup: 3000 # Toebehoren aan een groep met ID 3000 (optioneel)
  allowPrivilegeEscalation: false # Verbied privilege-escalatie
readOnlyRootFilesystem: true # Verbied schrijven op het root-bestandssysteem van de container

Daarnaast kan men gebruiken:

  • Pod Security Policies / Pod Security Admission: Voor het toepassen van beveiligingsbeleid op pod-niveau.
  • AppArmor / SELinux: Voor extra isolatie van containers.
  • Gebruik van container-images met expliciet opgegeven niet-bevoorrechte gebruiker: In de Dockerfile met behulp van de instructie USER.
# Voorbeeld Dockerfile met gebruikersspecificatie
FROM ubuntu:latest
# Aanmaken van een niet-bevoorrechte gebruiker
RUN useradd -ms /bin/bash myuser
# Overschakelen naar deze gebruiker
USER myuser
CMD ["/bin/bash"]