Come funziona la umask
Quando un programma crea un file chiede un modo, quasi sempre 666 (rw-rw-rw-) per i file e 777 per le directory. Il kernel azzera poi ogni bit impostato nella umask del processo. Con la consueta 022, i bit di scrittura per gruppo e altri vengono rimossi: i file diventano 644, le directory 755. Con 077 va via tutto per gruppo e altri: 600 e 700. La maschera può solo togliere permessi, mai aggiungerne; un file non riceve mai l’esecuzione dalla umask, perché 666 non l’aveva.
L’aritmetica è modo & ~umask, un AND bit a bit con la maschera invertita, non una sottrazione, quindi umask 027 su 666 dà 640, non 639.
Valori comuni
| umask | File | Directory | Usata per |
|---|---|---|---|
| 022 | 644 | 755 | Default sulla maggior parte delle distribuzioni; gli altri possono leggere. |
| 002 | 664 | 775 | Debian/Ubuntu per utenti con gruppo privato; i membri del gruppo possono scrivere. |
| 077 | 600 | 700 | Privato di default: server, home directory con segreti. |
| 027 | 640 | 750 | Il gruppo può leggere, gli altri nulla; base comune di hardening (CIS). |
Dove si imposta
- Shell:
umaskla stampa,umask 027la imposta per la sessione; mettila in~/.profileo/etc/profile.umask -Sla mostra in forma simbolica. - Login:
/etc/login.defs(UMASK) epam_umaskimpostano il valore prima che parta la shell;/etc/profilesu Debian la ricava dal fatto che l’utente abbia un gruppo privato. - Servizi systemd:
UMask=0077nella sezione[Service]; i servizi non leggono i profili della shell. - cron: i job girano con
022a prescindere dalle impostazioni della shell dell’utente; impostala dentro lo script. - Docker: il default del container è
022; cambialo nell’entrypoint o conumasknel comando.
Domande
Perché i miei nuovi file hanno 644 quando voglio 664?
La tua umask è 022. Imposta umask 002 (e assicurati che il gruppo della directory sia quello che vuoi, con il bit setgid sulla directory perché i nuovi file lo ereditino).
La umask influisce su chmod?
No. chmod imposta bit esatti. La umask si applica solo quando un file viene creato senza un modo esplicito, cioè quasi sempre.
Perché la directory riceve l’esecuzione e il file no?
Le directory vengono create con 777 prima della maschera, i file con 666. L’esecuzione su una directory significa «ci si può entrare»; i file hanno bisogno di chmod +x esplicitamente.
Una umask a quattro cifre è diversa?
Uno 0 iniziale (0022) è solo notazione ottale. La prima cifra maschererebbe setuid/setgid/sticky, che i processi che creano file non richiedono mai, quindi in pratica non ha effetto.