Come funziona umask

Il valore dell’umask (le ultime tre cifre, la prima la possiamo ignorare per gli scopi di questa guida) rappresenta i permessi da negare ad un file. Il comando è un po’ l’inverso di chmod: quest’ultimo infatti a serve a dare i permessi ad un file dopo che questo è stato creato, l’umask invece stabilisce quali valori negare ad un file al momento della creazione.

Il calcolo viene effettuato in maniera analoga a quanto accade per chmod. Dei tre valori “xxx”, il primo rappresenta i permessi del proprietario del file, il secondo i permessi del gruppo e il terzo i permessi per tutti gli altri. Il conteggio viene fatto nella maniera canonica:

1 = permessi di esecuzione

2 = permessi di scrittura

4 = permessi di lettura

Perchè questi valori? Semplice. Provate a dare il comando ls -l e guardare come vengono rappresentati i permessi dei file:

drwxr-x---  7 pippo pippo 4096 nov  2 17:36 Documenti

Togliamo la prima d che indica che il file è una directory. Abbiamo subito dopo 9 slot che devono essere suddivisi a gruppi da 3. Se li esaminiamo uno ad uno, ci accorgiamo che il primo è rwx, il secondo r-x e il terzo —. Adesso riscriviamoli con una piccola accortezza: se c’è una lettera scriviamo 1, altrimenti scriviamo 0. I tre gruppi quindi sono 111|101|000.

Se consideriamo il risultato precedente secondo la numerazione binaria, ci accorgeremo che la nostra serie è 750. 750 sono i permessi della cartella Documenti. 7 è la somma di 4+2+1, ossia il proprietario del file ha tutti i permessi su quella cartella. 5 è invece la somma di 4+1, quindi chi fa parte del gruppo pippo ha i permessi di lettura ed esecuzione, ma non di scrittura. Tutti gli altri non hanno alcun permesso su quella cartella.

umask funziona allo stesso modo.

Facciamo degli esempi per capire meglio di cosa si tratta.

$ umask 0333
$ touch file
$ ls -l
-r--r--r-- 1 pippo pippo 0 gen 26 21:54 file

Il file che è stato creato, ha solamente i permessi di scrittura per tutti quanti. Come mai? Oramai dovremmo essere in grado di capirlo. Infatti umask era stata settata a 0333, quindi ad ognuno sono stati negati i permessi rappresentati da 3: scrittura (2) + esecuzione (1).

Un’ultima precisazione, che può senza dubbio tornare utile. L’umask determina quali permessi negare ad un determinato file, ma non forza i permessi del file a quelli dell’umask. Ad esempio:

$ umask 0000
$ touch file
$ mkdir cartella
$ ls -l
-rw-rw-rw- 1 pippo pippo 0 gen 26 21:54 file
drwxrwxrwx 1 pippo pippo 0 gen 26 21:54 cartella

L’umask era stata impostata a 0000, quindi non avrebbe dovuto negare nessun permesso, tuttavia il file creato non possiede i permessi di esecuzione. Questo è dovuto al fatto che la creazione di un file non richiede i permessi di esecuzione e quindi questi permessi non vengono assegnati nonostante la permissività dell’umask. Una cartella invece richiede i permessi di esecuzione e quindi le vengono concessi.

Alcune umask utilizzate di frequente sono le seguenti:

0077 = nega tutti i permessi al gruppo e agli altri, ma lascia inalterati quelli del proprietario.

0022 = il file sarà eseguibile e leggibile da tutti quanti, ma solamente il proprietario del file potrà modificarlo.

0002 = comunemente usato nei server, dove capita che l’utente che fa girare il servizio abbia accesso in scrittura al file.

E con questo finisce la breve panoramica di umask. Se avete domande o volete fare delle precisazioni, fate pure.