Introduzione

Sui sistemi operativi Linux/Unix, tutti i nuovi file vengono creati con un set predefinito di autorizzazioni. L'utility umask 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.

È usato da mkdir, touch, tee e altri comandi che creano nuovi file e directory.

Autorizzazioni su Linux

Prima di andare oltre, spieghiamo brevemente il modello delle autorizzazioni di Linux.

In Linux, ogni file è associato a un proprietario e un gruppo e assegnato con diritti di accesso di autorizzazione per tre diverse classi di utenti:

  • il proprietario del file.
  • i membri del gruppo.
  • tutti gli altri.

Esistono tre tipi di autorizzazioni che si applicano a ciascuna classe:

  • il permesso di lettura.
  • il permesso di scrittura.
  • il permesso di esecuzione.

Questo concetto consente di specificare a quali utenti è consentito leggere il file, scrivere sul file o eseguire il file.

Per visualizzare le autorizzazioni del file, utilizzare il comando ls:

ls -l dirname
drwxr-xr-x 12 noviello users 4.0K Sep  8 17:22 dirname
|[-][-][-]    [------] [---]
| |  |  |        |       |       
| |  |  |        |       +-----------> Group
| |  |  |        +-------------------> Owner
| |  |  +----------------------------> Others Permissions
| |  +-------------------------------> Group Permissions
| +----------------------------------> Owner Permissions
+------------------------------------> File Type

Il primo carattere rappresenta il tipo di file che può essere normale file ( - ), directory ( d ), collegamento simbolico ( l ) o qualsiasi altro tipo speciale di file.

I successivi nove caratteri rappresentano le autorizzazioni, tre serie di tre caratteri ciascuna. Le prime serie mostrano le autorizzazioni del proprietario, le seconde autorizzazioni di un gruppo e l'ultima mostra le autorizzazioni di tutti gli altri.

Il carattere r con un valore ottale di 4 sta per lettura, w con un valore ottale di 2 per scrivere, x con un valore ottale di 1 per autorizzazione di esecuzione e ( - ) con valore ottale di 0 per nessuna autorizzazione.

Ci sono anche altri tre tipi di file speciali autorizzazioni: setuid, setgid e Sticky Bit.

Nell'esempio sopra ( rwxr-xr-x ) significa che il proprietario ha le autorizzazioni di lettura, scrittura ed esecuzione ( rwx ), il gruppo e altri hanno autorizzazioni di lettura ed esecuzione.

Se rappresentiamo i permessi dei file usando una notazione numerica arriveremo al numero 755:

  • Proprietario: rwx = 4+2+1 = 7
  • Gruppo: r-x = 4+0+1 = 5
  • Altro: r-x = 4+0+1 = 5

Se rappresentati in notazione numerica, le autorizzazioni possono avere tre o quattro cifre ottali (0-7). La prima cifra rappresenta le autorizzazioni speciali e se viene omessa significa che non sono impostate autorizzazioni speciali sul file. Nel nostro caso 755 è lo stesso di 0755. La prima cifra può essere una combinazione di 4 per setuid, 2 per setgid e 1 per Sticky Bit.

Le autorizzazioni per i file possono essere modificate utilizzando il comando chmod e la proprietà utilizzando il comando chown.

Comando umask

Per impostazione predefinita, sui sistemi Linux, le autorizzazioni di creazione predefinite sono 666 per i file, il che dà l'autorizzazione in lettura e scrittura a utenti, gruppi e altri e alle directory 777 , il che significa autorizzazioni in lettura, scrittura ed esecuzione per utenti, gruppi e altri. Linux non consente la creazione di un file con autorizzazioni di esecuzione.

Le autorizzazioni di creazione predefinite possono essere modificate utilizzando l'utility umask.

umask influisce solo sull'ambiente shell corrente. Sulla maggior parte delle distribuzioni Linux il valore umask predefinito a livello di sistema è impostato nel file pam_umask.so o /etc/profile.

Se si desidera specificare un valore diverso in base all'utente, modificare i file di configurazione della shell dell'utente come ~/.bashrc o ~/.zshrc. È inoltre possibile modificare il valore umask della sessione corrente eseguendo umask seguito dal valore desiderato.

Per visualizzare il valore corrente della maschera, digitare semplicemente umask senza argomenti:

umask

L'output includerà il

022

Il valore umask contiene i bit di autorizzazione che NON verranno impostati sui file e sulle directory appena creati.

Come abbiamo già accennato, le autorizzazioni di creazione predefinite per i file sono 666 e per le directory 777. Per calcolare i bit di autorizzazione dei nuovi file sottrarre il valore umask dal valore predefinito.

Ad esempio, per calcolare come uname 022 influenzeranno i file e le directory appena creati, utilizzare:

  • File: 666 - 022 = 644. Il proprietario può leggere e modificare i file. Group e altri possono solo leggere i file.
  • Directory: 777 - 022 = 755.Il proprietario può eseguire il cd nella directory ed elencare, leggere, modificare, creare o eliminare i file nella directory. Il gruppo e altri possono accedere alla directory, all'elenco e leggere i file.

Puoi anche visualizzare il valore della maschera in notazione simbolica usando l'opzione -S:

umask -S
u=rwx,g=rx,o=rx

A differenza della notazione numerica, il valore della notazione simbolica contiene i bit di autorizzazione che verranno impostati sui file e sulle directory appena creati.

Impostazione del valore della maschera

La maschera di creazione del file può essere impostata usando la notazione ottale o simbolica. Per rendere permanenti le modifiche impostare il nuovo valore umask in un file di configurazione globale come il file /etc/profile che avrà effetto su tutti gli utenti o nei file di configurazione della shell di un utente come ~/.profile, ~/.bashrc o ~/.zshrc che interesserà solo l'utente. I file utente hanno la precedenza sui file globali.

Prima di apportare modifiche al valore umask, assicurarsi che il nuovo valore non rappresenti un potenziale rischio per la sicurezza. Valori meno restrittivi di 022 dovrebbero essere usati con grande cautela. Ad esempio, umask 000 significa che chiunque avrà l'autorizzazione a leggere, scrivere ed eseguire per tutti i file appena creati.

Supponiamo di voler impostare autorizzazioni più restrittive per i file e le directory appena creati in modo che altri non possano accedere alle directory e leggere i file. Le autorizzazioni che vogliamo sono 750 per le directory e 640 per i file.

Per calcolare il valore umask basta sottrarre le autorizzazioni desiderate da quella predefinita:

Valore Umask: 777-750 = 027

Il valore umask desiderato rappresentato in notazione numerica è 027.

Per impostare permanentemente il nuovo valore a livello di sistema, aprire il file /etc/profile con l'editor di testo:

sudo nano /etc/profile

Modifica o aggiungi la seguente riga all'inizio del file:

umask 027

Per rendere effettive le modifiche, eseguire il comando source o il logout e accedere:

source /etc/profile

Per verificare le nuove impostazioni creeremo un nuovo file e directory usando mkdire touch:

mkdir new_dir new_file

Se controlli le autorizzazioni usando il comando ls noterai che il nuovo file ha autorizzazioni  640 e la nuova directory 750:

drwxr-x--- 2 noviello users 4096 Sep  9 05:01  new_dir
-rw-r----- 1 noviello users    0 Sep  9 05:01  new_file

Un altro modo per impostare la maschera di creazione del file è usare la notazione simbolica. Ad esempio umask u=rwx,g=rx,o= è lo stesso di umask 027.

Conclusione

In questa guida, abbiamo spiegato le autorizzazioni di Linux e come utilizzare il comando umask per impostare i bit delle autorizzazioni per i file o le directory appena creati.

Per ulteriori informazioni digitare nel terminale:

 man umask