4.9 KiB
Tutorial: Verifica Configurazione IAM e Container Non-Root
In questo tutorial verificherai l'intera configurazione IAM e imparerai a far girare container come utente non-root, seguendo il principio del minimo privilegio.
Obiettivo
Verificare che la configurazione IAM funzioni e far girare container come utente non-root (INF-01).
Prerequisiti
- Completati Tutorial 1 e Tutorial 2
- L'utente
lab01_studentesiste ed è nel gruppo docker
Passo 1: Esegui lo script di verifica
Il lab include uno script automatizzato per verificare tutto.
Esegui:
cd labs/lab-01-iam
bash tests/99-final-verification.sh
Questo comando controllerà:
- Configurazione utenti e gruppi
- Accesso Docker
- Esecuzione container non-root
Se tutti i check sono verdi, sei pronto per procedere!
Nota: lo script finale controlla la configurazione risultante del lab. Non sostituisce i passaggi pratici dei tutorial 1 e 2.
Passo 2: Verifica manuale - Accesso Docker
Verifichiamo manualmente che l'utente possa accedere a Docker.
Esegui:
# Verifica che docker ps funzioni
sudo -u lab01_student -i docker ps
# Verifica informazioni sul sistema Docker
sudo -u lab01_student -i docker info
Entrambi i comandi dovrebbero funzionare senza errori.
Passo 3: Usa il Dockerfile di test NON-ROOT
Il lab include gia un file Dockerfile.test che crea un container non-root. In questo passo lo usi direttamente, senza riscriverlo.
Esegui:
cd labs/lab-01-iam
# Verifica che il file esista
ls -l Dockerfile.test
Spiegazione:
- Il file crea un utente
appusercon UID 1000 - Passa a questo utente con
USER - Il container ora girera come
appuser, non comeroot
Se vuoi eseguire i prossimi comandi come l'utente appena autorizzato, apri prima una sessione login pulita con sudo -u lab01_student -i.
Passo 4: Build e run del container
Ora costruiamo e facciamo partire il container.
Esegui:
# Rimuovi eventuale container rimasto da prove precedenti
docker rm -f lab01-test-container 2>/dev/null || true
# Costruisci l'immagine
docker build -f Dockerfile.test -t test-non-root:latest .
# Fai partire il container
docker run --name lab01-test-container -d test-non-root:latest
Atteso:
- Build completa senza errori
- Container ID viene mostrato
Passo 5: Verifica che il container NON gira come root
Verifichiamo l'utente del container in tre modi.
Esegui:
# Metodo 1: docker exec whoami
docker exec lab01-test-container whoami
Atteso:
appuser
Esegui:
# Metodo 2: docker inspect
docker inspect lab01-test-container --format='{{.Config.User}}'
Atteso:
appuser
Esegui:
# Metodo 3: docker top (mostra il processo sull'host)
docker top lab01-test-container
Atteso:
- La colonna USER NON deve mostrare
rooto0 - A seconda dell'host puoi vedere
1000,appuseroppure il nome utente host associato a UID 1000
Passo 6: Pulisci il container di test
Dopo aver verificato, puliamo il container di test.
Esegui:
# Ferma e rimuovi il container
docker stop lab01-test-container
docker rm lab01-test-container
# Rimuovi l'immagine
docker rmi test-non-root:latest
Principio del Minimo Privilegio
Perché NON usare root nei container?
| Rischio Root | Mitigazione Non-Root |
|---|---|
| Container compromesso = host compromesso | Utente limitato = danno contenuto |
| Container può leggere/scrivere qualsiasi file sull'host | Container può solo accedere ai suoi file |
| Escalation privilegi possibile | Privilegi già limitati |
Questo è lo stesso principio di IAM in cloud: dai solo i permessi minimi necessari.
Verifica
Hai completato questo tutorial quando:
- Il container di test gira come utente non-root
- I metodi 1 e 2 mostrano l'utente non-root del container
- Il metodo 3 mostra l'utente host che ha avviato il container
- Capisci perché INF-01 è importante per la sicurezza
Troubleshooting
Problema: docker exec mostra "root"
Soluzione: Verifica che il Dockerfile di test contenga USER appuser oppure che il docker-compose.yml abbia la direttiva user:.
# Verifica che Dockerfile.test passi all'utente non-root
grep "^USER" Dockerfile.test
# Oppure verifica che user: sia nel docker-compose.yml
grep "user:" docker-compose.yml
Problema: docker top mostra "root" o username sbagliato
Soluzione: usa docker exec e docker inspect come fonti principali. docker top mostra il processo visto dall'host e puo visualizzare un UID numerico o un nome utente host, ma non deve mostrare root.
Problema: Il test INF-01 fallisce
Soluzione: Assicurati che TUTTI i container abbiano la direttiva USER o user:
# Controlla tutti i container
docker ps --format "{{.Names}}" | xargs -I {} sh -c 'echo "Container: {}" && docker inspect --format="{{.Config.User}}" {}'