3 581
contributi
S3v (discussione | contributi) m (+ template autori) |
mNessun oggetto della modifica |
||
(12 versioni intermedie di 3 utenti non mostrate) | |||
Riga 1: | Riga 1: | ||
{{ | {{File_System | ||
|successivo=Udev | |||
}}{{Versioni_compatibili}}{{File_System1}} | |||
== 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 25: | ||
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 39: | ||
<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: | ||
* <code>'''u'''</code> | * <code>'''u'''</code> (''user'') applica i permessi all'utente proprietario del file, | ||
* <code>'''g'''</code> | * <code>'''g'''</code> (''group'') applica i permessi al gruppo proprietario del file, | ||
* <code>'''o'''</code> | * <code>'''o'''</code> (''other'') applica i permessi ad altri utenti, | ||
* <code>'''a'''</code> | * <code>'''a'''</code> (''all'') applica i permessi a tutti gli utenti; è quello di default se non viene specificato, | ||
* <code>'''+'''</code> | * <code>'''+'''</code> è un operatore logico che aggiunge i permessi specificati, | ||
* <code>'''-'''</code> = | * <code>'''-'''</code> è un operatore logico che rimuove i permessi specificati, | ||
* <code>'''r'''</code> | * <code>'''='''</code> è un operatore logico che assegna i soli permessi specificati, rimuovendo quelli in eccesso eventualmente presenti, | ||
* <code>'''w'''</code> | * <code>'''r'''</code> (''read'') indica il permesso di lettura, | ||
* <code>'''x'''</code> | * <code>'''w'''</code> (''write'') indica il permesso di scrittura, | ||
* <code>'''s'''</code> | * <code>'''x'''</code> (''execute'') indica il permesso di esecuzione per i file regolari, e accesso per le directory, | ||
* <code>'''t'''</code> | * <code>'''X'''</code> indica il permesso di esecuzione per file regolari, se già marcati come eseguibili, e quello di accesso 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. | |||
==== 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 accesso(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 85: | ||
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 accesso 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 accesso a tutte le sottodirectory: | |||
<pre> | |||
$ chmod -R u+rwX,g+rX,o+rX directory | |||
</pre> | |||
Rimuovere il permesso di esecuzione ai file regolari, assicurandone invece la presenza per le directory: | |||
<pre> | |||
$ chmod -R a-x,a+X directory | |||
</pre> | |||
==== setuid ==== | ==== setuid ==== | ||
Riga 87: | Riga 111: | ||
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. | ||
Per ragioni di sicurezza soltanto il proprietario dell'eseguibile, o [[root]], può eseguire questo comando. | |||
{{Warningbox | Si consideri che se l'eseguibile contiene falle sfruttabili da terzi, si avrebbe creato un modo per ottenere gli stessi privilegi del proprietario, permettendo la lettura, l'alterazione e la cancellazione di tutto quello che l'utente ha creato. | |||
Questo è ancora peggio con gli eseguibili appartenenti a [[root]], che esporrebbe l'intero sistema a un rischio di ''privilege escalation'', e ovviamente l'operazione richiederebbe [[privilegi di amministrazione]]. | |||
'''Mai''' aggiungere il bit ''setuid'' a un eseguibile che si vuole eseguire come amministratore, se non si è più che certi di quello che si sta facendo.}} | |||
Si noti che i comandi <code>su</code> e <code>sudo</code> utilizzano tale bit per permettere all'utente, previa autenticazione, di ottenere [[privilegi di amministrazione]] oppure eseguire un comando come un altro utente. E vale lo stesso per altri comandi di sistema, che utilizzano tali privilegi per lo stretto necessario. | |||
==== setgid ==== | |||
<pre> | <pre> | ||
Riga 92: | Riga 128: | ||
$ 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 140: | ||
</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'').<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/accesso(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'', | |||
0 rimuove i permessi speciali. | |||
====== Esempi ====== | |||
Assegnare i permessi di lettura, scrittura e accesso (4+2+1) a una directory a tutti, limitando però il permesso di scrittura sui file già creati al solo proprietario (''sticky''): | |||
<pre> | |||
$ chmod 1777 directory | |||
</pre> | |||
Assegnare i permessi di lettura, scrittura e accesso all'utente e al gruppo di una directory, facendo ereditare il gruppo della directory ai nuovi file creati (''setgid'' su directory): | |||
<pre> | |||
$ chmod 2770 directory | |||
</pre> | |||
== Impostazioni predefinite == | == Impostazioni predefinite == | ||
Riga 149: | Riga 206: | ||
[http://wiki.debian.org/it/Permissions Permessi], Wiki ufficiale Debian <BR> | [http://wiki.debian.org/it/Permissions Permessi], Wiki ufficiale Debian <BR> | ||
[http://it.wikipedia.org/wiki/Setuid_e_setgid Setuid e setgid], Wikipedia | [http://it.wikipedia.org/wiki/Setuid_e_setgid Setuid e setgid], Wikipedia | ||
{{Autori | {{Autori | ||
Riga 157: | Riga 211: | ||
|Verificata_da= | |Verificata_da= | ||
: [[Utente:Wtf|Wtf]] | : [[Utente:Wtf|Wtf]] | ||
|Numero_revisori= | : [[Utente:HAL 9000|HAL 9000]] 19:38, 31 ago 2014 (CEST) | ||
|Numero_revisori=2 | |||
|Estesa_da= | |||
: [[Utente:HAL 9000|HAL 9000]] | |||
}} | }} | ||
[[Categoria:Filesystem]] | [[Categoria:Filesystem]] | ||
[[Categoria:Shell]] | [[Categoria:Shell]] |
contributi