Sicurezza dei container a runtime
Applichi le best practice per proteggere i container durante l'esecuzione, inclusi i privilegi degli utenti e i limiti delle risorse.
Sicurezza dei container a runtime è una lezione DevOps Bootcamp gratuita su CoddyKit. Questa è la lezione 2 di 4. Puoi leggere la lezione completa qui gratuitamente — poi esercitati direttamente nel browser con un editor di codice integrato e un tutor IA disponibile 24/7. Fa parte del percorso di apprendimento DevOps Bootcamp, e i tuoi progressi si sincronizzano tra il web e l'app CoddyKit. Il corso DevOps Bootcamp include 4 lezioni in totale.
Elementi essenziali della sicurezza a runtime
Benvenuto nella sicurezza dei container a runtime! Creare immagini sicure è fondamentale, ma cosa succede quando il container è in esecuzione?
Questa lezione si concentra sulle best practice per proteggere le applicazioni mentre sono attive, limitando i potenziali danni causati da vulnerabilità o attacchi.

Principio del privilegio minimo
Un concetto fondamentale della sicurezza è il principio del privilegio minimo. Consiste nel concedere a un'entità (come un container o un utente) solo i permessi assolutamente necessari per svolgere la propria funzione, e nessun altro.
La sua applicazione riduce la superficie di attacco e limita l'impatto nel caso in cui un container venga compromesso.
Evitare l'esecuzione come root
Per impostazione predefinita, i processi all'interno di un container Docker vengono eseguiti come utente root, che dispone di tutti i privilegi amministrativi all'interno del container.
- Rischio: Se un attaccante prende il controllo di un container con privilegi root, potrebbe sfruttare le vulnerabilità del demone Docker o del kernel per ottenere l'accesso root al sistema host.
- Best practice: Eseguire sempre i processi del container come utente non root.
Esecuzione come utente non root
È possibile specificare un utente (tramite nome o UID) per il processo del container usando il flag --user con docker run. In questo esempio, eseguiamo il comando id in un container Alpine come utente 1000.
Se l'utente 1000 non esiste, Docker utilizzerà comunque tale UID.
docker run --rm -it --user 1000 alpine idComprendere le Linux Capabilities
I sistemi Linux tradizionali hanno un utente root con privilegi assoluti. Le Linux Capabilities suddividono i potenti privilegi di root in unità più piccole e distinte.
In questo modo, un processo può disporre solo dei poteri specifici simili a quelli di root di cui ha bisogno (ad esempio, l'associazione a porte basse o l'accesso diretto alla rete), senza avere tutti i privilegi di root.
Rimuovere le capabilities non necessarie
Per impostazione predefinita, i container Docker vengono eseguiti con un insieme ampio di capabilities. È possibile rimuovere quelle non necessarie usando --cap-drop, per limitare ulteriormente le operazioni che un container può eseguire.
In questo esempio, rimuoviamo la capability NET_RAW. Il comando ping, che richiede NET_RAW, non riuscirà quindi a essere eseguito, dimostrando la limitazione.
docker run --rm -it --cap-drop=NET_RAW alpine ping -c 1 localhost || echo "Ping failed: NET_RAW capability dropped!"Controllare le risorse dei container
I container condividono il kernel e le risorse dell'host. L'uso incontrollato delle risorse da parte di un container può causare una negazione del servizio (DoS) per altri container o persino per l'host stesso.
- Limiti della CPU: Impediscono a un container di monopolizzare i cicli della CPU.
- Limiti di memoria: Impediscono a un container di consumare tutta la RAM disponibile, evitando l'instabilità del sistema.
Implementare limiti per le risorse
È possibile impostare direttamente i limiti di CPU e memoria con docker run. Questo esempio limita la memoria a 128 MB e l'utilizzo della CPU a 0.5 (metà di un core della CPU).
In questo modo si garantisce che il container si comporti correttamente senza privare di risorse gli altri processi.
docker run --rm -it --memory="128m" --cpus="0.5" alpine sh -c "echo 'Container running with limited resources.' && free -h"Filesystem di sola lettura
Molte applicazioni non devono scrivere nel proprio filesystem root dopo l'avvio. Rendendo il filesystem di sola lettura, si ottengono importanti vantaggi in termini di sicurezza:
- Impedisce le manomissioni: Un attaccante non può modificare i file esistenti né scrivere nuovi file dannosi.
- Limita la persistenza: Qualsiasi modifica effettuata è temporanea e viene persa al riavvio del container.
- Impone l'immutabilità: Favorisce una progettazione in cui i container sono temporanei e la configurazione è esterna.
Distribuire container di sola lettura
Usi il flag --read-only quando esegue un container. Qualsiasi tentativo di scrivere nel filesystem del container (al di fuori dei volumi montati esplicitamente) non andrà a buon fine.
Provi a creare un file in questo container di sola lettura:
docker run --rm -it --read-only alpine sh -c "touch /test.txt || echo 'Error: Cannot write to read-only filesystem!'"Verifica della sicurezza a runtime
Quali tra le seguenti sono buone pratiche per proteggere i container a runtime?
Riepilogo della sicurezza a runtime
Ottimo lavoro! Ha appreso come migliorare la sicurezza dei container mentre sono in esecuzione:
- Privilegio minimo: Concedere solo i permessi necessari.
- Utenti non root: Evitare di eseguire i processi come
root. - Capabilities: Rimuovere le Linux Capabilities non necessarie.
- Limiti delle risorse: Controllare l'utilizzo di CPU e memoria.
- Sola lettura: Rendere i filesystem immutabili per impedire le scritture.
Queste pratiche riducono significativamente la superficie di attacco e l'impatto di eventuali compromissioni. Continui a esercitarsi!
Domande Frequenti
La lezione «Sicurezza dei container a runtime» è gratuita?
Sì — il testo completo di «Sicurezza dei container a runtime» è gratuito qui sul web. Per esercitarvi in modo interattivo (un editor di codice integrato e un tutor IA 24/7) e sbloccare il resto del corso DevOps Bootcamp, passa a CoddyKit PRO. Il corso DevOps Bootcamp include 4 lezioni in totale.
Cosa imparerò in «Sicurezza dei container a runtime»?
Applichi le best practice per proteggere i container durante l'esecuzione, inclusi i privilegi degli utenti e i limiti delle risorse. Eserciti DevOps Bootcamp con codice pratico che esegui direttamente nel browser, e un tutor IA 24/7 risponde alle tue domande mentre lavori sulla lezione.
Ho bisogno di esperienza per iniziare DevOps Bootcamp?
Non è richiesta alcuna esperienza precedente. DevOps Bootcamp su CoddyKit è strutturato per principianti e studenti avanzati, quindi puoi iniziare da qui o dall'inizio e procedere al tuo ritmo. Questa è la lezione 2 di 4.
Quanto tempo richiede la lezione «Sicurezza dei container a runtime»?
La maggior parte delle lezioni CoddyKit richiede circa 5–10 minuti. Ogni lezione è breve e interattiva, quindi fai progressi costanti e riprendi esattamente da dove hai lasciato su web e app.
Posso scrivere ed eseguire codice in questa lezione DevOps Bootcamp?
Sì. Ogni lezione DevOps Bootcamp include un editor di codice integrato, quindi scrivi ed esegui codice reale direttamente nel tuo browser e ricevi feedback istantaneo dall'IA — nessuna configurazione locale necessaria.
Tutte le lezioni di questo corso
- Scansione di sicurezza delle immagini dei container
- Sicurezza dei container a runtime
- Gestione dei Secret e RBAC
- Network policy e networking con privilegi minimi