Comando umask in Linux: permessi predefiniti di file e directory
umask imposta quali bit di permesso vengono esclusi quando la shell corrente e i processi che ne ereditano la maschera creano nuovi file o directory. Non modifica i permessi dei file già esistenti.
Con richieste di creazione abituali, 666 per i file e 777 per le directory, la maschera 022 produce rispettivamente 644 e 755. Il risultato dipende però dal modo richiesto dal programma e dal filesystem: non è una promessa valida per ogni applicazione.
Sintassi di base
umask [-p] [-S] [maschera]
In Bash, umask è un comando interno alla shell. Le parentesi indicano parti facoltative e non vanno digitate. Senza una nuova maschera, il comando mostra il valore corrente; con una maschera lo cambia nella shell in cui viene eseguito. Usa help umask per leggere la descrizione della versione installata; altre shell possono avere opzioni diverse.
Le cifre della maschera sono ottali, cioè in base otto, e indicano i permessi da togliere, non quelli da aggiungere. Per ogni categoria, lettura vale 4, scrittura 2 ed esecuzione o ricerca 1. Le tre cifre corrispondono a proprietario, gruppo e altri utenti.
Esempi d’uso
Leggere la maschera corrente
umask
Mostra il valore ottale. Per esempio, Bash può visualizzare 0022: lo zero iniziale fa parte della rappresentazione. Non dare per scontato che sia il valore iniziale di tutti gli utenti o servizi.
Leggere la forma simbolica
umask -S
Con una maschera 027, Bash mostra u=rwx,g=rx,o=. Questa forma descrive i permessi consentiti dalla maschera, mentre le cifre numeriche indicano quelli esclusi. Non significa che ogni nuovo file avrà i bit x: il programma deve averli richiesti.
Impostare la maschera nella shell corrente
umask 027
umask
Il secondo comando permette di verificare l’impostazione, normalmente visualizzata da Bash come 0027. Prima di una prova nella tua shell annota il valore precedente oppure salvalo con old_mask=$(umask). Al termine puoi ripristinarlo nella stessa shell con umask "$old_mask" e controllare nuovamente.
Calcolare e verificare i permessi nuovi
In assenza di una ACL (Access Control List, elenco di controllo degli accessi) predefinita, la regola sui bit ordinari è modo_richiesto & ~maschera: si mantengono soltanto i bit richiesti che la maschera non esclude. Non si tratta di una normale sottrazione. Per esempio, con richiesta 666 e maschera 003 il risultato è 664, non 663.
Per provare 027, usa una directory di esercitazione in cui demo.txt e demo-dir non esistano. Salva prima la maschera come descritto sopra. touch su un file esistente non ricalcola i suoi permessi; mkdir su una directory esistente segnala invece un errore.
umask 027
umask
touch demo.txt
mkdir demo-dir
stat -c '%a %n' demo.txt demo-dir
Output atteso in Bash con GNU stat, richieste di creazione ordinarie e filesystem Linux senza ulteriori regole di accesso:
0027
640 demo.txt
750 demo-dir
Il file ha lettura e scrittura per il proprietario, lettura per il gruppo e nessun permesso per gli altri. La directory conserva anche x per proprietario e gruppo: sulle directory significa ricerca e attraversamento. %a mostra il modo ottale e %n il nome. Controlla eventuali errori dei singoli comandi e, finita la prova, ripristina la maschera salvata.
La stessa sequenza è stata eseguita con Bash 5.3.9 e GNU stat 8.32 in Git Bash su Windows, ottenendo il testo illustrato. In quell’ambiente, però, il medesimo file già esistente è apparso a stat come 644, poi 600 e di nuovo 644 cambiando soltanto la maschera della shell di osservazione da 022 a 077 e ritorno. Questa rappresentazione Windows non verifica l’applicazione dei permessi Linux: per controllare l’accesso effettivo serve il contesto Linux e il filesystem interessato.
Se il programma richiede inizialmente meno permessi, umask non li aggiunge. In particolare, un file richiesto senza esecuzione resta senza quel bit anche con una maschera permissiva. Login, servizi e contenitori possono impostare maschere differenti da quella del terminale in uso.
Opzioni e valori principali
| Valore o opzione | Significato in Bash |
|---|---|
022 |
Esclude la scrittura per gruppo e altri utenti. Con le richieste ordinarie produce file 644 e directory 755. |
027 |
Esclude la scrittura al gruppo e tutti i permessi agli altri. Con le richieste ordinarie produce file 640 e directory 750. |
-S |
Senza una nuova maschera, mostra in forma simbolica i permessi consentiti dalla maschera. |
-p |
Senza una nuova maschera, produce un comando riutilizzabile in Bash, per esempio umask 0027. |
I risultati numerici nella tabella presuppongono che non intervengano ACL predefinite o altri comportamenti del filesystem. La documentazione del comando interno umask nel manuale Bash descrive le due opzioni e l’interpretazione dei valori.
Ambito, ACL e precauzioni
Un processo figlio eredita la maschera del genitore, ma una modifica nel figlio non cambia il genitore. In Bash, per esempio, (umask 077) modifica soltanto la subshell fra parentesi. Anche uno script avviato come processo separato non imposta la maschera del terminale che lo ha lanciato. Per una modifica persistente devi individuare il file di avvio o la configurazione del servizio effettivamente utilizzati; una modifica nel terminale non configura automaticamente un servizio già avviato.
Su Linux, se la directory padre ha una ACL predefinita, la semplice formula con umask non governa il risultato: viene ereditata la ACL e vengono comunque esclusi i permessi assenti dal modo richiesto dal programma. Per questo non basta leggere umask per stabilire tutti gli accessi. Il manuale Linux umask(2) spiega questa eccezione e l’eredità fra processi.
Per modificare i permessi di file esistenti usa chmod, dopo aver controllato i destinatari. Ripristinare la vecchia maschera non modifica i file creati durante la prova: se devi cambiarli, intervieni esplicitamente su quei file.
Domande frequenti
umask 022 trasforma anche i file esistenti in 644?
No. Imposta la maschera per le successive creazioni del processo corrente e dei processi che la ereditano. Non converte i file esistenti e non impone 644 a un programma che richiede inizialmente un modo più restrittivo.
Documentazione di riferimento
Consulta help umask in Bash e il manuale GNU Bash per l’interfaccia della shell. Il manuale Linux della maschera di creazione descrive il comportamento del sistema e la relazione con le ACL predefinite.




