Che cos'è "umask" e come funziona?

157

Credo che umask sia qualcosa che controlla permessi file , ma non lo capisco completamente.

Dopo aver eseguito umask 0644 in un terminale , non riesco a leggere i file che creo con l'editor di testo della riga di comando %codice%. Ho notato che le autorizzazioni di quel file sono impostate su nano invece del 0022 predefinito.

Come funziona umask? Ho pensato che avrei potuto rimuovere ogni cifra nella umask da 0755 , 0777 e 7 - 6 = 1 , quindi mi aspetto che le autorizzazioni siano 7 - 4 = 3 , ma a quanto pare, non è questo il caso.

  1. Che cos'è esattamente umask? Spiegatemi come se fossi un "noob di Linux"
  2. Come faccio a calcolare con umask?
  3. Quali sono i casi d'uso per umask?
posta Lekensteyn 22.05.2011 - 22:42

5 risposte

124

La umask agisce come un insieme di permessi che le applicazioni non possono impostare sui file. È una maschera di creazione della modalità file per i processi e non può essere impostata per le directory stesse. La maggior parte delle applicazioni non creerebbe i file con le autorizzazioni di esecuzione impostate, quindi avrebbero un valore predefinito di 666 , che verrà quindi modificato dalla umask.

Come hai impostato umask per rimuovere i bit di lettura / scrittura per il proprietario e i bit di lettura per gli altri, un valore predefinito come 777 nelle applicazioni comporterebbe il fatto che i permessi dei file fossero 133 . Ciò significherebbe che tu (e altri) potresti eseguire il file, e altri sarebbero in grado di scrivere su di esso.

Se vuoi che i file non vengano letti / scritti / eseguiti da nessuno tranne il proprietario, dovresti usare una umask come 077 per disattivare tali permessi per il gruppo & amp; altri.

Al contrario, una umask di 000 renderà le directory appena create leggibili, scrivibili e discendenti per tutti (le autorizzazioni saranno 777 ). Tale umask è altamente insicuro e non dovresti mai impostare umask su 000 .

L'umask predefinito su Ubuntu è 022 , il che significa che i file appena creati sono leggibili da tutti, ma solo scrivibili dal proprietario:

[email protected]:~$ touch new-file-name
[email protected]:~$ ls -dl new-file-name
-rw-r--r-- 1 user user 0 Apr  1 19:15 new-file-name

Visualizzazione e modifica di umask

Per visualizzare l'impostazione attuale della umask, apri un terminale ed esegui il comando:

umask

Per cambiare l'impostazione umask della shell corrente in qualcos'altro, ad esempio 077, esegui:

umask 077

Per verificare se questa impostazione funziona o meno, puoi creare un nuovo file (i permessi dei file di un file esistente non saranno influenzati) e mostrare le informazioni sul file, eseguire:

[email protected]:~$ touch new-file-name
[email protected]:~$ ls -dl new-file-name
-rw------- 1 user user 0 Apr  1 19:14 new-file-name

L'impostazione umask viene ereditata dai processi avviati dalla stessa shell. Ad esempio, avvia l'editor di testo GEdit eseguendo gedit nel terminale e salva un file usando gedit. Noterai che il file appena creato è influenzato dalla stessa impostazione umask del terminale.

Caso d'uso: sistema multi-utente

Se si è su un sistema condiviso da più utenti, si desidera che altri non possano leggere i file nella propria directory home. Per questo, un umask è molto utile. Modifica ~/.profile e aggiungi una nuova riga con:

umask 007

Devi fare il login di nuovo per questo cambiamento umask in ~/.profile per avere effetto. Successivamente, devi modificare i permessi dei file esistenti dei file nella tua home directory rimuovendo il bit di lettura, scrittura ed esecuzione per il mondo. Apri un terminale ed esegui:

chmod -R o-rwx ~

Se desideri applicare questa impostazione umask a tutti gli utenti del sistema, puoi modificare il file del profilo a livello di sistema a /etc/profile .

    
risposta data ajmitch 22.05.2011 - 22:59
33

Oltre alla buona discussione nella risposta accettata, vale la pena aggiungere alcuni punti in più su umask , con riferimento a come viene gestito in 12.04 e oltre.

Umask e pam_umask

L'umask predefinito è ora in /etc/login.defs e non in /etc/profile , come si legge nella nota ufficiale in /etc/profile :

# The default umask is now handled by pam_umask.
# See pam_umask(8) and /etc/login.defs.

Pam_umask viene brevemente spiegato di seguito, e va detto che il file predefinito per l'utente in cui inserire la sua impostazione umask personalizzata è ancora ~/.profile .

Pam_umask è uno dei molti importanti moduli PAM che sono cruciali nell'operazione di Ubuntu (esegui apropos '^pam_' per trovare le manpage per gli altri). Nella manpage per pam_umask si osserva che

  

pam_umask è un modulo PAM per impostare la maschera di creazione della modalità file dell'ambiente corrente. La umask influenza il          autorizzazioni predefinite assegnate ai file appena creati.

Una nota sulla umask predefinita

Le nuove cartelle in $HOME possono essere create da mkdir con le autorizzazioni 775 predefinite e i file creati con touch con le autorizzazioni 664 predefinite anche quando la umask predefinita è 022. Questo sembra, all'inizio, contraddittorio, e vale la pena spiegando.

Mentre l'umask predefinito è 022 su Ubuntu, questa non è l'intera storia, poiché esiste un'impostazione in /etc/login.defs che consente a umask di essere 002 per utenti non root se una condizione è soddisfatta (vedi estratto sotto) . In una normale installazione, /etc/login.defs contiene l'impostazione USERGROUPS_ENAB yes . Questo è ciò che

  

Abilita l'impostazione dei bit del gruppo umask come bit del proprietario    (esempi: 022 - & gt; 002, 077 - & gt; 007) per utenti non root, se l'uid è    lo stesso del gid, e il nome utente è uguale al nome del gruppo principale.

Ecco perché vedi quanto segue con stat quando viene creata una nuova cartella con mkdir su un singolo sistema utente come mia (uid e gid sono uguali):

Access: (0775/drwxrwxr-x)  Uid: ( 1000/username)   Gid: ( 1000/username)

Per ulteriori informazioni, vedere man pam_umask e il Manpage di Ubuntu online .

    
risposta data user76204 02.04.2013 - 02:16
29

Questo è piuttosto vecchio, ma vale la pena menzionarlo. Per calcolare per umask, a differenza delle autorizzazioni del file system. Le umasks ottali sono calcolate tramite AND bit a bit del complemento unario dell'argomento usando NOT bit a bit. Le notazioni ottali sono le seguenti:

Octal value : Permission
0 : read, write and execute
1 : read and write
2 : read and execute
3 : read only
4 : write and execute
5 : write only
6 : execute only
7 : no permissions

Quindi puoi calcolare per impostare umask prefezioni appropriate come:

$ umask 077
$ mkdir dir1
$ touch file
$ ls -ld dir1 file

drwx------ 2 amrx amrx 4096 2011-03-04 02:05 dir1
-rw------- 1 amrx amrx    0 2011-03-04 02:05 file

Calcolo dell'autorizzazione finale per i file

Puoi semplicemente sottrarre la umask dalle autorizzazioni di base per determinare l'autorizzazione finale per il file come segue:

666 – 022 = 644
  • Autorizzazioni di base file: 666
  • valore umask: 022
  • sottrai per ottenere le autorizzazioni del nuovo file (666-022) : 644 (rw-r–r–)

Calcolo dell'autorizzazione finale per le directory

Puoi semplicemente sottrarre la umask dalle autorizzazioni di base per determinare l'autorizzazione finale per la directory come segue:

777 – 022 = 755
  • Autorizzazioni di base della directory: 777
  • valore umask: 022
  • Sottrai per ottenere i permessi della nuova directory (777-022) : 755 (rwxr-xr-x)
risposta data amrx 06.04.2016 - 10:27
24

Gli altri hanno risposto hanno spiegato molto bene il concetto di umasking e perché è richiesto. Consentitemi di aggiungere i miei due centesimi e di darvi un esempio matematico su come vengono effettivamente calcolate le autorizzazioni.

Prima di tutto, "Maschera" non significa "sottrazione", in senso aritmetico - non c'è né prestito né riporto, in secondo luogo, umask è una maschera; non è un numero da sottrarre.

In terzo luogo, la maschera disattiva i bit di autorizzazione. Se sono già disattivati, umask non modifica l'autorizzazione,

Ad esempio, supponi di dover smascherare 077 dai valori di default di sistema per i file che sono 666 e le directory che sono 777 .

Il comando che userai è

umask 077

(smascheramento del valore in binario, 000 111 111 )

Ciò che questo smascheramento farà è che spegnerà uno dei primi sei LSB (bit meno significativi) se sono 1 e non cambierà se qualcuno di essi è già disattivato.

Ecco come viene calcolata l'autorizzazione finale:

file permisison 666 = 110 110 110 
unmask value    077 = 000 111 111
will result in, 600 = 110 000 000

Osserva come entrambi i valori di 110 sono stati modificati in 000 .

Allo stesso modo,

directory permission 777 = 111 111 111 
unmask value         077 = 000 111 111
will result in,      700 = 111 000 000
    
risposta data Sufiyan Ghori 05.06.2016 - 16:09
9

Concetto di base:

Se sei come la maggior parte degli umani e non capisci che diamine "umasks ottali sono calcolati tramite AND bit a bit del complemento unario dell'argomento usando NOT bit a bit" significa, ecco la mia semplice spiegazione :

Prima di tutto, pensa a cosa sia una "maschera". Una maschera blocca qualcosa. Pensa al nastro adesivo. In questo caso, umask è come il nastro di mascheramento per bloccare / disabilitare i permessi quando si crea un nuovo file o una directory.

Le autorizzazioni predefinite durante la creazione di una nuova directory sono octal 777 (111 111 111) e un nuovo file è octal 666 (110 110 110) . Impostiamo umask per bloccare / disabilitare determinate autorizzazioni.

  • Un bit maschera di 1 significa bloccare / disabilitare tale autorizzazione (mettere il nastro di mascheratura su quel bit).
  • Un bit di maschera di 0 consentirà il passaggio del permesso (nessun nastro di mascheratura su quel bit).

Quindi una maschera octal 022 (000 010 010) significa disabilitare group write e others write e consentire a tutte le altre autorizzazioni di passare.

Calcolo:

Ecco un esempio di calcolo per un nuovo file (permesso di default 666) con un umask 022:

  perm mask result
----------------------------
u 1    0    1 (pass through)
  1    0    1 (pass through)
  0    0    0 (pass through)
----------------------------
g 1    0    1 (pass through)
  1    1    0 (disable)
  0    0    0 (pass through)
----------------------------
o 1    0    1 (pass through)
  1    1    0 (disable)
  0    0    0 (pass through)

Ecco come si finisce con il risultato di 644 quando si crea un nuovo file.

Modo più semplice:

Ma se i calcoli della maschera inversa ti confondono, c'è un modo più semplice di usare la notazione umask simbolica. Quando usi questo metodo, stai solo specificando i bit pass-through invece dei bit della maschera.

  • umask u=rwx,g=rx,o=rx significa consentire il passaggio per user rwx , group rx , other rx . Il che implica disabilitare group w , others w . Se esegui questo comando, controlla umask , otterrai 022 .
  • umask u=rwx,g=,o= significa consentire il passaggio per user rwx . Il che implica disabilitare tutti gli accessi per group e others . Se esegui questo comando, controlla umask , otterrai 077 .

Calcolo del bonus:

Se in realtà vuoi capire quali "umasks ottali sono calcolati tramite AND bit a bit del complemento unario dell'argomento usando NOT bit a bit" , ecco alcune tabelle logiche che possono aiutarti a dimostrare. Ricorda, un bit di maschera 1 significa disabilita, 0 significa passare attraverso.

perm mask result
----------------
0    1    0     (mask 1 always disables)
1    1    0     (mask 1 always disables)
0    0    0     (mask 0 passes through)
1    0    1     (mask 0 passes through)

Se crei la tabella con NOT(mask) , ora è solo una semplice tabella logica AND !

perm NOT(mask) result
---------------------
0    0         0     (mask 1 always disables)
1    0         0     (mask 1 always disables)
0    1         0     (mask 0 passes through)
1    1         1     (mask 0 passes through)

Quindi la formula è: result = perm AND (NOT mask)

    
risposta data wisbucky 04.04.2017 - 00:30

Leggi altre domande sui tag