# 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}}" {}' ```