fix(lab-01): align student flow and final verification
This commit is contained in:
@@ -73,3 +73,4 @@ config.local.*
|
|||||||
# Note personali
|
# Note personali
|
||||||
NOTE.md
|
NOTE.md
|
||||||
PERSONAL.md
|
PERSONAL.md
|
||||||
|
tbf.md
|
||||||
|
|||||||
@@ -0,0 +1,11 @@
|
|||||||
|
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"]
|
||||||
@@ -4,12 +4,19 @@ Configura utenti Linux, permessi Docker socket, capisci i paralleli IAM.
|
|||||||
|
|
||||||
## Avvio del Laboratorio
|
## Avvio del Laboratorio
|
||||||
|
|
||||||
|
Leggi prima i tutorial nell'ordine indicato sotto. Avvia il compose quando arrivi alla parte di verifica del container non-root.
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
cd labs/lab-01-iam
|
cd labs/lab-01-iam
|
||||||
docker build .
|
docker compose up -d --build
|
||||||
docker compose up -d
|
|
||||||
```
|
```
|
||||||
|
|
||||||
|
## Ordine Consigliato
|
||||||
|
|
||||||
|
1. `tutorial/01-create-linux-users.md`
|
||||||
|
2. `tutorial/02-docker-group-permissions.md`
|
||||||
|
3. `tutorial/03-verify-iam-setup.md`
|
||||||
|
|
||||||
## Verifica Completamento
|
## Verifica Completamento
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
|
|||||||
@@ -24,11 +24,13 @@ sudo -u nome_utente -i docker ps
|
|||||||
I gruppi vengono valutati al login. Per attivare il nuovo gruppo immediatamente:
|
I gruppi vengono valutati al login. Per attivare il nuovo gruppo immediatamente:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
# Opzione 1: newgrp (attiva solo per questo comando)
|
# Opzione 1: nuova sessione login del nuovo utente
|
||||||
|
sudo -u nome_utente -i groups
|
||||||
sudo -u nome_utente -i docker ps
|
sudo -u nome_utente -i docker ps
|
||||||
|
|
||||||
# Opzione 2: su - (nuova sessione login)
|
# Opzione 2: newgrp dentro una sessione interattiva del nuovo utente
|
||||||
su - nome_utente
|
su - nome_utente
|
||||||
|
newgrp docker
|
||||||
docker ps
|
docker ps
|
||||||
|
|
||||||
# Opzione 3: logout/login (sessione interattiva)
|
# Opzione 3: logout/login (sessione interattiva)
|
||||||
|
|||||||
@@ -95,16 +95,16 @@ su - $USER
|
|||||||
Per reset completo dell'ambiente Docker tra i lab:
|
Per reset completo dell'ambiente Docker tra i lab:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
# Usa lo script di reset
|
# Dalla root del repository
|
||||||
bash scripts/reset-env.sh
|
bash scripts/reset-env.sh
|
||||||
|
|
||||||
# Oppure reset manuale
|
# Oppure reset manuale
|
||||||
docker stop $(docker ps -aq)
|
docker ps -aq | xargs -r docker stop
|
||||||
docker rm $(docker ps -aq)
|
docker ps -aq | xargs -r docker rm
|
||||||
docker system prune -a
|
docker system prune -af
|
||||||
```
|
```
|
||||||
|
|
||||||
## Vedi Anche
|
## Vedi Anche
|
||||||
|
|
||||||
- [How-To: Ambiente Reset](../../how-to-guides/reset-docker-environment.md)
|
- [Script reset ambiente](../../../scripts/reset-env.sh)
|
||||||
- [Tutorial: Permessi Docker](../tutorial/02-docker-group-permissions.md)
|
- [Tutorial: Permessi Docker](../tutorial/02-docker-group-permissions.md)
|
||||||
|
|||||||
@@ -27,7 +27,8 @@ docker top <container_name>
|
|||||||
|
|
||||||
Guarda la colonna USER:
|
Guarda la colonna USER:
|
||||||
- `0` o `root` = NON conforme
|
- `0` o `root` = NON conforme
|
||||||
- Altri UID (es. `1000`) = CONFORME
|
- Un UID non-zero (es. `1000`) = conforme
|
||||||
|
- Su alcuni host puoi vedere il nome utente host associato allo stesso UID invece del numero
|
||||||
|
|
||||||
## Verifica Tutti i Container
|
## Verifica Tutti i Container
|
||||||
|
|
||||||
@@ -52,4 +53,4 @@ done
|
|||||||
## Vedi Anche
|
## Vedi Anche
|
||||||
|
|
||||||
- [Tutorial: Container Non-Root](../tutorial/03-verify-iam-setup.md)
|
- [Tutorial: Container Non-Root](../tutorial/03-verify-iam-setup.md)
|
||||||
- [Test: Script Non-Root](../tests/03-non-root-test.sh)
|
- [Test finale del lab](../tests/99-final-verification.sh)
|
||||||
|
|||||||
@@ -6,7 +6,7 @@
|
|||||||
set -euo pipefail
|
set -euo pipefail
|
||||||
|
|
||||||
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
||||||
PROJECT_ROOT="$(cd "$SCRIPT_DIR/../.." && pwd)"
|
PROJECT_ROOT="$(cd "$SCRIPT_DIR/../../.." && pwd)"
|
||||||
|
|
||||||
RED='\033[0;31m'
|
RED='\033[0;31m'
|
||||||
GREEN='\033[0;32m'
|
GREEN='\033[0;32m'
|
||||||
@@ -41,11 +41,15 @@ echo ""
|
|||||||
|
|
||||||
# Test 2: Docker access control
|
# Test 2: Docker access control
|
||||||
echo -e "${BLUE}[2/3] Checking Docker access control...${NC}"
|
echo -e "${BLUE}[2/3] Checking Docker access control...${NC}"
|
||||||
if sudo -u lab01_student docker ps &>/dev/null; then
|
if ! id lab01_student &>/dev/null; then
|
||||||
echo -e " ${GREEN}✓${NC} lab01_student can access Docker socket"
|
echo -e " ${RED}✗${NC} lab01_student does not exist"
|
||||||
|
all_passed=false
|
||||||
|
elif groups lab01_student 2>/dev/null | grep -q docker; then
|
||||||
|
echo -e " ${GREEN}✓${NC} lab01_student is configured for Docker access via docker group"
|
||||||
|
echo -e " ${YELLOW} Note:${NC} verify interactively with 'sudo -u lab01_student -i docker ps' if you want a live runtime check"
|
||||||
else
|
else
|
||||||
echo -e " ${RED}✗${NC} lab01_student cannot access Docker socket"
|
echo -e " ${RED}✗${NC} lab01_student is not in docker group"
|
||||||
echo -e " ${YELLOW} Hint: User may need to re-login for group membership to take effect${NC}"
|
echo -e " ${YELLOW} Hint: run 'sudo usermod -aG docker lab01_student' and open a new login session${NC}"
|
||||||
all_passed=false
|
all_passed=false
|
||||||
fi
|
fi
|
||||||
echo ""
|
echo ""
|
||||||
@@ -60,8 +64,15 @@ if [ ! -f "$compose_file" ]; then
|
|||||||
else
|
else
|
||||||
echo -e " ${GREEN}✓${NC} docker-compose.yml exists"
|
echo -e " ${GREEN}✓${NC} docker-compose.yml exists"
|
||||||
|
|
||||||
|
if docker compose -f "$compose_file" config &>/dev/null; then
|
||||||
|
echo -e " ${GREEN}✓${NC} docker-compose.yml syntax is valid"
|
||||||
|
else
|
||||||
|
echo -e " ${RED}✗${NC} docker-compose.yml has syntax errors"
|
||||||
|
all_passed=false
|
||||||
|
fi
|
||||||
|
|
||||||
# Check for user directive in services
|
# Check for user directive in services
|
||||||
if grep -A 20 "services:" "$compose_file" | grep -q "user:"; then
|
if grep -q '^[[:space:]]*user:' "$compose_file"; then
|
||||||
echo -e " ${GREEN}✓${NC} Services configured with non-root user directive"
|
echo -e " ${GREEN}✓${NC} Services configured with non-root user directive"
|
||||||
else
|
else
|
||||||
echo -e " ${RED}✗${NC} No user directive found in docker-compose.yml"
|
echo -e " ${RED}✗${NC} No user directive found in docker-compose.yml"
|
||||||
@@ -89,7 +100,7 @@ else
|
|||||||
all_passed=false
|
all_passed=false
|
||||||
fi
|
fi
|
||||||
else
|
else
|
||||||
echo -e " ${YELLOW}○${NC} No containers running (start with docker compose up)"
|
echo -e " ${YELLOW}○${NC} No containers running (start with docker compose up -d --build)"
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
echo ""
|
echo ""
|
||||||
|
|||||||
@@ -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
|
- Accesso a un terminale Linux con privilegi sudo
|
||||||
- Docker Engine installato e in esecuzione
|
- Docker Engine installato e in esecuzione
|
||||||
- Comandi base: `useradd`, `groups`, `id`
|
- 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:
|
Esegui:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
# Verifica che Docker sia in esecuzione
|
# Verifica che Docker risponda correttamente
|
||||||
sudo systemctl status docker
|
docker info >/dev/null && echo "Docker raggiungibile"
|
||||||
|
|
||||||
# Verifica che il gruppo docker esista
|
# Verifica che il gruppo docker esista
|
||||||
getent group docker
|
getent group docker
|
||||||
```
|
```
|
||||||
|
|
||||||
Atteso:
|
Atteso:
|
||||||
- Docker deve essere "active (running)"
|
- `docker info` non deve restituire errori
|
||||||
- Il gruppo docker deve essere mostrato
|
- Il gruppo docker deve essere mostrato
|
||||||
|
|
||||||
Se qualcosa non funziona, consulta [Troubleshooting](#troubleshooting).
|
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
|
## Passo 2: Crea un nuovo utente Linux
|
||||||
|
|
||||||
Creiamo un utente che simulerà un utente cloud senza permessi IAM.
|
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:
|
Esegui:
|
||||||
|
|
||||||
```bash
|
```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
|
# Crea l'utente lab01_student
|
||||||
sudo useradd -m -s /bin/bash 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.
|
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
|
```bash
|
||||||
# Elimina l'utente esistente e ricrealo
|
# Elimina l'utente esistente e ricrealo
|
||||||
|
if id lab01_student &>/dev/null; then
|
||||||
sudo userdel -r lab01_student
|
sudo userdel -r lab01_student
|
||||||
|
fi
|
||||||
sudo useradd -m -s /bin/bash lab01_student
|
sudo useradd -m -s /bin/bash lab01_student
|
||||||
```
|
```
|
||||||
|
|
||||||
@@ -153,6 +164,10 @@ sudo systemctl start docker
|
|||||||
sudo systemctl enable 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**
|
**Problema: Il gruppo docker non esiste**
|
||||||
|
|
||||||
Soluzione:
|
Soluzione:
|
||||||
|
|||||||
@@ -79,6 +79,9 @@ Per rendere attivi i nuovi gruppi, l'utente deve fare una di queste operazioni:
|
|||||||
2. Eseguire `newgrp docker`
|
2. Eseguire `newgrp docker`
|
||||||
3. Eseguire `su - lab01_student`
|
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
|
## Passo 4: Verifica l'accesso Docker
|
||||||
@@ -88,17 +91,31 @@ Ora verifichiamo che l'utente può accedere a Docker.
|
|||||||
Esegui:
|
Esegui:
|
||||||
|
|
||||||
```bash
|
```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
|
sudo -u lab01_student -i docker ps
|
||||||
```
|
```
|
||||||
|
|
||||||
Atteso:
|
Atteso:
|
||||||
|
|
||||||
```
|
```
|
||||||
|
lab01_student docker
|
||||||
|
|
||||||
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
|
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
|
# 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**
|
**Problema: Il socket Docker ha permessi errati**
|
||||||
|
|
||||||
Soluzione:
|
Soluzione:
|
||||||
|
|||||||
@@ -20,18 +20,19 @@ Il lab include uno script automatizzato per verificare tutto.
|
|||||||
Esegui:
|
Esegui:
|
||||||
|
|
||||||
```bash
|
```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à:
|
Questo comando controllerà:
|
||||||
1. Configurazione utenti e gruppi
|
1. Configurazione utenti e gruppi
|
||||||
2. Accesso Docker
|
2. Accesso Docker
|
||||||
3. Esecuzione container non-root
|
3. Esecuzione container non-root
|
||||||
4. Documentazione completa
|
|
||||||
5. Parallelismi IAM
|
|
||||||
|
|
||||||
Se tutti i check sono verdi, sei pronto per procedere!
|
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
|
## 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:
|
Esegui:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
cd labs/lab-01-iam
|
cd labs/lab-01-iam
|
||||||
|
|
||||||
# Crea un Dockerfile di test
|
# Verifica che il file esista
|
||||||
cat > Dockerfile.test << 'EOF'
|
ls -l Dockerfile.test
|
||||||
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:
|
Spiegazione:
|
||||||
- Creiamo un utente `appuser` con UID 1000
|
- Il file crea un utente `appuser` con UID 1000
|
||||||
- Passiamo a questo utente con `USER`
|
- Passa a questo utente con `USER`
|
||||||
- Il container ora girerà come `appuser`, non come `root`
|
- 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:
|
Esegui:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
|
# Rimuovi eventuale container rimasto da prove precedenti
|
||||||
|
docker rm -f lab01-test-container 2>/dev/null || true
|
||||||
|
|
||||||
# Costruisci l'immagine
|
# 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
|
# 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:
|
Atteso:
|
||||||
@@ -142,7 +136,8 @@ docker top lab01-test-container
|
|||||||
```
|
```
|
||||||
|
|
||||||
Atteso:
|
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
|
docker rm lab01-test-container
|
||||||
|
|
||||||
# Rimuovi l'immagine
|
# 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"**
|
**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
|
```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
|
grep "user:" docker-compose.yml
|
||||||
# Dovrebbe mostrare: user: "1000:1000"
|
|
||||||
```
|
```
|
||||||
|
|
||||||
**Problema: `docker top` mostra "root" o username sbagliato**
|
**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**
|
**Problema: Il test INF-01 fallisce**
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user