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 Docker & DevOps Fundamentals 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 Docker & DevOps Fundamentals, e i tuoi progressi si sincronizzano tra il web e l'app CoddyKit. Il corso Docker & DevOps Fundamentals 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 Docker & DevOps Fundamentals, passa a CoddyKit PRO. Il corso Docker & DevOps Fundamentals 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 Docker & DevOps Fundamentals 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 Docker & DevOps Fundamentals?
Non è richiesta alcuna esperienza precedente. Docker & DevOps Fundamentals 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 Docker & DevOps Fundamentals?
Sì. Ogni lezione Docker & DevOps Fundamentals 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