Domanda Cos'è "umask" e come funziona?


Credo che umask sia qualcosa che controlla autorizzazioni di file, ma non capirlo completamente.

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

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

  1. Cosa è esattamente umask? Spiegami che ero un "noob di Linux"
  2. Come faccio a calcolare con umask?
  3. Quali sono i casi d'uso per umask?

159
2018-05-22 20:42


origine


app_mode 666 rw- rw- rw-  umask 644 --0 -00 -00  file_mode 022 --- -w- -w- - grabantot


risposte:


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

Come hai impostato la 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 l'autorizzazione dei file 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 un umask come 077 per disattivare tali autorizzazioni per il gruppo e altri.

Al contrario, una umask di 000 renderà le directory appena create leggibili, scrivibili e discendenti per tutti (i permessi saranno 777). Tale umask è altamente insicuro e non si dovrebbe mai impostare la 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:

user@computer:~$ touch new-file-name
user@computer:~$ 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 la tua attuale impostazione umask, apri un terminale ed esegui il comando:

umask

Per cambiare l'impostazione umask della shell corrente su 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 mostreranno le informazioni sul file, eseguire:

user@computer:~$ touch new-file-name
user@computer:~$ 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, avviare l'editor di testo GEdit eseguendo gedit nel terminale e salvare un file usando gedit. Noterai che il file appena creato è influenzato dalla stessa impostazione umask del terminale.

Caso d'uso: sistema multiutente

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. modificare ~/.profile e aggiungi una nuova riga con:

umask 007

È necessario effettuare nuovamente l'accesso per questo cambiamento di umask in ~/.profile 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 si desidera applicare questa impostazione umask a tutti gli utenti del sistema, è possibile modificare il file del profilo a livello di sistema in /etc/profile.


125
2018-05-22 20:59



Quindi, cosa significano le cifre nella umask? Perché lo fa 777 significa che il gruppo e gli altri saranno in grado di scrivere su di esso, mentre 077 significa che non possono? - HelloGoodbye
Inoltre, tu dici che se la umask è 000, il permesso del file sarà 777. Quindi con una maschera predefinita di 022, non dovrebbero essere i permessi dei file 755, cioè corrispondente a -rwxr-xr-xno -rw-r--r--? - HelloGoodbye
Devo ammettere, questa spiegazione mi ha confuso più di quanto non mi aiutasse. - Connel Hooley
Nota quella L'umask predefinito di Ubuntu è cambiato in 0002 solo un mese dopo questa risposta è stata pubblicata. - Jeff Puckett
@ CiaoGiobye se la umask è 000 quindi nessuna autorizzazione verrà rimossa. applicazioni come touch e nano crea file con impostazioni predefinite 666 quindi il permesso del file rimarrà 666 ma una umask di 022 rimuoverà i bit di scrittura per il gruppo e gli altri, quindi 666 viene ridotto a 644 aka -rw-r--r-- Prendere in considerazione mkdir quale modalità di creazione predefinita di 777 con una umask di 022 ridurrà le autorizzazioni a 755 - Jeff Puckett


Oltre alla buona discussione nella risposta accettata, vale la pena aggiungere ulteriori punti umask, con riferimento a come è gestito in 12.04 e oltre.

Umask e pam_umask

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

# 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 tanti importanti Moduli PAM che sono cruciali nelle operazioni di Ubuntu (run apropos '^pam_' per trovare le manpage per gli altri). Nel pagina di manuale per pam_umask è noto 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

Nuove cartelle in $HOME può essere creato da mkdir con le autorizzazioni 775 predefinite e i file creati con touch con le autorizzazioni 664 predefinite anche quando la umask predefinita è 022. Ciò sembra, all'inizio, contraddittorio e vale la pena di essere spiegato.

Mentre l'umask predefinito è 022 su Ubuntu, questa non è l'intera storia, poiché c'è 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ò

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

Quindi perché vedi quanto segue stat quando viene creata una nuova cartella con mkdir su un singolo sistema utente come il mio (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.


34
2018-04-02 00:16



Sembra che alla tua seconda parte manchi qualcosa? (USERGROUP_ENABLE?) +1 per informazioni aggiornate - Lekensteyn
@Lekensteyn Stranamente, l'impostazione in /etc/login.defs è sicuramente USERGROUPS_ENAB yes dopo averlo controllato La sintassi di quel file è leggermente inusuale.
Ho appena controllato il file e la fonte e hai ragione, queste (e altre) impostazioni sono denominate in modo confuso "_ENAB". - Lekensteyn


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 è possibile calcolare per impostare umask opportune premesse tali:

$ 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 del file: 666
  • valore di umask: 022
  • sottrai per ottenere le autorizzazioni del nuovo file (666-022) : 644 (rw-r–r–)

Calcolo del permesso 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 di umask: 022
  • Sottrai per ottenere i permessi della nuova directory (777-022) : 755 (rwxr-xr-x)

29
2018-04-06 08:27



Non penso che questo sia il modo in cui vengono calcolati i permissons finali, e se il valore di smascheramento è 077 come vorresti sottrarre 666-077 in quel caso ? - Sufiyan Ghori
@SufiyanGhori La spiegazione di Baron non è completa per il permesso di file. Nel tuo caso e in qualsiasi calcolo futuro, per facile da ricordare, dovresti tenere a mente di sottrarli in questo modo: 6-0 6-7 6-7 se qualsiasi risultato di questi tre è -1 allora lascia che sia 0. Quindi noi avere il risultato finale 600 - Huy.PhamNhu
@ Huy.PhamNhu Anche questo non è corretto. Con il permesso di base di 666 e umask di 033 non si otterrà sicuramente 633. - maaartinus
No no no Non è possibile utilizzare la sottrazione per calcolare umask (funziona con determinati valori, ma non tutti). Devi pensare alla umask come "disabilita i bit". Guarda le altre risposte di Sufiyan e Wisbucky. - wisbucky


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

Prima di tutto, "Maschera" non significa "sottrazione", in senso aritmetico - non ci sono né prestiti né implicazioni, in secondo luogo, il umask è una maschera; non è un numero da sottrarre.

Terzo, la maschera disattiva i bit di autorizzazione. Se sono già fuori, il umask non modifica l'autorizzazione,

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

Il comando che userai è,

umask 077

(smascherare il valore in binario, 000 111 111)

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

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 110 i valori sono cambiati in 000.

Allo stesso modo,

directory permission 777 = 111 111 111 
unmask value         077 = 000 111 111
will result in,      700 = 111 000 000

24
2018-06-05 14:09



questa dovrebbe essere la risposta! - Abdelouahab
@SufiyanGhori Quindi se umask 177 (001 111 111), disattiverà i primi 7 bit meno significativi, se lo sono 1 - Kasun Siyambalapitiya
è corretto @KasunSiyambalapitiya - Sufiyan Ghori


Concetto di base:

Se sei come la maggior parte degli umani e non capisci cosa diavolo "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 durante la creazione di un nuovo file o dir.

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 po 'di maschera 1 significa bloccare / disabilitare tale autorizzazione (mettere il nastro di mascheratura su quel bit).
  • Un po 'di maschera 0 consentirà il permesso di passare (senza nastro adesivo sopra quel bit).

Quindi un octal 022 (000 010 010) maschera significa disabilitare group write e others writee 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 usando la notazione umask simbolica. Quando si utilizza questo metodo, quindi si specificano solo i bit pass-through anziché i bit 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 si esegue questo comando, controllare umask, otterrete 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 si esegue questo comando, controllare umask, otterrete 077.

Calcolo del bonus:

Se davvero vuoi capire cosa "umasks ottali sono calcolati tramite AND bit a bit del complemento unario dell'argomento usando NOT bit a bit" significa, ecco alcune tabelle logiche che possono aiutare a dimostrare. Ricorda, un bit di maschera 1 significa disabilitare, 0 significa passare.

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 fai il tavolo con NOT(mask), ora è solo un semplice AND tabella logica!

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 per questo è: result = perm AND (NOT mask)


9
2018-04-03 22:30