umask

Da Wikipedia, l'enciclopedia libera.

umask è un comando della shell testuale dei sistemi operativi Unix e Unix-like, e più in generale dei sistemi POSIX[1], che permette di suggerire ai programmi avviati successivamente quali permessi negare al momento della creazione di nuovi file e directory. Il comando ha effetto solo per i programmi avviati successivamente ad umask, e solo se avviati dalla stessa shell.

Il comando differisce da chmod sia perché quest'ultimo modifica i permessi successivamente alla creazione dei file o directory, sia perché i permessi forniti con chmod sono quelli effettivi e non quelli negati.

umask è anche il nome di una chiamata di sistema definita dallo standard POSIX[2] che modifica un omonimo attributo dei processi (precisamente del process control block), il quale mantiene il valore corrente di tale suggerimento, e che viene ereditato dai processi figli. Di fatto, il comando umask della shell, che è interno alla shell stessa e non è un programma esterno, agisce semplicemente invocando tale chiamata di sistema per modificare il valore corrente della maschera del processo della shell; il nuovo valore viene poi ereditato dai comandi avviati in seguito dalla stessa shell (ma non, ad esempio, dai comandi avviati in precedenza o avviati da altre shell).

Il comando e la chiamata di sistema umask modificano solo il comportamento predefinito dei programmi, i quali mantengono la possibilità tecnica di aggirare il suggerimento, ad esempio cambiando il valore dell'impostazione corrente o modificando esplicitamente i permessi dei nuovi file e/o directory create.

È possibile negare solo permessi di lettura, scrittura ed esecuzione, e non altri tipi di permessi.

Il comando umask[modifica | modifica wikitesto]

La sintassi generale del comando umask è:

umask [-p] [-S] [maschera]

dove la maschera può essere:

Lanciando il comando senza specificare un parametro maschera viene mostrato sullo standard output il valore corrente.

L'opzione -S mostra il valore corrente dei permessi effettivi espresso in notazione simbolica (ad esempio u=rwx,g=rx,o=rx invece di 022).

L'opzione -p mostra il valore di negazione dei permessi corrente impostato da umask (ad esempio 022)

Se si desidera lasciare invariati i propri permessi, negandoli completamente agli utenti del gruppo e a tutti gli altri utenti, si usi:

umask 077

Notare che i permessi di ogni file o directory creati dipendono sia dai permessi richiesti dal programma che li ha creati che dall'impostazione data tramite umask.

Valori comunemente usati per umask sono:

  • 002 per impedire la scrittura agli utenti che non sono proprietari del file e che non fanno nemmeno parte del gruppo assegnato al file
  • 022 per impedire la scrittura a utenti diversi dal proprietario ( valore di default )
  • 044 per impedire la lettura a utenti diversi dal proprietario
  • 077 per impedire lettura, scrittura ed esecuzione a utenti diversi dal proprietario

Tabella dei permessi di umask[modifica | modifica wikitesto]

Ottale Permessi negati Permessi consentiti Binario
0 --- rwx 000
1 --x rw- 001
2 -w- r-x 010
3 -wx r-- 011
4 r-- -wx 100
5 r-x -w- 101
6 rw- --x 110
7 rwx --- 111

Esempi[modifica | modifica wikitesto]

Imposta il valore di umask a 0147 e tramite il comando touch crea un nuovo file vuoto (che normalmente avrebbe i permessi 0666, o -rw-rw-rw-); il nuovo file ha permessi ottali 0620, in quanto 0666 & ~0147 = 0620:

$ umask 147
$ touch prova
$ ls -l prova
-rw--w---- 1 matteo matteo 0 27 mag 22:27 prova

Seguendo l'esempio sopra è possibile osservare la differenza con il comando chmod eseguito successivamente:

$ chmod 147 prova
$ ls -l prova
---xr--rwx 1 matteo matteo 0 27 mag 22:27 prova

Imposta il valore di umask a 0147 e tramite il comando mkdir crea una nuova directory (che normalmente avrebbe i permessi 0777, o drwxrwxrwx); la nuova directory ha permessi ottali 0630, in quanto 0777 & ~0147 = 0630:

$ umask 147
$ mkdir nuova_directory
$ ls -ld nuova_directory
drw--wx--- 2 matteo matteo 48 27 mag 22:34 nuova_directory

La chiamata di sistema umask[modifica | modifica wikitesto]

La chiamata di sistema umask è dichiarata nello header file sys/stat.h:

#include <sys/stat.h>
mode_t umask(mode_t cmask);

Il tipo mode_t è un tipo opaco (solitamente un tipo numerico intero) che rappresenta dei permessi d'accesso. Il parametro cmask indica i permessi che si vuole negare. A tal fine sono considerati solo i permessi di lettura, scrittura ed esecuzione relativi alle classi di permessi utente, gruppo e altri. I restanti permessi, come set User ID, set Group ID e sticky non sono considerati.

Valore di ritorno[modifica | modifica wikitesto]

Il valore di ritorno è il valore precedente di umask.

Note[modifica | modifica wikitesto]

  1. ^ (EN) umask (utilities) in The Open Group Base Specifications Issue 6 IEEE Std 1003.1, 2004 Edition. URL consultato il 27-05-2008.
  2. ^ (EN) umask (functions) in The Open Group Base Specifications Issue 6 IEEE Std 1003.1, 2004 Edition. URL consultato il 27-05-2008.

Voci correlate[modifica | modifica wikitesto]

  • Permessi (Unix) – Descrizione dei permessi nei sistemi Unix e Unix-like.
  • chgrp – Cambia il gruppo assegnato a file e directory.
  • chmod – Modifica i permessi di file e/o directory.
  • chown – Cambia il proprietario ed il gruppo assegnati a file e directory.

Collegamenti esterni[modifica | modifica wikitesto]

sicurezza informatica Portale Sicurezza informatica: accedi alle voci di Wikipedia che trattano di sicurezza informatica