# Riferimento Rapido chmod

*Permessi file, modalità numerica e simbolica, bit speciali, umask*

> Source: chmod(1) Manual Page · MIT

## Modalità Numerica

### Cifre Ottali dei Permessi

| Command | Description |
|---------|-------------|
| `4` | Lettura (r) |
| `2` | Scrittura (w) |
| `1` | Esecuzione (x) |
| `0` | Nessun permesso |

### Formato a Tre Cifre

```
chmod 755 file    # rwxr-xr-x
chmod 644 file    # rw-r--r--
chmod 700 file    # rwx------
chmod 600 file    # rw-------
```

### Calcolo delle Cifre

| Command | Description |
|---------|-------------|
| `7 (4+2+1)` | rwx — lettura, scrittura, esecuzione |
| `6 (4+2)` | rw- — lettura, scrittura |
| `5 (4+1)` | r-x — lettura, esecuzione |
| `4` | r-- — solo lettura |
| `3 (2+1)` | -wx — scrittura, esecuzione |
| `2` | -w- — solo scrittura |
| `1` | --x — solo esecuzione |
| `0` | --- — nessun permesso |

## Modalità Simbolica

### Sintassi: [ugoa][+-=][rwxXst]

| Command | Description |
|---------|-------------|
| `u` | Utente (proprietario) |
| `g` | Gruppo |
| `o` | Altri |
| `a` | Tutti (u + g + o) |
| `+` | Aggiunge permesso |
| `-` | Rimuove permesso |
| `=` | Imposta permesso esatto |

### Esempi Simbolici

```
chmod u+x file         # proprietario: aggiungi esecuzione
chmod g-w file         # gruppo: rimuovi scrittura
chmod o=r file         # altri: imposta solo lettura
chmod a+r file         # tutti: aggiungi lettura
chmod u+x,g-w,o= file # operazioni combinate
```

## Permessi Comuni

### Preset Permessi File

| Command | Description |
|---------|-------------|
| `644  rw-r--r--` | File predefinito — proprietario rw, altri lettura |
| `755  rwxr-xr-x` | Script/binario — proprietario rwx, altri rx |
| `600  rw-------` | File privato — solo proprietario |
| `400  r--------` | Solo lettura privata (chiavi SSH) |
| `666  rw-rw-rw-` | File scrivibile da tutti (evitare) |
| `777  rwxrwxrwx` | Accesso completo per tutti (evitare) |

### Riferimento Rapido

```
chmod 644 *.html       # file web: proprietario rw, tutti r
chmod 755 *.sh         # script: proprietario rwx, tutti rx
chmod 600 ~/.ssh/id_*  # chiavi SSH: solo proprietario
chmod 400 secret.pem   # certificato: sola lettura
```

## Permessi Directory

### Significato dei Permessi per le Directory

| Command | Description |
|---------|-------------|
| `r (4)` | Elenca contenuto directory (`ls`) |
| `w (2)` | Crea/elimina file nella directory |
| `x (1)` | Accede (cd) alla directory |
| `rx (5)` | Lista + accesso (tipico per lettura) |
| `rwx (7)` | Controllo completo |

### Permessi Directory Comuni

```
chmod 755 dir/     # standard: proprietario rwx, altri rx
chmod 700 dir/     # privata: solo proprietario
chmod 750 dir/     # accesso gruppo: proprietario rwx, gruppo rx
chmod 1777 /tmp    # sticky bit: solo il proprietario può eliminare
```

## Bit Speciali

### Setuid, Setgid, Sticky

| Command | Description |
|---------|-------------|
| `Setuid (4xxx)` | Esegue come proprietario del file (es. `passwd`) |
| `Setgid (2xxx)` | Esegue come gruppo del file / eredita gruppo dir |
| `Sticky (1xxx)` | Solo il proprietario può eliminare file (es. `/tmp`) |

### Impostare i Bit Speciali

```
chmod 4755 program     # setuid: -rwsr-xr-x
chmod 2755 dir/        # setgid: drwxr-sr-x
chmod 1755 dir/        # sticky: drwxr-xr-t
chmod u+s program      # setuid simbolico
chmod g+s dir/         # setgid simbolico
chmod +t dir/          # sticky bit simbolico
```

## Ricorsivo

### Modifiche Ricorsive ai Permessi

```
chmod -R 755 dir/           # imposta tutto a 755 ricorsivamente
chmod -R u+rwX dir/         # proprietario rw, +x solo su dir
chmod -R go-w dir/          # rimuovi scrittura gruppo/altri
```

### File vs Directory con find

```
# imposta directory a 755, file a 644
find /path -type d -exec chmod 755 {} +
find /path -type f -exec chmod 644 {} +
```

### X maiuscola — Esecuzione Condizionale

| Command | Description |
|---------|-------------|
| `x (minuscola)` | Aggiunge esecuzione a tutti i file e directory |
| `X (maiuscola)` | Aggiunge esecuzione solo a directory e file già eseguibili |

## umask

### Come Funziona umask

| Command | Description |
|---------|-------------|
| `umask` | Mostra umask corrente |
| `umask 022` | File: 644, Directory: 755 |
| `umask 077` | File: 600, Directory: 700 |
| `umask 002` | File: 664, Directory: 775 |

### Calcolo umask

```
# permesso predefinito meno umask = permesso effettivo
# File:  666 - 022 = 644 (rw-r--r--)
# Dir:   777 - 022 = 755 (rwxr-xr-x)
umask          # mostra umask corrente
umask 022      # valore predefinito tipico
umask -S       # mostra in notazione simbolica
```

## Pattern Comuni

### Casi d'Uso Quotidiani

| Command | Description |
|---------|-------------|
| `Web root` | `chmod -R 755 /var/www/html` |
| `File config` | `chmod 600 app.conf` |
| `Directory SSH` | `chmod 700 ~/.ssh` |
| `SSH authorized_keys` | `chmod 600 ~/.ssh/authorized_keys` |
| `Directory condivisa` | `chmod 2775 /shared` (setgid) |
| `File log` | `chmod 640 /var/log/app.log` |
| `Script cron` | `chmod 755 /etc/cron.daily/myjob` |
| `Directory temporanea` | `chmod 1777 /tmp` (sticky) |

### Visualizzare i Permessi

```
ls -l file.txt       # mostra permessi
ls -ld dir/          # mostra permessi directory
stat -c '%A %a %n' * # simbolico + numerico + nome
getfacl file.txt     # mostra ACL (se in uso)
```
