<Precedenti | Contenuti | Succ.>
umask – Imposta i permessi predefiniti
. umask Il comando controlla i permessi predefiniti assegnati a un file al momento della sua creazione. Utilizza la notazione ottale per esprimere un mask di bit da rimuovere dagli attributi di modalità di un file. Diamo un'occhiata:
[io@linuxbox~]$ rm -f pippo.txt
[io@linuxbox~]$ umask
0002
[io@linuxbox~]$ > pippo.txt
[io@linuxbox~]$ rm -f pippo.txt
[io@linuxbox~]$ umask
0002
[io@linuxbox~]$ > pippo.txt
[io@linuxbox~]$ ls -l pippo.txt
-rw-rw-r-- 1 me me 0 2016-03-06 14:53 foo.txt
[io@linuxbox~]$ ls -l pippo.txt
-rw-rw-r-- 1 me me 0 2016-03-06 14:53 foo.txt
Per prima cosa abbiamo rimosso qualsiasi vecchia copia di pippo.txt per assicurarci di partire da zero. Successivamente, abbiamo eseguito il umask comando senza argomento per vedere il valore corrente. Ha risposto con il valore 0002 (il valore 0022 è un altro valore predefinito comune), che è la rappresentazione ottale della nostra maschera. Successivamente creiamo una nuova istanza del file pippo.txt e rispettarne i permessi.
Possiamo vedere che sia il proprietario che il gruppo ottengono i permessi di lettura e scrittura, mentre tutti gli altri ottengono solo i permessi di lettura. Il motivo per cui il mondo non ha i permessi di scrittura è dovuto al valore della maschera. Ripetiamo il nostro esempio, questa volta impostando la maschera noi stessi:
[io@linuxbox~]$ rm foo.txt [io@linuxbox~]$ maschera 0000 [io@linuxbox~]$ > pippo.txt [io@linuxbox~]$ ls -l pippo.txt
-rw-rw-rw- 1 me me 0 2016-03-06 14:58 foo.txt
[io@linuxbox~]$ rm foo.txt [io@linuxbox~]$ maschera 0000 [io@linuxbox~]$ > pippo.txt [io@linuxbox~]$ ls -l pippo.txt
-rw-rw-rw- 1 me me 0 2016-03-06 14:58 foo.txt
Quando impostiamo la maschera su 0000 (disattivandolo di fatto), vediamo che il file è ora scrivibile da tutti. Per capire come funziona, dobbiamo analizzare di nuovo i numeri ottali. Se prendiamo la maschera e la espandiamo in binario, e poi la confrontiamo con gli attributi, possiamo vedere cosa succede:
Modalità file originale | --- rw- rw- rw- | |||
Maschera | 000 | 000 | 000 | 010 |
Risultato | --- | rw | rw | r-- |
Ignoriamo per il momento gli zeri iniziali (ci arriveremo tra un minuto) e osserviamo che dove appare l'1 nella nostra maschera, è stato rimosso un attributo - In questo caso, il permesso di scrittura globale. Questo è ciò che fa la maschera. Ovunque appaia un 1 nel valore binario della maschera, un attributo non è impostato. Se osserviamo un valore di maschera di 0022, possiamo vedere cosa fa:
Modalità file originale | --- rw- rw- rw- | |||
Maschera | 000 | 000 | 010 | 010 |
Risultato | --- | rw | r-- | r-- |
Di nuovo, dove appare un 1 nel valore binario, l'attributo corrispondente non è impostato. Provate con alcuni valori (provate con alcuni sette) per abituarvi al funzionamento. Quando avete finito, ricordatevi di ripulire:
[io@linuxbox~]$ rm foo.txt; umask 0002
[io@linuxbox~]$ rm foo.txt; umask 0002
Nella maggior parte dei casi non sarà necessario modificare la maschera; quella predefinita fornita dalla tua distribuzione andrà bene. In alcune situazioni ad alta sicurezza, tuttavia, vorremo controllarla.
Alcuni permessi speciali
Sebbene di solito vediamo una maschera di autorizzazione ottale espressa come un numero di tre cifre, è tecnicamente più corretto esprimerla in quattro cifre. Perché? Perché, oltre ai permessi di lettura, scrittura ed esecuzione, esistono altre impostazioni di autorizzazione meno utilizzate.
Il primo di questi è il bit setuid (ottale 4000). Quando applicato a un file eseguibile, imposta il ID utente effettivo da quello dell'utente reale (l'utente che esegue effettivamente il programma) a quello del proprietario del programma. Il più delle volte questo viene assegnato ad alcuni programmi di proprietà del superutente. Quando un utente normale esegue un programma che è "radice se-tuida”, il programma viene eseguito con i privilegi effettivi del superutente. Ciò consente al programma di accedere a file e directory a cui un utente normale normalmente non avrebbe accesso. Chiaramente, poiché ciò solleva problemi di sicurezza, il numero di programmi setuid deve essere ridotto al minimo assoluto.
La seconda impostazione meno utilizzata è la setgid bit (ottale 2000) che, come il bit setuid, cambia il ID gruppo effettivo dal ID gruppo reale dell'utente reale a quello del proprietario del file. Se il bit setgid è impostato su una directory, ai file appena creati nella directory verrà assegnata la proprietà di gruppo della directory anziché la proprietà di gruppo del creatore del file. Questo è utile in una directory condivisa quando i membri di un gruppo comune necessitano di accedere a tutti i file nella directory, indipendentemente dal gruppo primario del proprietario del file.
Il terzo si chiama bit appiccicoso (ottale 1000). Questo è un retaggio dell'antico Unix, dove era possibile contrassegnare un file eseguibile come "non swappabile". Sui file, Linux ignora lo sticky bit, ma se applicato a una directory, impedisce agli utenti di eliminare o rinominare i file a meno che l'utente non sia il proprietario della directory, il proprietario del file o il superutente. Questo viene spesso utilizzato per controllare l'accesso a una directory condivisa, come / Tmp.
Ecco alcuni esempi di utilizzo chmod con notazione simbolica per impostare questi permessi speciali. Prima assegnazione di setuid a un programma:
chmod u+s Programma
Quindi, assegnando setgid a una directory:
chmod sol+s dir
Infine, assegnando lo sticky bit a una directory:
chmod + t dir
Quando si visualizza l'output da ls, è possibile determinare i permessi speciali. Ecco alcuni esempi. Innanzitutto, un programma con setuid:
-rwsr-xr-x
Una directory che ha l'attributo setgid:
drwxrwsrx
Una directory con lo sticky bit impostato:
drwxrwxrwt