3 581
contributi
S3v (discussione | contributi) |
(corretti prompt, aggiunte: considerazioni di sicurezza, opzioni '=' e 'X' a chmod simbolico, chmod ottale per i permessi speciali, + esempi vari) |
||
Riga 3: | Riga 3: | ||
== Modificare il proprietario o il gruppo di un file == | == Modificare il proprietario o il gruppo di un file == | ||
In ambito Unix e GNU/Linux, quando un file viene creato esso appartiene all'utente che l'ha creato e al gruppo principale cui l'utente appartiene.<br/> | In ambito Unix e GNU/Linux, quando un file viene creato esso appartiene all'utente che l'ha creato e al gruppo principale cui l'utente appartiene.<br/> | ||
Il comando <code>'''chown'''</code> ('''CH'''ange '''OWN'''ership) permette di modificare sia l'utente sia il gruppo proprietario di un file.<br/> | Il comando <code>'''chown'''</code> ('''CH'''ange '''OWN'''ership) permette di modificare sia l'utente sia il gruppo proprietario di un file. Per motivi di sicurezza, in ambienti GNU/Linux di default sono necessari i privilegi di amministrazione per cambiare il proprietario di un file, anche se si tratta di uno dei propri file.<br/> | ||
La sua sintassi: | La sua sintassi: | ||
<pre> | <pre> | ||
Riga 23: | Riga 23: | ||
Per verificare la modifica apportata utilizziamo il comando seguente: | Per verificare la modifica apportata utilizziamo il comando seguente: | ||
<pre> | <pre> | ||
$ ls -lh filetest1 | |||
</pre> | </pre> | ||
Per modificare l'utente proprietario di una directory e tutti i file contenuti al suo interno possiamo utilizzare l'opzione -R: | Per modificare l'utente proprietario di una directory e tutti i file contenuti al suo interno possiamo utilizzare l'opzione -R: | ||
<pre> | <pre> | ||
# chown | # chown -R utente1 directory1 | ||
</pre> | </pre> | ||
Per modificare utente e gruppo proprietario di un file: | Per modificare utente e gruppo proprietario di un file: | ||
Riga 37: | Riga 37: | ||
<code>'''Chgrp'''</code> è un comando, dalla sintassi simile a [[chown]], per cambiare solo il gruppo proprietario di un file: | <code>'''Chgrp'''</code> è un comando, dalla sintassi simile a [[chown]], per cambiare solo il gruppo proprietario di un file: | ||
<pre> | <pre> | ||
$ chgrp gruppo1 filetest1 | |||
</pre> | </pre> | ||
Per motivi di sicurezza si può cambiare il gruppo di un file soltanto in due casi: si invoca il comando con privilegi di amministrazione, oppure l'utente che lo invoca è sia il proprietario del file sia un membro del gruppo scelto. | |||
== Modificare i permessi sui file == | == Modificare i permessi sui file == | ||
Il comando che permette di gestire i permessi su file e directory è <code>'''chmod'''</code>.<br/> | Il comando che permette di gestire i permessi su file e directory è <code>'''chmod'''</code>.<br/> | ||
Ci sono due modi per impostare i permessi utilizzando il comando [[chmod]], la '''modalità simbolica''' e la '''modalità numerica ottale'''. | Ci sono due modi per impostare i permessi utilizzando il comando [[chmod]], la '''modalità simbolica''' e la '''modalità numerica ottale'''. | ||
{{ Warningbox | Perché un utente possa scrivere in una certa directory è necessario che lo stesso utente abbia almeno i permessi di esecuzione | {{ Warningbox | Perché un utente possa scrivere in una certa directory è necessario che lo stesso utente abbia almeno i permessi di esecuzione a monte della stessa, in caso contrario non potrà né creare né modificare nulla anche se possiede tutti i permessi per la sotto-directory in questione.<br/> | ||
Similmente annullare tutti i permessi relativi ad una certa directory rende impossibile accedere a tutte le relative sotto-directory, risultano dunque impedite anche semplici operazioni come elencare gli elementi in esse contenuti. }} | Similmente annullare tutti i permessi relativi ad una certa directory rende impossibile accedere a tutte le relative sotto-directory, risultano dunque impedite anche semplici operazioni come elencare gli elementi in esse contenuti.}} | ||
Per motivi di sicurezza, soltanto il proprietario di un file può cambiarne i permessi senza privilegi di amministrazione. | |||
=== Modalità simbolica di chmod === | === Modalità simbolica di chmod === | ||
<pre> | <pre> | ||
$ chmod u|g|o|a|+rwx file1/directory1 | |||
</pre> | </pre> | ||
Significato delle opzioni disponibili del precedente comando: | Significato delle opzioni disponibili del precedente comando: | ||
Riga 54: | Riga 59: | ||
* <code>'''g'''</code> = group - applica i permessi al gruppo proprietario del file, | * <code>'''g'''</code> = group - applica i permessi al gruppo proprietario del file, | ||
* <code>'''o'''</code> = other - applica i permessi ad altri utenti, | * <code>'''o'''</code> = other - applica i permessi ad altri utenti, | ||
* <code>'''a'''</code> = all - applica i permessi a tutti gli utenti, | * <code>'''a'''</code> = all - applica i permessi a tutti gli utenti; è quello di default se non viene specificato, | ||
* <code>'''+'''</code> = questo operatore logico aggiunge i permessi specificati, | * <code>'''+'''</code> = questo operatore logico aggiunge i permessi specificati, | ||
* <code>'''-'''</code> = questo operatore logico rimuove i permessi specificati, | * <code>'''-'''</code> = questo operatore logico rimuove i permessi specificati, | ||
* <code>'''='''</code> = questo operatore logico assegna i soli permessi specificati, rimuovendo quelli in eccesso eventualmente presenti, | |||
* <code>'''r'''</code> = indica il permesso di lettura, | * <code>'''r'''</code> = indica il permesso di lettura, | ||
* <code>'''w'''</code> = indica il permesso di scrittura, | * <code>'''w'''</code> = indica il permesso di scrittura, | ||
* <code>'''x'''</code> = indica il permesso di esecuzione | * <code>'''x'''</code> = indica il permesso di esecuzione per i file regolari, e attraversamento per le directory, | ||
* <code>'''s'''</code> = indica l'opzione ''setuid'', si veda l'apposito paragrafo | * <code>'''X'''</code> = indica il permesso di esecuzione per file regolari, se già marcati come eseguibili, e quello di attraversamento per le directory, | ||
* <code>'''s'''</code> = indica l'opzione ''setuid''/''setgid'', si veda l'apposito paragrafo, | |||
* <code>'''t'''</code> = indica l'opzione ''sticky'', si veda l'apposito paragrafo. | * <code>'''t'''</code> = indica l'opzione ''sticky'', si veda l'apposito paragrafo. | ||
==== Esempi ==== | ==== Esempi ==== | ||
Rimuovere su una directory chiamata "directory1" i permessi di lettura(r), scrittura(w) | Rimuovere su una directory chiamata "directory1" i permessi di lettura(r), scrittura(w) e attraversamento(x) per gli utenti gruppo(g) e altri(o): | ||
<pre> | <pre> | ||
$ chmod go-rwx directory1 | $ chmod go-rwx directory1 | ||
</pre> | </pre> | ||
Aggiungere i permessi di lettura(r) ed esecuzione(x) solo per l'utente proprietario(u), rimuovendo prima eventuali permessi abilitati per tutti gli utenti: | Aggiungere i permessi di lettura(r) ed esecuzione (x) solo per l'utente proprietario(u), rimuovendo prima eventuali permessi abilitati per tutti gli utenti: | ||
<pre> | <pre> | ||
$ chmod a-rwx filetest1 | $ chmod a-rwx filetest1 | ||
Riga 76: | Riga 83: | ||
Si noti che nel primo caso si sarebbe potuto ottenere lo stesso risultato scrivendo: | Si noti che nel primo caso si sarebbe potuto ottenere lo stesso risultato scrivendo: | ||
<pre> | <pre> | ||
$ chmod -rwx filetest1 | |||
</pre> | </pre> | ||
ovvero, evitando di specificare il destinatario della modifica dei permessi, si ottiene lo stesso risultato che si avrebbe specificando 'a', cioè tutti. | ovvero, evitando di specificare il destinatario della modifica dei permessi, si ottiene lo stesso risultato che si avrebbe specificando 'a', cioè tutti. | ||
Aggiungere ricorsivamente i permessi di lettura a tutti, di scrittura al solo utente, di esecuzione a tutti (per file già eseguibili), e di attraversamento a tutte le directory: | |||
<pre> | |||
$ chmod -R u+rwX,g+rX,o+rX directory | |||
</pre> | |||
Aggiungere ricorsivamente i permessi di lettura a tutti, di scrittura al solo utente, di esecuzione a tutti (per file già eseguibili), e di attraversamento a tutte le sottodirectory: | |||
<pre> | |||
$ chmod -R u+rwX,g+rX,o+rX directory | |||
</pre> | |||
==== setuid ==== | ==== setuid ==== | ||
Riga 87: | Riga 104: | ||
Permette di derogare a quanto fin qui scritto, in particolare se l'opzione '+s' è aggiunta al solo proprietario e l'oggetto è un file eseguibile allora quando questo verrà avviato sarà eseguito sia con i privilegi dell'utente che ha effettivamente eseguito il file sia con quelli del proprietario. Naturalmente perché tutto ciò abbia senso è necessario che il file sia eseguibile oltre che dal proprietario anche dal gruppo e/o da chiunque.<br/> | Permette di derogare a quanto fin qui scritto, in particolare se l'opzione '+s' è aggiunta al solo proprietario e l'oggetto è un file eseguibile allora quando questo verrà avviato sarà eseguito sia con i privilegi dell'utente che ha effettivamente eseguito il file sia con quelli del proprietario. Naturalmente perché tutto ciò abbia senso è necessario che il file sia eseguibile oltre che dal proprietario anche dal gruppo e/o da chiunque.<br/> | ||
Per quanto riguarda il proprietario questo è l'unico caso di utilizzo della suddetta opzione, infatti risulta del tutto inutile se applicata a cartelle o file non eseguibili. | Per quanto riguarda il proprietario questo è l'unico caso di utilizzo della suddetta opzione, infatti risulta del tutto inutile se applicata a cartelle o file non eseguibili. | ||
==== setgid ==== | |||
<pre> | <pre> | ||
Riga 92: | Riga 111: | ||
$ chmod g+s cartella | $ chmod g+s cartella | ||
</pre> | </pre> | ||
Qualora invece l'opzione sia attribuita al gruppo l'effetto è simile, ma invece che aggiungere al processo i privilegi dell'utente proprietario vengono aggiunti quelli del gruppo proprietario. In questo caso è poi possibile attribuire l'opzione 's' oltre che a file eseguibili anche alle cartelle, in tal modo qualsiasi file e sottocartella in essa creati avranno di base come gruppo non quello dell'utente che li ha effettivamente creati, ma quello proprio della cartella genitrice (cui appunto è stata attribuita l'opzione 's'). | Qualora invece l'opzione sia attribuita al gruppo l'effetto è simile, ma invece che aggiungere al processo i privilegi dell'utente proprietario vengono aggiunti quelli del gruppo proprietario.<br/> | ||
In questo caso è poi possibile attribuire l'opzione 's' oltre che a file eseguibili anche alle cartelle, in tal modo qualsiasi file e sottocartella in essa creati avranno di base come gruppo non quello dell'utente che li ha effettivamente creati, ma quello proprio della cartella genitrice (cui appunto è stata attribuita l'opzione 's'). | |||
Per quanto scritto appare evidente come l'opzione 's' non abbia alcun senso se applicata a tutti (anzi rischia solo di essere una possibile fonte di problemi di sicurezza). | Per quanto scritto appare evidente come l'opzione 's' non abbia alcun senso se applicata a tutti (anzi rischia solo di essere una possibile fonte di problemi di sicurezza). | ||
Riga 103: | Riga 123: | ||
</pre> | </pre> | ||
Quest'opzione è utile generalmente quando si ha a che fare con cartelle per le quali tutti hanno il permesso di scrivere (quindi anche cancellare); in tal caso tutti possono scrivere nuovi file e sottocartelle, ma nessuno può cancellare quelli altrui in quanto ciò è consentito solo ai rispettivi proprietari. | Quest'opzione è utile generalmente quando si ha a che fare con cartelle per le quali tutti hanno il permesso di scrivere (quindi anche cancellare); in tal caso tutti possono scrivere nuovi file e sottocartelle, ma nessuno può cancellare quelli altrui in quanto ciò è consentito solo ai rispettivi proprietari. | ||
È a tutti gli effetti una misura di sicurezza, per limitare il permesso di scrittura su file già creati al solo proprietario. È infatti usata nelle directory condivise tra più utenti, come per esempio <code>/tmp</code> e <code>/var/tmp</code>. | |||
=== Modalità numerica ottale di chmod === | === Modalità numerica ottale di chmod === | ||
Un'altra modalità per settare i permessi è la modalità numerica ottale, in cui si specifica un valore numerico composto da quattro cifre, ognuna rappresentata da un valore numerico che va "0" a "7", come per esempio "2741".<br/> | Un'altra modalità per settare i permessi è la modalità numerica ottale, in cui si specifica un valore numerico composto da tre o quattro cifre, ognuna rappresentata da un valore numerico che va "0" a "7", come per esempio "2741". Le ultime tre, che sono obbligatorie, riguardano i permessi rwx, mentre in presenza di quattro cifre la prima rappresenta i permessi speciali (''setuid'', ''setgid'' e ''sticky bit'').<br/> | ||
Per la parte obbligatoria, il valore che va da "0" a "7" rappresenta in forma numerica i permessi come di seguito riportato: | |||
4 è uguale a lettura(r), | 4 è uguale a lettura(r), | ||
2 è uguale a scrittura(w), | 2 è uguale a scrittura(w), | ||
1 è uguale a esecuzione(x), | 1 è uguale a esecuzione/attraversamento(x), | ||
0 rimuove i permessi. | 0 rimuove i permessi. | ||
Il valore numerico risultante è pari alla somma di tali valori.<br/> | Il valore numerico risultante è pari alla somma di tali valori.<br/> | ||
Prendendo come esempio il quartetto " | Prendendo come esempio il quartetto "741", il valore della seconda cifra "7", è uguale a 4(lettura) + 2(scrittura) + 1(esecuzione) = 7.<br/> | ||
Vediamo di capire adesso il significato delle quattro cifre, per esempio " | Vediamo di capire adesso il significato delle quattro cifre, per esempio "741".<br/> | ||
La prima cifra (7) si riferisce ai permessi per l'utente proprietario.<br/> | |||
La seconda cifra (4) fa riferimento ai permessi per il gruppo.<br/> | |||
La | La terza e ultima cifra (1) si riferisce ai permessi per gli altri utenti non del gruppo. | ||
La | |||
==== Esempi ==== | ==== Esempi ==== | ||
Assegnare i permessi di lettura, scrittura ed esecuzione (4+2+1) soltanto per l'utente proprietario del file denominato "filetest1" e nessun permesso per tutti gli altri utenti: | Assegnare i permessi di lettura, scrittura ed esecuzione (4+2+1) soltanto per l'utente proprietario del file denominato "filetest1" e nessun permesso per tutti gli altri utenti: | ||
<pre> | <pre> | ||
$ chmod 700 filetest1 | |||
</pre> | </pre> | ||
o, in maniera analoga, dal momento che le cifre omesse partendo da sinistra sono considerate "0": | o, in maniera analoga con quattro cifre, dal momento che le cifre omesse partendo da sinistra sono considerate "0": | ||
<pre> | <pre> | ||
$ chmod 0700 filetest1 | |||
</pre> | </pre> | ||
Impostare i permessi di lettura e scrittura (4+2) per l'utente proprietario, e di sola lettura (4) per tutti gli altri utenti: | Impostare i permessi di lettura e scrittura (4+2) per l'utente proprietario, e di sola lettura (4) per tutti gli altri utenti: | ||
<pre> | <pre> | ||
$ chmod 644 filetest1 | |||
</pre> | </pre> | ||
<br/> | <br/> | ||
==== Permessi speciali in forma numerica ==== | |||
I permessi speciali, in forma numerica, sono possibili utilizzando quattro cifre. In tal caso le ultime tre mantengono il loro valore, ma la prima può essere una delle seguenti o una loro combinazione (al solito, facendone la somma): | |||
4 è uguale a ''setuid'', | |||
2 è uguale a ''setgid'', | |||
1 è uguale a ''sticky bit'', | |||
0 rimuove i permessi speciali. | |||
====== Esempi ====== | |||
Assegnare i permessi di lettura, scrittura e attraversamento (4+2+1) a una directory a tutti, limitando però il permesso di scrittura sui file già creati al solo proprietario (''sticky bit''): | |||
<pre> | |||
$ chmod 1777 directory | |||
</pre> | |||
Assegnare i permessi di lettura, scrittura e attraversamento all'utente e al gruppo di una directory, facendo ereditare il gruppo della directory ai nuovi file creati (''sgid'' su directory): | |||
<pre> | |||
$ chmod 2770 directory | |||
</pre> | |||
== Impostazioni predefinite == | == Impostazioni predefinite == | ||
Riga 154: | Riga 194: | ||
|Verificata_da= | |Verificata_da= | ||
: [[Utente:Wtf|Wtf]] | : [[Utente:Wtf|Wtf]] | ||
|Numero_revisori= | : [[Utente:HAL 9000|HAL 9000]] 14:19, 24 ago 2014 (CEST) | ||
|Numero_revisori=2 | |||
|Estesa_da= | |||
: [[Utente:HAL 9000|HAL 9000]] | |||
}} | }} | ||
contributi