fix(lab-01): align student flow and final verification
This commit is contained in:
@@ -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:
|
||||
|
||||
@@ -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**
|
||||
|
||||
|
||||
Reference in New Issue
Block a user