remove_red_eye Modalitá lettura

UMASK: Controllo dei Permessi

In questo articolo

  1. I Permessi
  2. Cambio temporaneo  umask da terminale
  3. Cambio permanente da /etc/login.defs

Un ben ritrovato a tutti i lettori di Linux Hub.

Il comando di cui parleremo oggi è  molto particolare e poco conosciuto: Umask.

Il comando umask (user mask)  altro non e’ che una maschera  di sistema che va ad assegnare  i permessi in lettura(r),  scrittura (w) ed esecuzione (x) dei file e delle directory create. Il comando assegna i permessi, oltre che al proprietario del file, anche agli user appartenenti al gruppo (del proprietario del file) ed ai restanti user non appartenenti al gruppo. Proviamo a lanciare da terminale il comando “umask” e quasi sicuramente (se non precedentemente modificato) il risultato sarà  “0022” come illustrato nello screenshot qui di seguito:

Come mai il terminale ha restituito proprio questa serie di numeri ?

I Permessi

Quante volte vi e’ capitato di non poter aprire un file o non poterlo modificare perché non siete i proprietari del file? Purtroppo capita spesso e forse vi potrà sembrar  strano ma l’umask stabilisce proprio questi permessi che nello specifico saranno per i file  644 e per le directory  755. Andiamo ad interpretare  meglio questi numeri per capirci  qualcosa. Eseguiamo sul terminale i seguenti comandi:

  1. touch prova
  2. mkdir prova2

Il sistema ha creato  un file con il nome  “prova” e una directory con il nome “prova2”, ora andiamo a fare il listato lungo (quindi con flag -l ) della directory dove sono stati creati il file “prova” e la directory “prova2”

Analizziamo la prima riga di restituzione del comando “ls -l”:

-rw-r- -r- - 1 root root 0 ott 26 14:12 prova
  1. (-) il trattino ad inizio riga indica che “prova” è un file
  2. ora analizziamo a gruppi di tre caratteri le indicazioni fino al numero 1.
  3. (rw-) indica i permessi di lettura(r), scrittura(w) ed esecuzione(-) del proprietario del file (nel mio caso #root)
  4. (r- -) indica che gli user appartenenti al gruppo #root (sempre se ce ne siano) hanno solo accesso in lettura al file
  5. (r- -) indica che gli user non facenti parte del gruppo #root hanno accesso solo in lettura al file
  6. il numero 1 indica che il file occupa un blocco logico da 4k
  7. root root  sta ad indicare che il proprietario e’ #root ed e’ anche #root il gruppo di appartenenza
  8. il seguito e’ intuibile.

Analizziamo ora  la seconda riga del terminale ovvero quella riferita alla directory “prova2”:

drwxr-xr-x 2 root root 4096 ott 26 14:12 prova2

A differenza del file prova,  la prima lettera della stringa e’ una “d” (da directory). Continuando nella stessa logica analitica come sopra, il proprietario in questo caso ha accesso completo alla cartella “prova2” quindi, le tre lettere  “rwx”, riferite al proprietario, indicano  che esso  ha il controllo  totale sulla directory. A  seguire gli user appartenenti al gruppo #root (in questo caso) hanno accesso in lettura(r) ed esecuzione(x) come anche gli altri utenti non appartenenti al gruppo  ma non hanno possibilità, ne gli appartenenti al gruppo ne gli altri user, di scrittura(w). Analizziamo in logica binaria la serie dei caratteri riferita al file “prova”:

rw-r- -r- –   diamo, come si suol dire  in gergo matematico, un peso ai primi  3 caratteri iniziali  da sinistra verso destra :

(rw-) r=2²=4, w=2^¹=2, -=0  la somma e' 6

(r- -) r=2²=4 , -=0 , -=0    la somma e' 4

(r- -) come esempio di sopra  la somma è 4

Quindi il file ha permessi 644 confrontiamolo in colonna con la “umask”

  • 022
  • 644

Un ottimo osservatore direbbe che il primo numero (022) e’ complemento a 6 al secondo cioè  se sommati il risultato e’ 666 ; e perché non  777 ci sarebbe da dire ? Questo lo si spiega perché’ in GNU/linux i file non sono  mai eseguibili ,se non diversamente deciso dall’utente.  Un esempio  di file eseguibile e’  uno script in bash editato su gedit o kate il quale ha bisogno anche dei permessi in esecuzione quindi della x. Il video chiarisce le idee a tal riguardo:

Analogamente a ciò che abbiamo detto sopra paragoniamo la “umask” con la forma ottale della stringa riferita alla directory che vi ripropongo qui sotto :

drwxr-xr-x 2 root root 4096 ott 26 14:12 prova2

Il valore ottale dei permessi questa volta sara’ “rwx” per il proprietario quindi “7” ; “r-x” per il gruppo quindi “5” infine ancora “r-x” per gli altri utenti quindi  nuovamente “5” per un totale di “755”. Confrontiamo il risultato ottenuto  con la umask:

  • 755
  • 022

Questa volta la somma e’ “777” quindi complementare a 7 ,da tutto ciò’ si intuisce che la umask impartisce  i permessi dei file e directory con complemento a 6 per i file e complemento a 7 per le directory ( o cartelle se preferite). A questo punto potrebbe nascere una domanda lecita:  e se volessi cambiare la umask  di default per avere un comportamento diverso della gestione dei permessi? Come ben sapete la differenza tra GNU/Linux e Windows e’ proprio l’alta configurabilità del primo. Andiamo quindi a cambiare la umask per vedere cosa succede. Prima però, di effettuare le  prove sul nostro bel terminale e’ doveroso da parte mia dirvi che la umask può essere cambiata temporaneamente ( agendo sul terminale) oppure permanentemente agendo sul file di sistema /etc/login.defs. Se si vuol modificare in maniera temporanea la umask basta digitare sul  terminale il seguente comando : “sudo umask <<nuovo valore di umask>>. Alla chiusura del terminale il sistema reimposta la umask 0022 di default.

Cambio temporaneo  umask da terminale

Cambio permanente da /etc/login.defs

Molti di voi però si potrebbero chiedersi  come mai la Umask ha valore 0022 e nella nostra analisi abbiamo preso in considerazione sempre il valore 022  omettendo il primo 0 ? Vi rispondo anticipandovi che nel  mio prossimo articolo  parlerò del comando chmod  e dello sticky-bit che va ad agire proprio su  primo “0” della nostra Umask.

Revisione a cura di Giuliano Zamboni


info Il contenuto di questo articolo é libero alla condivisione, a patto che venga citata la fonte (linuxhub.it)


chat Discuti questo articolo con
help /gentedilinux