# 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 cd labs/lab-01-iam bash tests/99-final-verification.sh ``` Questo comando controllerà: 1. Configurazione utenti e gruppi 2. Accesso Docker 3. 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: ```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: 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: ```bash cd labs/lab-01-iam # Verifica che il file esista ls -l Dockerfile.test ``` Spiegazione: - Il file crea un utente `appuser` con UID 1000 - Passa a questo utente con `USER` - Il container ora girera come `appuser`, non come `root` 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: ```bash # 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: ```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 NON deve mostrare `root` o `0` - A seconda dell'host puoi vedere `1000`, `appuser` oppure il nome utente host associato a UID 1000 --- ## Passo 6: 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: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:`. ```bash # 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: ```bash # Controlla tutti i container docker ps --format "{{.Names}}" | xargs -I {} sh -c 'echo "Container: {}" && docker inspect --format="{{.Config.User}}" {}' ```