211 lines
4.9 KiB
Markdown
211 lines
4.9 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
|
|
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}}" {}'
|
|
```
|