Come viene calcolato umask in Linux?


15

So che umaskposso limitare gli utenti privilegiati, usando questo formato umask ugo.

Capisco che read = 4, write = 2 e exec = 1. Tuttavia, quando digito umask, restituisce 4 cifre che è 0022o 0073. Non ho idea di come funzioni adesso perché c'è una cifra in più. Cos'è quella cifra extra e cosa 0022significa?

Risposte:


18

Supponiamo che la maschera predefinita sia 0666. umask0022 renderebbe la nuova maschera 0644 (0666-0022 = 0644), il che significa che il gruppo e altri hanno autorizzazioni di lettura (nessuna scrittura o esecuzione).

La cifra "extra" (il primo numero = 0) specifica che non esistono modalità speciali.

Se la modalità inizia con una cifra, verrà interpretata come ottale, altrimenti verrà considerata simbolica.

0 è una cifra, così come 1 (per il bit appiccicoso) o 6 (per SGID). Un comando come chmodpuò essere chiamato con altri metodi, ad esempio chmod ug+rw mydirdove aggiungere le autorizzazioni di lettura e scrittura all'utente e al gruppo. Si noti che la modalità in questo caso (ug + rw) non inizia con una cifra, quindi non viene interpretata come ottale ma piuttosto simbolica.

Vedi en.wikipedia.org/wiki/Chmod#Symbolic_examples per simbolismi e www.lifeaftercoffee.com/2007/03/20/special-permission-modes-in-linux-and-unix/ per un po 'su modalità speciali.

Non so che con il primo smascheresti umask, ma tecnicamente potresti. Spiegherebbe perché lo vedi quasi sempre come uno zero.

Ringraziamo pinkfloydx33

La prima cifra della maschera si occupa di autorizzazioni speciali che non si adattano così chiaramente al modello proprietario / gruppo / altro. Quando vengono fornite quattro cifre per un'autorizzazione del file, la prima si riferisce a quei valori speciali:

4000 = SUID
2000 = SGID
1000 = sticky bit

Il bit SUID, abbreviazione di set-user-ID, fa eseguire un programma eseguibile con l'ID utente effettivo (uid) del proprietario - in altre parole, indipendentemente da chi lo esegue, il programma viene eseguito con i diritti del proprietario. Questo è comunemente visto nei programmi che fanno cose che richiedono i privilegi di root, ma che devono essere eseguiti da utenti normali: ne passwdè un esempio.

Il bit SGID, abbreviazione di set-group-ID, è molto simile, ma viene eseguito con l' ID gruppo effettivo (gid) del proprietario.

La parte adesiva è un po 'più complicata, se vuoi maggiori informazioni a riguardo, puoi leggere la manpage per sticky.

Questi bit possono anche essere usati con le directory, ma il loro significato cambia.

Non credo che tu possa effettivamente impostare il umaskper consentire di abilitare uno di questi bit extra per impostazione predefinita, ma probabilmente non vorrai mai farlo comunque.

Ringraziamo l' utente470379


1
In realtà, non è possibile fornire un valore diverso da zero diverso dalle ultime 3 cifre. Secondo Posix: "L'interpretazione dei valori della modalità che specificano i bit della modalità file diversi dai bit di autorizzazione del file non è specificata." Secondo man 2 umask(la corrispondente chiamata di sistema) " maskvengono utilizzati solo i bit di autorizzazione del file ". In bash, umask 1000 genera un errore: "numero ottale fuori intervallo". Quindi perché lo 0 in più? Penso che sia solo per dimostrare che il numero è in ottale.
rici,

che pastebin non ha alcun riferimento a umask, quindi non vedo quanto sia rilevante. chmod consente di impostare i primi tre bit, ma umask non consente di mascherarli. (vale a dire che avresti potuto scrivere chmod 6777 dropbox. E, a proposito, anche chmod ug+s.)
rici,

Sì, hai ragione, non so cosa stavo pensando.
Braiam,

@Braiam: la tua formula per calcolare la nuova maschera è sbagliata, non lo è 0666-0022, lo è 0666 & ~0022.
cuonglm

1
Penso che l'obiezione non sia il modo in cui i numeri sono scritti, ma l'uso dell'operatore di sottrazione (-) anziché bit a bit e (&).
BowlOfRed
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.