Files
laboratori-cloud/labs/lab-01-iam/tutorial/03-verify-iam-setup.md
T
2026-04-09 14:23:03 +02:00

214 lines
4.5 KiB
Markdown

# 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
docker build -f Dockerfile.test -t test-non-root .
# Fai partire il container
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 il tuo username corrente (non `root`)
---
## 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
```
---
## 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 docker-compose.yml abbia la direttiva `user:`
```bash
# Verifica che user: sia nel docker-compose.yml
grep "user:" docker-compose.yml
# Dovrebbe mostrare: user: "1000:1000"
```
**Problema: `docker top` mostra "root" o username sbagliato**
Soluzione: Il container è stato avviato come root o da un utente diverso. Verifica con `docker inspect` o riavvia il container correttamente.
**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}}" {}'
```