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
Dockerfilemet behulp van de instructieUSER.
# 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"]