La maschera dei permessi su Linux
La maschera dei permessi mi permette di conoscere e modificare i permessi sui files e sulle directory che dovrò creare. Sul sistema operativo linux si gestisce tramite il comando umask.
umask
Qual è la differenza tra umask e chmod?
Il comando chmod modifica i permessi sui file e directory già esistenti. Il comando umask, invece, imposta la stringa dei permessi su quelli ancora da creare.
Bisogna però fare attenzione perché umask utilizza la maschera anziché i permessi numerici.
Come funziona la maschera dei permessi? E' la negazione dei permessi. La maschera funziona come un filtro. In origine tutti i file e le directory hanno il permesso 0777. La maschera li riduce. Ad esempio, una maschera 0111 riduce i permessi da 0777 a 0666.
Come visualizzare la maschera dei permessi
Entro sulla riga comandi di Linux.
Prima di creare un file, digito umask per sapere quali permessi di default gli sarebbero assegnati.
umask
Il sistema operativo mi restituisce la negazione dei permessi in forma numerica.
0002
Cosa significa negazione dei permessi?
Se creassi una nuova directory avrebbe il permesso numerico 0775.
Infatti, per calcolare i permessi di una directory basta sottrarre al valore massimo 0777 il numero della maschera umask 0002 e si ottiene 0775.
Occorre però distinguere tra file e directory.
Nel caso dei file si utilizza come valore massimo 0666 anziché 0777.
Quindi, il risultato è diverso.
Nota. La stessa maschera ha prodotto permessi diversi per la directory (0775) e per il file (0664). Nel caso dei file si usa come valore massimo 0666 mentre per le directory si usa 0777. Il valore della maschera è sempre lo stesso. Eventuali risultati negativi della sottrazione vanno lasciati uguali a zero ( es. 0666-0777=0000).
Riepilogando, i valori ottali numerici della maschera umask hanno il seguente significato per i file e per le directory.
valore | file permessi | directory permessi |
---|---|---|
0 | rw- | rwx |
1 | rw- | rw- |
2 | r-- | r-x |
3 | r-- | r-- |
4 | -w- | -wx |
5 | -w- | -w- |
6 | --- | --x |
7 | --- | --- |
C'è un modo più facile per conoscere i permessi sui nuovi file e directory?
In alternativa, per conoscere la maschera dei permessi posso digitare il comando umask aggiungendo il parametro -S
umask -S
In questo caso, il s.o. mi restituisce a video la maschera in formato simbolico.
u=rwx, g=rwx, o=rx
Vuol dire che i nuovi file o directory avrebbero i permessi di lettura, scrittura ed esecuzione (rwx) sia per l'utente proprietario del file (u) che per il gruppo (g).
Gli altri utenti ( o=others ), invece, avrebbero soltanto il permesso di lettura (r) ed esecuzione (x).
E' la stessa informazione ma è molto più immediata e facile da capire.
Nota. E' comunque consigliabile imparare a usare i permessi in formato numerico perché sono utili per modificare la maschera.
Come modificare la maschera dei permessi
La maschera dei permessi di default è impostata dall'amministratore di sistema.
A ciascun utente può associare dei permessi di base.
E' comunque possibile cambiare la maschera anche dalla riga dei comandi.
Si può modificare digitando il comando umask seguito dalla maschera xxxx in forma numerica.
umask [ xxxx ]
Ad esempio, per impostare la maschera 0022 basta digitare
umask 0022
A tutti i file e le directory che saranno creati durante la sessione sarà applicata la maschera 0022.
Le directory avranno i permessi 0755 (rwxr-xr-x) mentre i file 0644 (rw-r--r--).
La modifica vale soltanto per la sessione in corso. Una volta chiusa la sessione o il terminale, la maschera torna ad avere i valori di default impostati dall'amministratore del sistema.
Un esempio pratico
La maschera attuale è 0022 che equivale al permesso 0755 (rwxr-xr-x).
Per modificare la maschera da 0022 a 0077 digito il seguente comando:
umask 0077
Ora la maschera è 0077 che equivale al permesso 0700 (rwx------).
Faccio una verifica e provo a creare un file.
touch filediprova
Poi visualizzo il contenuto della directory corrente con ls -l.
Il file "filediprova" è stato creato con i permessi rw--------, ossia 600.
Soltanto l'utente proprietario può leggerlo (r), scriverlo (w) ed eseguirlo (x). Il gruppo e gli altri utenti non sono autorizzati.
Perché il file ha il permesso 600 anziché 700? Essendo un file non eseguibile va usato come valore massimo 666. Quindi 0666-0077=0600 dove 6 equivale al permesso di lettura e scrittura (rw). Per questa ragione il file "filediprova" ha i permessi rw anziché rwx.
Ora provo a creare una directory.
mkdir provadir
Poi visualizzo di nuovo il contenuto della cartella corrente con ls-l.
La directory provadir è stata creata con i permessi rwx------, ossia 0700.
Soltanto il proprietario della directory può accedere alla directory (x), visualizzare il suo contenuto (r) e modificarlo (w).
Nota. In questo caso, trattandosi di una directory, la maschera si applica sul valore massimo 0777. Quindi, 0777-0077=0700 dove 7 equivale al permessi di lettura, scrittura e accesso (rwx).