# Tutorial: Permessi Docker tramite Gruppi Linux In questo tutorial imparerai come dare permessi Docker a un utente tramite l'appartenenza al gruppo `docker`. Questo simula l'assegnazione di policy IAM a un utente cloud. ## Obiettivo Aggiungere l'utente `lab01_student` al gruppo `docker`, permettendo l'accesso al socket Docker. ## Prerequisiti - Completato [Tutorial 1: Creare Utenti Linux](./01-create-linux-users.md) - L'utente `lab01_student` esiste e NON è nel gruppo docker --- ## Passo 1: Verifica lo stato corrente Prima di modificare i permessi, verifichiamo lo stato attuale. Esegui: ```bash # Verifica i gruppi dell'utente groups lab01_student # Verifica i permessi del socket Docker ls -l /var/run/docker.sock ``` Atteso: - `groups` mostra solo `lab01_student` (NON docker) - Il socket Docker ha permessi `srw-rw----` ed è di proprietà `root:docker` Spiegazione: Il socket Docker (`/var/run/docker.sock`) è accessibile solo a `root` e ai membri del gruppo `docker`. --- ## Passo 2: Aggiungi l'utente al gruppo docker Ora aggiungiamo l'utente al gruppo per dargli accesso Docker. Esegui: ```bash # Aggiungi lab01_student al gruppo docker sudo usermod -aG docker lab01_student # Verifica l'appartenenza al gruppo groups lab01_student ``` Atteso: ``` lab01_student : lab01_student docker ``` Nota: Il gruppo `docker` ora appare nell'elenco! Spiegazione: - `-aG` significa "append" (aggiunge senza rimuovere altri gruppi) e "group" (modifica i gruppi) - Questo è equivalente ad assegnare una policy IAM a un utente cloud --- ## Passo 3: Importante - Login necessario I gruppi vengono valutati al momento del login. La sessione corrente dell'utente non vedrà ancora il nuovo gruppo. Per verificare il gruppo membership (senza dover fare login): ```bash # Questo mostra i gruppi anche se non sono ancora attivi nella sessione groups lab01_student ``` Per rendere attivi i nuovi gruppi, l'utente deve fare una di queste operazioni: 1. Fare logout e login 2. Eseguire `newgrp docker` 3. Eseguire `su - lab01_student` --- ## Passo 4: Verifica l'accesso Docker Ora verifichiamo che l'utente può accedere a Docker. Esegui: ```bash # Metodo 1: Usa newgrp per attivare il gruppo nella sessione corrente sudo -u lab01_student -i docker ps ``` Atteso: ``` CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES ``` Il comando funziona! L'utente ora ha accesso Docker. --- ## Passo 5: Verifica con un container di test Facciamo partire un container semplice per confermare che tutto funziona. Esegui: ```bash # Esegui un container Alpine come lab01_student sudo -u lab01_student -i docker run --rm alpine:3.19 whoami ``` Atteso: ``` root ``` Nota: Il container mostra "root" perché questo è l'utente di default DENTRO il container (non è l'utente che ha lanciato il comando). Nel [Tutorial 3](./03-verify-iam-setup.md) imparerai a far girare i container come utente non-root. --- ## Parallelismo con AWS IAM | Operazione Locale | AWS IAM Equivalente | |-------------------|---------------------| | `usermod -aG docker user` | `AttachUserPolicy` o `AddUserToGroup` | | Utente nel gruppo `docker` | Utente IAM con policy permessiva | | Accesso al socket Docker | Accesso alle API AWS | --- ## Verifica Hai completato questo tutorial quando: - [ ] L'utente `lab01_student` è nel gruppo docker - [ ] L'utente può eseguire `docker ps` - [ ] L'utente può fare partire container - [ ] Capisci il parallelismo con IAM User + Policy ## Prossimo Passo Nel [prossimo tutorial](./03-verify-iam-setup.md) imparerai a verificare l'intera configurazione e a far girare container non-root. --- ## Troubleshooting **Problema: L'utente non può ancora eseguire docker ps** Soluzione 1: Verifica di aver usato `sudo -u lab01_student -i` ```bash # Il flag -i è importante per caricare l'ambiente corretto sudo -u lab01_student -i docker ps ``` Soluzione 2: Verifica che l'utente sia nel gruppo ```bash groups lab01_student # Se non vedi "docker", ripeti il Passo 2 ``` **Problema: Il socket Docker ha permessi errati** Soluzione: ```bash # Correggi i permessi del socket sudo chmod 660 /var/run/docker.sock sudo chown root:docker /var/run/docker.sock ``` **Problema: `usermod: user 'lab01_student' does not exist`** Soluzione: Prima crea l'utente seguendo il [Tutorial 1](./01-create-linux-users.md).