fix(lab-01): align student flow and final verification

This commit is contained in:
Luca Sacchi Ricciardi
2026-04-10 13:03:43 +00:00
parent 89c8e6ae07
commit 49e15f7ea2
10 changed files with 121 additions and 55 deletions
@@ -11,6 +11,7 @@ Creare un utente Linux `lab01_student` che non ha accesso iniziale a Docker, sim
- Accesso a un terminale Linux con privilegi sudo
- Docker Engine installato e in esecuzione
- Comandi base: `useradd`, `groups`, `id`
- I comandi `sudo` richiedono la password del TUO utente corrente in una sessione interattiva
---
@@ -21,15 +22,15 @@ Prima di creare utenti, verifichiamo che l'ambiente sia pronto.
Esegui:
```bash
# Verifica che Docker sia in esecuzione
sudo systemctl status docker
# Verifica che Docker risponda correttamente
docker info >/dev/null && echo "Docker raggiungibile"
# Verifica che il gruppo docker esista
getent group docker
```
Atteso:
- Docker deve essere "active (running)"
- `docker info` non deve restituire errori
- Il gruppo docker deve essere mostrato
Se qualcosa non funziona, consulta [Troubleshooting](#troubleshooting).
@@ -39,10 +40,16 @@ Se qualcosa non funziona, consulta [Troubleshooting](#troubleshooting).
## Passo 2: Crea un nuovo utente Linux
Creiamo un utente che simulerà un utente cloud senza permessi IAM.
Se hai gia eseguito il lab in precedenza, riparti da uno stato pulito rimuovendo l'utente prima di ricrearlo.
Esegui:
```bash
# Se l'utente esiste già, rimuovilo e ricrealo
if id lab01_student &>/dev/null; then
sudo userdel -r lab01_student
fi
# Crea l'utente lab01_student
sudo useradd -m -s /bin/bash lab01_student
@@ -101,6 +108,8 @@ permission denied while trying to connect to the Docker daemon socket
```
Questo è il comportamento corretto! L'utente non ha ancora permessi Docker.
In questo passo usiamo volutamente `sudo -u` senza `-i` per mostrare il fallimento iniziale dell'accesso al socket Docker.
L'output esatto puo cambiare leggermente in base alla versione di Docker, ma il punto chiave e che l'accesso venga negato.
---
@@ -140,7 +149,9 @@ Soluzione:
```bash
# Elimina l'utente esistente e ricrealo
sudo userdel -r lab01_student
if id lab01_student &>/dev/null; then
sudo userdel -r lab01_student
fi
sudo useradd -m -s /bin/bash lab01_student
```
@@ -153,6 +164,10 @@ sudo systemctl start docker
sudo systemctl enable docker
```
**Problema: `docker info` fallisce con `permission denied`**
Soluzione: il tuo utente principale non ha ancora accesso a Docker. Completa prima i prerequisiti generali del corso oppure usa una sessione in cui Docker funziona gia per il tuo utente.
**Problema: Il gruppo docker non esiste**
Soluzione:
@@ -79,6 +79,9 @@ Per rendere attivi i nuovi gruppi, l'utente deve fare una di queste operazioni:
2. Eseguire `newgrp docker`
3. Eseguire `su - lab01_student`
Nel lab, il modo più semplice per verificare subito il nuovo accesso è usare `sudo -u lab01_student -i ...`, che apre una sessione login pulita.
Senza `-i`, un comando come `sudo -u lab01_student docker ps` puo ancora fallire anche se `groups lab01_student` mostra gia il gruppo `docker`.
---
## Passo 4: Verifica l'accesso Docker
@@ -88,17 +91,31 @@ Ora verifichiamo che l'utente può accedere a Docker.
Esegui:
```bash
# Metodo 1: Usa newgrp per attivare il gruppo nella sessione corrente
# Controlla i gruppi attivi nella nuova sessione login
sudo -u lab01_student -i groups
# Verifica che docker ps ora funzioni
sudo -u lab01_student -i docker ps
```
Atteso:
```
lab01_student docker
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
```
Il comando funziona! L'utente ora ha accesso Docker.
Il comando funziona! L'utente ora ha accesso Docker nella nuova sessione login.
Se preferisci una sessione interattiva vera e propria, puoi anche fare:
```bash
sudo -u lab01_student -i
groups
docker ps
exit
```
---
@@ -165,6 +182,10 @@ groups lab01_student
# Se non vedi "docker", ripeti il Passo 2
```
**Problema: `sudo` chiede la password**
Soluzione: e normale. Esegui i comandi in una sessione terminale interattiva e inserisci la password del tuo utente corrente quando richiesta.
**Problema: Il socket Docker ha permessi errati**
Soluzione:
+27 -30
View File
@@ -20,18 +20,19 @@ Il lab include uno script automatizzato per verificare tutto.
Esegui:
```bash
bash labs/lab-01-iam/tests/99-final-verification.sh
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
4. Documentazione completa
5. Parallelismi IAM
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
@@ -52,35 +53,25 @@ Entrambi i comandi dovrebbero funzionare senza errori.
---
## Passo 3: Crea un container NON-ROOT
## Passo 3: Usa il Dockerfile di test NON-ROOT
Ora creiamo un container che gira come utente non-root, seguendo il principio del minimo privilegio.
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
# 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
# Verifica che il file esista
ls -l Dockerfile.test
```
Spiegazione:
- Creiamo un utente `appuser` con UID 1000
- Passiamo a questo utente con `USER`
- Il container ora girerà come `appuser`, non come `root`
- 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`.
---
@@ -91,11 +82,14 @@ 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 .
docker build -f Dockerfile.test -t test-non-root:latest .
# Fai partire il container
docker run --name lab01-test-container -d test-non-root
docker run --name lab01-test-container -d test-non-root:latest
```
Atteso:
@@ -142,7 +136,8 @@ docker top lab01-test-container
```
Atteso:
- La colonna USER mostra il tuo username corrente (non `root`)
- 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
---
@@ -158,7 +153,7 @@ docker stop lab01-test-container
docker rm lab01-test-container
# Rimuovi l'immagine
docker rmi test-non-root
docker rmi test-non-root:latest
```
---
@@ -191,17 +186,19 @@ Hai completato questo tutorial quando:
**Problema: `docker exec` mostra "root"**
Soluzione: Verifica che il docker-compose.yml abbia la direttiva `user:`
Soluzione: Verifica che il Dockerfile di test contenga `USER appuser` oppure che il `docker-compose.yml` abbia la direttiva `user:`.
```bash
# Verifica che user: sia nel docker-compose.yml
# 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
# 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.
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**