feat(02-02): create tutorial part 3 - verification and non-root containers
- Step-by-step verification of IAM configuration - Multiple methods to verify non-root execution - Explains principle of least privilege - Integrates with automated test scripts
This commit is contained in:
232
labs/lab-01-iam/tutorial/03-verify-iam-setup.md
Normal file
232
labs/lab-01-iam/tutorial/03-verify-iam-setup.md
Normal file
@@ -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}}" {}'
|
||||
```
|
||||
Reference in New Issue
Block a user