diff --git a/labs/lab-01-iam/reference/docker-socket-permissions.md b/labs/lab-01-iam/reference/docker-socket-permissions.md new file mode 100644 index 0000000..cc6f1c2 --- /dev/null +++ b/labs/lab-01-iam/reference/docker-socket-permissions.md @@ -0,0 +1,116 @@ +# Reference: Permessi del Socket Docker + +Specifiche tecniche del socket Docker Unix domain socket e controllo accessi. + +## Percorso del Socket + +``` +/var/run/docker.sock +``` + +## Permessi Standard + +``` +srw-rw---- 1 root docker 0 Mar 24 20:00 /var/run/docker.sock +``` + +| Campo | Valore | Significato | +|-------|--------|-------------| +| Tipo | `s` | Socket Unix domain | +| Permessi | `rw-rw----` (660) | Owner e gruppo possono leggere/scrivere | +| Owner | `root` | Il demone Docker gira come root | +| Gruppo | `docker` | Membri del gruppo docker possono accedere | +| Altro | `---` | Nessun altro permesso | + +## Controllo Accessi + +L'accesso al socket è controllato dai permessi file system standard Linux: + +### Chi puo accedere? + +| Utente | Accesso | Motivo | +|--------|---------|--------| +| root | Si | Proprietario del socket | +| Membri del gruppo docker | Si | Permesso gruppo (rw) | +| Altri utenti | No | Nessun permesso | + +### Verifica Permessi + +```bash +# Mostra permessi dettagliati +stat -c "%a %U %G %n" /var/run/docker.sock +# Output: 660 root docker /var/run/docker.sock + +# Verifica gruppo del socket +stat -c "%G" /var/run/docker.sock +# Output: docker + +# Verifica proprietario +stat -c "%U" /var/run/docker.sock +# Output: root +``` + +## Modifica Permessi + +```bash +# Modifica permessi (non raccomandato: 666 permette accesso a tutti) +sudo chmod 660 /var/run/docker.sock + +# Modifica gruppo +sudo chown root:docker /var/run/docker.sock + +# Modifica proprietario (non raccomandato) +sudo chown $USER /var/run/docker.sock +``` + +⚠️ **WARNING:** Non usare mai `chmod 666` o `777` sul socket Docker. Questo elimina tutti i controlli di accesso. + +## Docker Daemon e Socket + +### Allocazione Socket + +Il demone Docker crea il socket all'avvio: + +```bash +# Avvia demone (crea/ricrea socket) +sudo systemctl start docker + +# Riavvia per ripristinare permessi +sudo systemctl restart docker +``` + +### Rootless Docker + +Con rootless Docker, il socket si trova in: + +``` +$XDG_RUNTIME_DIR/docker.sock +# Tipicamente: /run/user/1000/docker.sock +``` + +## Troubleshooting + +| Problema | Diagnosi | Soluzione | +|----------|----------|-----------| +| Permission denied | Utente non in gruppo docker | `sudo usermod -aG docker $USER` | +| Socket non trovato | Docker non in esecuzione | `sudo systemctl start docker` | +| Permessi errati | chmod eseguito sul socket | `sudo systemctl restart docker` | +| Gruppo errato | Chown sul socket | `sudo chown root:docker /var/run/docker.sock` | + +## Comandi Rapidi + +```bash +# Verifica permessi attuali +ls -l /var/run/docker.sock + +# Verifica chi puo accedere +namei -l /var/run/docker.sock + +# Trova processi con handle al socket +sudo lsof /var/run/docker.sock +``` + +## Vedi Anche + +- [Reference: Utenti e Gruppi Linux](./linux-users-groups.md) +- [Explanation: Parallelismi IAM](../explanation/docker-iam-parallels.md) diff --git a/labs/lab-01-iam/reference/iam-parallels.md b/labs/lab-01-iam/reference/iam-parallels.md new file mode 100644 index 0000000..4efce84 --- /dev/null +++ b/labs/lab-01-iam/reference/iam-parallels.md @@ -0,0 +1,126 @@ +# Reference: Parallelismi Docker e AWS IAM + +Tabella di riferimento rapido per i parallelismi tra concetti Docker/Linux e AWS IAM. + +## Tabella Parallelismi + +| Concetto Locale | AWS IAM Equivalente | Descrizione | +|-----------------|---------------------|-------------| +| Utente Linux (`student1`) | IAM User | Identità che può autenticarsi | +| Gruppo Linux (`docker`) | IAM Group | Collezione di utenti con stessi permessi | +| Permessi file/socket | IAM Policy | Regole che definiscono cosa è permesso | +| `/var/run/docker.sock` | Service Endpoint | Risorsa protetta da controlli accesso | +| `sudo` elevation | IAM Role Assumption | Temporanea elevazione privilegi | +| `usermod -aG docker` | `AttachUserPolicy` | Assegna permessi a utente | +| Appartenenza gruppo `docker` | Policy attachment | Permessi attivi per utente | + +## Comandi a Confronto + +### Creazione Utente + +| Operazione Locale | Comando AWS | +|-------------------|-------------| +| `sudo useradd -m user` | `aws iam create-user --user-name user` | +| `sudo passwd user` | `aws iam create-login-profile --user-name user --password Pass123!` | + +### Gestione Permessi + +| Operazione Locale | Comando AWS | +|-------------------|-------------| +| `sudo usermod -aG docker user` | `aws iam attach-user-policy --user-name user --policy-arn arn:aws:iam::aws:policy/PowerUserAccess` | +| `sudo gpasswd -d user docker` | `aws iam detach-user-policy --user-name user --policy-arn arn:aws:iam::aws:policy/PowerUserAccess` | + +### Verifica Permessi + +| Operazione Locale | Comando AWS | +|-------------------|-------------| +| `groups user` | `aws iam list-attached-user-policies --user-name user` | +| `id user` | `aws iam get-user --user-name user` | +| `sudo -u user docker ps` | `aws sts get-caller-identity` | + +### Elevazione Privilegi + +| Operazione Locale | Comando AWS | +|-------------------|-------------| +| `sudo command` | Assumere IAM Role | +| `su - root` | `aws sts assume-role` | + +## Differenze Chiave + +| Aspetto | Locale | Cloud AWS | +|---------|--------|-----------| +| Autenticazione | Password, SSH key | Access key, Secret key, Session token | +| Autorizzazione | Gruppi Linux, permessi file | IAM Policies, JSON document | +| Scope | Singolo host | Account AWS intero | +| Audit | `last`, `/var/log/auth.log` | CloudTrail | +| MFA | Non disponibile | Disponibile | + +## Modelli di Policy + +### Modello Allow + +**Locale:** + +```bash +# Utente nel gruppo docker puo accedere al socket +sudo usermod -aG docker utente +``` + +**AWS:** + +```json +{ + "Effect": "Allow", + "Action": "docker:*", + "Resource": "*" +} +``` + +### Modello Deny + +**Locale:** + +```bash +# Utente NON nel gruppo docker non puo accedere +# (default deny) +``` + +**AWS:** + +```json +{ + "Effect": "Deny", + "Action": "docker:*", + "Resource": "*" +} +``` + +## Best Practices Comuni + +| Best Practice | Locale | Cloud | +|---------------|--------|-------| +| Minimo privilegio | Utenti non-root | IAM Policies restrittive | +| Separazione doveri | Gruppi distinti | Gruppi IAM distinti | +| Audit logging | auth.log | CloudTrail | +| Rotazione credenziali | `chage` | Rotate access keys | + +## Comandi Utili + +```bash +# Verifica membri gruppo docker +getent group docker + +# Simulazione AWS: lista politiche IAM +aws iam list-attached-user-policies --user-name user + +# Verifica permessi socket +ls -l /var/run/docker.sock + +# Simulazione AWS: simula accesso AWS +aws sts get-caller-identity +``` + +## Vedi Anche + +- [Explanation: Docker IAM Parallels](../explanation/docker-iam-parallels.md) +- [Tutorial: Permessi Docker](../tutorial/02-docker-group-permissions.md) diff --git a/labs/lab-01-iam/reference/linux-users-groups.md b/labs/lab-01-iam/reference/linux-users-groups.md new file mode 100644 index 0000000..54414e9 --- /dev/null +++ b/labs/lab-01-iam/reference/linux-users-groups.md @@ -0,0 +1,223 @@ +# Reference: Utenti e Gruppi Linux + +Specifiche tecniche per la gestione utenti e gruppi in Linux per il lab IAM. + +## Comandi Utente + +### useradd - Crea utente + +```bash +sudo useradd -m -s /bin/bash nome_utente +``` + +| Flag | Significato | +|------|-------------| +| `-m` | Crea home directory | +| `-s /bin/bash` | Imposta shell di login | +| `-G group1,group2` | Aggiunge a gruppi supplementari | +| `-u 1000` | Specifica UID | + +### usermod - Modifica utente + +```bash +# Aggiungi a gruppo (append) +sudo usermod -aG docker nome_utente + +# Modifica shell +sudo usermod -s /bin/zsh nome_utente + +# Modifica gruppi supplementari (sovrascrive) +sudo usermod -G docker,nome_utente nome_utente +``` + +⚠️ **IMPORTANTE:** Usa `-aG` (append) per aggiungere a un gruppo senza rimuovere gli altri. + +### userdel - Elimina utente + +```bash +# Elimina utente (mantieni home) +sudo userdel nome_utente + +# Elimina utente e home directory +sudo userdel -r nome_utente +``` + +### passwd - Imposta password + +```bash +# Imposta password per utente +sudo passwd nome_utente + +# Cambia la tua password +passwd +``` + +## Comandi Gruppo + +### groupadd - Crea gruppo + +```bash +sudo groupadd docker +``` + +### groupmod - Modifica gruppo + +```bash +# Rinomina gruppo +sudo groupmod -n nuovo_nome vecchio_nome + +# Modifica GID +sudo groupmod -g 1001 docker +``` + +### gpasswd - Gestisci membri gruppo + +```bash +# Aggiungi utente al gruppo +sudo gpasswd -a utente gruppo + +# Rimuovi utente dal gruppo +sudo gpasswd -d utente gruppo + +# Imposta amministratori gruppo +sudo gpasswd -A utente1,utente2 gruppo +``` + +### groupdel - Elimina gruppo + +```bash +sudo groupdelete docker +``` + +## Comandi Informazione + +### id - Mostra info utente + +```bash +# Mostra UID, GID e gruppi dell'utente corrente +id + +# Mostra info di un utente specifico +id nome_utente + +# Solo UID +id -u nome_utente + +# Solo gruppi +id -G nome_utente +``` + +Output esempio: + +``` +uid=1001(lab01_student) gid=1001(lab01_student) groups=1001(lab01_student),999(docker) +``` + +### groups - Mostra gruppi utente + +```bash +# Gruppi dell'utente corrente +groups + +# Gruppi di un utente specifico +groups nome_utente +``` + +### getent - Query database di sistema + +```bash +# Verifica che un gruppo esista +getent group docker + +# Output: docker:x:999:utente1,utente2 +# nome:x:GID:lista_membri + +# Verifica che un utente esista +getent passwd nome_utente + +# Output: nome_utente:x:1001:1001:,,,:/home/nome_utente:/bin/bash +# nome:x:UID:GID:commento:home:shell +``` + +## File di Configurazione + +### /etc/passwd + +```bash +# Visualizza tutti gli utenti +cat /etc/passwd + +# Aggiungi utente manualmente (non raccomandato) +echo "utente:x:1001:1001::/home/utente:/bin/bash" | sudo tee -a /etc/passwd +``` + +Formato: + +``` +username:x:UID:GID:commento:home:shell +``` + +### /etc/group + +```bash +# Visualizza tutti i gruppi +cat /etc/group + +# Aggiungi gruppo manualmente +echo "docker:x:999:utente1,utente2" | sudo tee -a /etc/group +``` + +Formato: + +``` +gruppo:x:GID:lista_membri +``` + +### /etc/shadow + +```bash +# Password e scadenza (richiede root) +sudo cat /etc/shadow +``` + +## Valutazione Gruppi al Login + +I gruppi vengono valutati quando l'utente fa login: + +| Momento | Gruppi Valutati | +|---------|-----------------| +| Avvio sistema | No | +| Login interattivo | Si | +| `su - utente` | Si (nuovo login) | +| `newgrp group` | Si (solo sessione corrente) | +| `sudo -u utente cmd` | No (gruppi dell'utente originale) | +| Aggiunta gruppo con usermod | No (fino al prossimo login) | + +## UID/GID Standard + +| UID/GID | Utente/Gruppo | +|---------|---------------| +| 0 | root | +| 1-999 | Utenti di sistema | +| 1000-60000 | Utenti normali | +| 999 | docker (tipico) | + +## Comandi Rapidi + +```bash +# Lista tutti gli utenti umani +cat /etc/passwd | grep ':[1-9][0-9][0-9][0-9]:' + +# Lista tutti i gruppi +cat /etc/group | cut -d: -f1 + +# Utenti in un gruppo +members gruppo +# Oppure: +getent group gruppo | cut -d: -f4 +``` + +## Vedi Anche + +- [Reference: Permessi Socket Docker](./docker-socket-permissions.md) +- [How-To: Aggiungi Utente al Gruppo Docker](../how-to-guides/add-user-to-docker-group.md)