Sobes.tech
Middle

Perché eseguire un contenitore come utente root in Kubernetes è considerata una cattiva pratica?

sobes.tech AI

Risposta dell'AI

L'avvio di contenitori come utente root in Kubernetes comporta rischi di sicurezza elevati:

  • Alto livello di privilegi: In caso di compromissione del contenitore, l'attaccante ottiene i privilegi di root all'interno del contenitore. Ciò può consentire di eseguire escalation di privilegi sul sistema host o di accedere ad altre risorse del cluster.
  • Accesso al filesystem dell'host: Senza restrizioni adeguate, il processo root all'interno del contenitore può accedere al filesystem del nodo su cui è in esecuzione, aumentando la probabilità di modifiche non autorizzate o di perdita di dati.
  • Vulnerabilità del kernel: L'utente root nel contenitore può sfruttare vulnerabilità del kernel Linux per uscire dal contenitore e ottenere il controllo dell'host.
  • Difficoltà di audit: È più difficile tracciare le azioni dell'utente root, complicando il rilevamento e l'indagine sugli incidenti di sicurezza.
  • Eredità dei privilegi: Se altri processi vengono avviati dall'utente root, avranno anch'essi un alto livello di privilegi.

Si consiglia di seguire il principio dei privilegi minimi, eseguendo i contenitori con un utente non privilegiato. Questo può essere configurato nel manifesto del pod usando securityContext:

securityContext:
  runAsUser: 1000  # Uso di un utente non privilegiato con ID 1000
  runAsGroup: 3000 # Appartenenza a un gruppo con ID 3000 (opzionale)
  allowPrivilegeEscalation: false # Vietare l'aumento dei privilegi
readOnlyRootFilesystem: true # Vietare la scrittura nel filesystem root del contenitore

Inoltre, si può usare:

  • Politiche di sicurezza del Pod / Pod Security Admission: Per applicare politiche di sicurezza a livello di pod.
  • AppArmor / SELinux: Per un isolamento aggiuntivo dei contenitori.
  • Utilizzo di immagini di contenitori con utente non privilegiato esplicitamente specificato: Nel Dockerfile usando l'istruzione USER.
# Esempio di Dockerfile con specifica dell'utente
FROM ubuntu:latest
# Creazione di un utente non privilegiato
RUN useradd -ms /bin/bash myuser
# Passaggio a questo utente
USER myuser
CMD ["/bin/bash"]