diff --git a/labs/lab-01-iam/tutorial/03-verify-iam-setup.md b/labs/lab-01-iam/tutorial/03-verify-iam-setup.md new file mode 100644 index 0000000..5778af3 --- /dev/null +++ b/labs/lab-01-iam/tutorial/03-verify-iam-setup.md @@ -0,0 +1,232 @@ +# 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](./01-create-linux-users.md) e [Tutorial 2](./02-docker-group-permissions.md) +- L'utente `lab01_student` esiste ed è nel gruppo docker + +--- + +## Passo 1: Esegui lo script di verifica + +Il lab include uno script automatizzato per verificare tutto. + +Esegui: + +```bash +bash labs/lab-01-iam/tests/99-final-verification.sh +``` + +Questo comando controllerà: +1. Configurazione utenti e gruppi +2. Accesso Docker +3. Esecuzione container non-root +4. Documentazione completa +5. Parallelismi IAM + +Se tutti i check sono verdi, sei pronto per procedere! + +--- + +## Passo 2: Verifica manuale - Accesso Docker + +Verifichiamo manualmente che l'utente possa accedere a Docker. + +Esegui: + +```bash +# 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: Crea un container NON-ROOT + +Ora creiamo un container che gira come utente non-root, seguendo il principio del minimo privilegio. + +Esegui: + +```bash +cd labs/lab-01-iam + +# Crea un Dockerfile di test +cat > Dockerfile.test << 'EOF' +FROM alpine:3.19 + +# Crea un utente non-root +RUN addgroup -g 1000 appgroup && \ + adduser -D -u 1000 -G appgroup appuser + +# Passa all'utente non-root +USER appuser + +# Verifica che il container gira come appuser +CMD ["sh", "-c", "whoami && sleep 3600"] +EOF +``` + +Spiegazione: +- Creiamo un utente `appuser` con UID 1000 +- Passiamo a questo utente con `USER` +- Il container ora girerà come `appuser`, non come `root` + +--- + +## Passo 4: Build e run del container + +Ora costruiamo e facciamo partire il container. + +Esegui: + +```bash +# Costruisci l'immagine +sudo -u lab01_student -i docker build -f Dockerfile.test -t test-non-root . + +# Fai partire il container +sudo -u lab01_student -i docker run --name lab01-test-container -d test-non-root +``` + +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: + +```bash +# Metodo 1: docker exec whoami +docker exec lab01-test-container whoami +``` + +Atteso: + +``` +appuser +``` + +Esegui: + +```bash +# Metodo 2: docker inspect +docker inspect lab01-test-container --format='{{.Config.User}}' +``` + +Atteso: + +``` +appuser +``` + +Esegui: + +```bash +# Metodo 3: docker top (mostra il processo sull'host) +docker top lab01-test-container +``` + +Atteso: +- La colonna USER mostra `1000` (non `0`) + +--- + +## Passo 6: Verifica INF-01 - Nessun container root + +Il requisito INF-01 richiede che NESSUN container giri come root. + +Esegui: + +```bash +bash labs/lab-01-iam/tests/03-non-root-test.sh +``` + +Questo script verificherà tutti i container e garantirà che nessuno giri come root. + +--- + +## Passo 7: Pulisci il container di test + +Dopo aver verificato, puliamo il container di test. + +Esegui: + +```bash +# Ferma e rimuovi il container +docker stop lab01-test-container +docker rm lab01-test-container + +# Rimuovi l'immagine +docker rmi test-non-root +``` + +--- + +## 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: +- [ ] Lo script di verifica passa senza errori +- [ ] Il container di test gira come utente non-root +- [ ] Tutti e tre i metodi di verifica mostrano lo stesso utente non-root +- [ ] Capisci perché INF-01 è importante per la sicurezza + +--- + +## Troubleshooting + +**Problema: `docker exec` mostra "root"** + +Soluzione: Verifica che il Dockerfile abbia la direttiva `USER` + +```bash +# Verifica che USER sia nel Dockerfile +grep USER Dockerfile.test +# Dovrebbe mostrare: USER appuser +``` + +**Problema: `docker top` mostra UID 0** + +Soluzione: Il container potrebbe essere stato configurato con docker-compose. Verifica: + +```bash +# Verifica la direttiva user in docker-compose +grep -A 5 "user:" labs/lab-01-iam/docker-compose.yml +``` + +**Problema: Il test INF-01 fallisce** + +Soluzione: Assicurati che TUTTI i container abbiano la direttiva USER o user: + +```bash +# Controlla tutti i container +docker ps --format "{{.Names}}" | xargs -I {} sh -c 'echo "Container: {}" && docker inspect --format="{{.Config.User}}" {}' +```