Filesystem: i permessi sui files: differenze tra le versioni

Da Guide@Debianizzati.Org.
Vai alla navigazione Vai alla ricerca
Nessun oggetto della modifica
mNessun oggetto della modifica
 
(29 versioni intermedie di 4 utenti non mostrate)
Riga 1: Riga 1:
{{Versioni compatibili|Tutte le versioni di Debian|}}
{{File_System
=Impostare o modificare i permessi su files e directory=
|successivo=Udev
=Modificare il proprietario o il gruppo di un file=
}}{{Versioni_compatibili}}{{File_System1}}
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 <tt>'''chown'''</tt> ('''CH'''ange '''OWN'''ership) permette di modificare sia l'utente sia il gruppo proprietario di un file.<br/>
== 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/>
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 9: Riga 11:
</pre>
</pre>
I possibili attributi hanno questi significati:
I possibili attributi hanno questi significati:
* <tt>'''-f'''</tt> : Non riporta alcun messaggio d'errore nel caso in cui il comando non abbia successo
* <code>'''-f'''</code> : Non riporta alcun messaggio d'errore nel caso in cui il comando non abbia successo
* <tt>'''-h'''</tt> : Se il file è un link simbolico, cambia l'uid e il gid del link
* <code>'''-h'''</code> : Se il file è un link simbolico, cambia l'[[UID]] e il [[GID]] del link
* <tt>'''-L'''</tt> : Se è specificata l'opzione -R, segue tutti i link simbolici
* <code>'''-L'''</code> : Se è specificata l'opzione -R, segue tutti i link simbolici
* <tt>'''-P'''</tt> : Se è specificata l'opzione -R, nessun link è seguito
* <code>'''-P'''</code> : Se è specificata l'opzione -R, nessun link è seguito
* <tt>'''-R'''</tt> : Cambia uid e gid ricorsivamente in tutti i files e sottocartelle a partire dal file specificato
* <code>'''-R'''</code> : Cambia UID e GID ricorsivamente in tutti i file e sottocartelle a partire dal file specificato
* <tt>'''-v'''</tt> : L'opzione verbose serve per avere un output dettagliato sui risultati del comando eseguito
* <code>'''-v'''</code> : L'opzione verbose serve per avere un output dettagliato sui risultati del comando eseguito
Almeno uno tra il proprietario (owner) e il gruppo (group) va specificato. Se viene specificato il gruppo, questo deve essere preceduto dal segno dei due punti (:). Il proprietario e il gruppo possono essere indicati sia tramite user/group name sia tramite uid e gid.
Almeno uno tra il proprietario (owner) e il gruppo (group) va specificato. Se viene specificato il gruppo, questo deve essere preceduto dal segno dei due punti (:). Il proprietario e il gruppo possono essere indicati sia tramite ''user/group name'' sia tramite UID e GID.
==Esempi==
=== Esempi ===
Nel seguente esempio vogliamo di assegnare al file "filetest1" l'utente proprietario "utente1":
Nel seguente esempio vogliamo di assegnare al file "filetest1" l'utente proprietario "utente1":
<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
$ 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 utente1 -R directory1
# 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 34: Riga 36:
</pre>
</pre>


=Modificare il gruppo di un file o una directory=
== Modificare il gruppo di un file o una directory ==
<tt>'''Chgrp'''</tt> è un comando, dalla sintassi simile a <tt>chown</tt>, 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
$ chgrp  gruppo1  filetest1
</pre>
</pre>
=Modificare i permessi sui files=
 
Il comando che permette di gestire i permessi su file e directory è <tt>'''chmod'''</tt>.<br/>
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.
Ci sono due modi per impostare i permessi utilizzando il comando <tt>chmod</tt>, la '''modalità simbolica''' e la '''modalità numerica ottale'''.
 
==Modalità simbolica di chmod==
== Modificare i permessi sui file ==
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'''.
 
{{ 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.}}
 
Per motivi di sicurezza, soltanto il proprietario di un file può cambiarne i permessi senza [[privilegi di amministrazione]].
 
=== Modalità simbolica di chmod ===
<pre>
<pre>
# chmod u|g|o|a|+rwx  file1/directory1
$ chmod u|g|o|a|+rwx  file1/directory1
</pre>
</pre>
Significato delle opzioni disponibili del precedente comando:
Significato delle opzioni disponibili del precedente comando:
* <tt>'''u'''</tt> = user - applica i permessi all'utente proprietario del file,
* <code>'''u'''</code> (''user'') applica i permessi all'utente proprietario del file,
* <tt>'''g'''</tt> = group - applica i permessi al gruppo proprietario del file,
* <code>'''g'''</code> (''group'') applica i permessi al gruppo proprietario del file,
* <tt>'''o'''</tt> = other - applica i permessi ad altri utenti,
* <code>'''o'''</code> (''other'') applica i permessi ad altri utenti,
* <tt>'''a'''</tt> = 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,
* <tt>'''+'''</tt> = questo operatore logico aggiunge i permessi specificati,
* <code>'''+'''</code> è un operatore logico che aggiunge i permessi specificati,
* <tt>'''-'''</tt> = questo operatore logico rimuove i permessi specificati,
* <code>'''-'''</code> è un operatore logico che rimuove i permessi specificati,
* <tt>'''r'''</tt> = indica il permesso di lettura,
* <code>'''='''</code> è un operatore logico che assegna i soli permessi specificati, rimuovendo quelli in eccesso eventualmente presenti,
* <tt>'''w'''</tt> = indica il permesso di scrittura,
* <code>'''r'''</code> (''read'') indica il permesso di lettura,
* <tt>'''x'''</tt> = indica il permesso di esecuzione.
* <code>'''w'''</code> (''write'') indica il permesso di scrittura,
===Esempi===
* <code>'''x'''</code> (''execute'') indica il permesso di esecuzione per i file regolari, e accesso per le directory,
Rimuovere su una directory chiamata "directory1" i permessi di lettura(r), scrittura(w) ed accesso(x) per gli utenti gruppo(g) e altri(o):
* <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 ====
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>
$ chmod go-rwx directory1
</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:
<pre>
$ chmod a-rwx filetest1
$ chmod u+rx filetest1
</pre>
Si noti che nel primo caso si sarebbe potuto ottenere lo stesso risultato scrivendo:
<pre>
$ chmod -rwx filetest1
</pre>
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 ====
 
<pre>
$ chmod u+s file_eseguibile
</pre>
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 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>
# chmod go-rwx  directory1
$ chmod g+s file_eseguibile
$ chmod g+s cartella
</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:
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).
 
==== sticky bit ====
 
Permettere l'eliminazione di file e sottocartelle solo ai proprietari:
<pre>
<pre>
# chmod a-rwx filetest1
$ chmod +t directory1
# chmod u+rx filetest1
</pre>
</pre>
==Modalità numerica ottale di chmod==
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.
Un altro 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/>
 
Il valore che va da "0" a "7" rappresenta in forma numerica i permessi come di seguito riportato:
È 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 ===
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 "2741", il valore della seconda cifra "7", è uguale a 4(lettura) + 2(scrittura) + 1(esecuzione) = 7.<br/>
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 "2741".<br/>
Vediamo di capire adesso il significato delle quattro cifre, per esempio "741".<br/>
Partendo sempre da sinistra, la prima cifra (2) si riferisce agli attributi dei permessi speciali, che vedremo più avanti.<br/>
La prima cifra (7) si riferisce ai permessi per l'utente proprietario.<br/>
La seconda cifra (7) si riferisce ai permessi per l'utente proprietario.<br/>
La seconda cifra (4) fa riferimento ai permessi per il gruppo.<br/>
La terza cifra (4) fa riferimento ai permessi per il gruppo.<br/>
La terza e ultima cifra (1) si riferisce ai permessi per gli altri utenti non del gruppo.
La quarta e ultima cifra (1) si riferisce ai permessi per gli altri utenti non del gruppo.
==== 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 0700 filetest1
$ 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 700 filetest1
$ 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
$ chmod 644 filetest1
</pre>
</pre>
<br/>
<br/>
: [[Utente:Ferdybassi|Ferdybassi]]
 
----
==== Permessi speciali in forma numerica ====
[[Categoria:Sistema]]
 
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 ==
 
Lo schema di permessi predefinito per ogni utente è ''755'', tuttavia tale valore può essere cambiato editando il corrispondente file <code>~/.profile</code> e decommentando la voce predefinita <code>umask 022</code>, dove al posto di ''022'' deve essere indicato il valore desiderato.
Ad esempio per ottenere uno schema ''775'' bisognerebbe specificare <code>umask 002</code>, si tratta cioè si specificare quella maschera che sottratta cifra per cifra al valore ''777'' restituisce lo schema desiderato. Non a caso ''022'' è la maschera associata allo schema ''755'', infatti 7-0=7 e 7-2=5.
 
È possibile definire la maschera predefinita anche altrove, si veda a tal proposito <pre>man pam_umask 8</pre>
 
== ACL: Access Control List ==
 
È un sistema di gestione dei permessi più fine di quello base descritto sopra, che permette ad esempio di specificare particolari permessi anche per quegli utenti che non possiedono una certa cartella, quando di norma invece è possibile specificarli solo per un gruppo di utenti e non per i singoli.<br/>
Si veda [http://wiki.debian.org/it/Permissions#ACL:_elenchi_di_controllo_degli_accessi_in_Linux questa pagina] per ulteriori informazioni.
 
== Riferimenti esterni ==
 
[http://wiki.debian.org/it/Permissions Permessi], Wiki ufficiale Debian <BR>
[http://it.wikipedia.org/wiki/Setuid_e_setgid Setuid e setgid], Wikipedia
 
{{Autori
|Autore=[[Utente:Ferdybassi|Ferdybassi]]
|Verificata_da=
: [[Utente:Wtf|Wtf]]
: [[Utente:HAL 9000|HAL 9000]] 19:38, 31 ago 2014 (CEST)
|Numero_revisori=2
|Estesa_da=
: [[Utente:HAL 9000|HAL 9000]]
}}
 
[[Categoria:Filesystem]]
[[Categoria:Shell]]
[[Categoria:Shell]]

Versione attuale delle 09:46, 14 nov 2015

File System e dispositivi fisici

Generalità

Locali

Remoti

Strumenti

Arrow right.png


Debian-swirl.png Versioni Compatibili

Tutte le versioni supportate di Debian
File System

Sommario

  1. Principale
  2. File e permessi
  3. Quote utenti


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.
Il comando chown (CHange OWNership) 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.
La sua sintassi:

chown [-fhv] [-R [-L | -P]] owner[:group] file ...

I possibili attributi hanno questi significati:

  • -f : Non riporta alcun messaggio d'errore nel caso in cui il comando non abbia successo
  • -h : Se il file è un link simbolico, cambia l'UID e il GID del link
  • -L : Se è specificata l'opzione -R, segue tutti i link simbolici
  • -P : Se è specificata l'opzione -R, nessun link è seguito
  • -R : Cambia UID e GID ricorsivamente in tutti i file e sottocartelle a partire dal file specificato
  • -v : L'opzione verbose serve per avere un output dettagliato sui risultati del comando eseguito

Almeno uno tra il proprietario (owner) e il gruppo (group) va specificato. Se viene specificato il gruppo, questo deve essere preceduto dal segno dei due punti (:). Il proprietario e il gruppo possono essere indicati sia tramite user/group name sia tramite UID e GID.

Esempi

Nel seguente esempio vogliamo di assegnare al file "filetest1" l'utente proprietario "utente1":

# chown utente1 filetest1

Per verificare la modifica apportata utilizziamo il comando seguente:

$ ls -lh filetest1

Per modificare l'utente proprietario di una directory e tutti i file contenuti al suo interno possiamo utilizzare l'opzione -R:

# chown -R utente1 directory1

Per modificare utente e gruppo proprietario di un file:

# chown utente1:gruppo1 filetest1

Modificare il gruppo di un file o una directory

Chgrp è un comando, dalla sintassi simile a chown, per cambiare solo il gruppo proprietario di un file:

$ chgrp  gruppo1  filetest1

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

Il comando che permette di gestire i permessi su file e directory è chmod.
Ci sono due modi per impostare i permessi utilizzando il comando chmod, la modalità simbolica e la modalità numerica ottale.

Warning.png ATTENZIONE
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.

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

$ chmod u|g|o|a|+rwx  file1/directory1

Significato delle opzioni disponibili del precedente comando:

  • u (user) applica i permessi all'utente proprietario del file,
  • g (group) applica i permessi al gruppo proprietario del file,
  • o (other) applica i permessi ad altri utenti,
  • a (all) applica i permessi a tutti gli utenti; è quello di default se non viene specificato,
  • + è un operatore logico che aggiunge i permessi specificati,
  • - è un operatore logico che rimuove i permessi specificati,
  • = è un operatore logico che assegna i soli permessi specificati, rimuovendo quelli in eccesso eventualmente presenti,
  • r (read) indica il permesso di lettura,
  • w (write) indica il permesso di scrittura,
  • x (execute) indica il permesso di esecuzione per i file regolari, e accesso per le directory,
  • X indica il permesso di esecuzione per file regolari, se già marcati come eseguibili, e quello di accesso per le directory,
  • s indica l'opzione setuid/setgid, si veda l'apposito paragrafo,
  • t indica l'opzione sticky, si veda l'apposito paragrafo.

Esempi

Rimuovere su una directory chiamata "directory1" i permessi di lettura(r), scrittura(w) e accesso(x) per gli utenti gruppo(g) e altri(o):

$ chmod go-rwx directory1

Aggiungere i permessi di lettura(r) ed esecuzione (x) solo per l'utente proprietario(u), rimuovendo prima eventuali permessi abilitati per tutti gli utenti:

$ chmod a-rwx filetest1
$ chmod u+rx filetest1

Si noti che nel primo caso si sarebbe potuto ottenere lo stesso risultato scrivendo:

$ chmod -rwx filetest1

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:

$ chmod -R u+rwX,g+rX,o+rX directory

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:

$ chmod -R u+rwX,g+rX,o+rX directory

Rimuovere il permesso di esecuzione ai file regolari, assicurandone invece la presenza per le directory:

$ chmod -R a-x,a+X directory

setuid

$ chmod u+s file_eseguibile

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.
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.

Warning.png ATTENZIONE
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 su e sudo 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

$ chmod g+s file_eseguibile
$ chmod g+s cartella

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').

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).

sticky bit

Permettere l'eliminazione di file e sottocartelle solo ai proprietari:

$ chmod +t directory1

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 /tmp e /var/tmp.

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 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).
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),
 2 è uguale a scrittura(w),
 1 è uguale a esecuzione/accesso(x),
 0 rimuove i permessi.

Il valore numerico risultante è pari alla somma di tali valori.
Prendendo come esempio il quartetto "741", il valore della seconda cifra "7", è uguale a 4(lettura) + 2(scrittura) + 1(esecuzione) = 7.
Vediamo di capire adesso il significato delle quattro cifre, per esempio "741".
La prima cifra (7) si riferisce ai permessi per l'utente proprietario.
La seconda cifra (4) fa riferimento ai permessi per il gruppo.
La terza e ultima cifra (1) si riferisce ai permessi per gli altri utenti non del gruppo.

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:

$ chmod 700 filetest1

o, in maniera analoga con quattro cifre, dal momento che le cifre omesse partendo da sinistra sono considerate "0":

$ chmod 0700 filetest1

Impostare i permessi di lettura e scrittura (4+2) per l'utente proprietario, e di sola lettura (4) per tutti gli altri utenti:

$ chmod 644 filetest1


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):

$ chmod 1777 directory

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):

$ chmod 2770 directory

Impostazioni predefinite

Lo schema di permessi predefinito per ogni utente è 755, tuttavia tale valore può essere cambiato editando il corrispondente file ~/.profile e decommentando la voce predefinita umask 022, dove al posto di 022 deve essere indicato il valore desiderato. Ad esempio per ottenere uno schema 775 bisognerebbe specificare umask 002, si tratta cioè si specificare quella maschera che sottratta cifra per cifra al valore 777 restituisce lo schema desiderato. Non a caso 022 è la maschera associata allo schema 755, infatti 7-0=7 e 7-2=5.

È possibile definire la maschera predefinita anche altrove, si veda a tal proposito

man pam_umask 8

ACL: Access Control List

È un sistema di gestione dei permessi più fine di quello base descritto sopra, che permette ad esempio di specificare particolari permessi anche per quegli utenti che non possiedono una certa cartella, quando di norma invece è possibile specificarli solo per un gruppo di utenti e non per i singoli.
Si veda questa pagina per ulteriori informazioni.

Riferimenti esterni

Permessi, Wiki ufficiale Debian
Setuid e setgid, Wikipedia




Guida scritta da: Ferdybassi Swirl-auth60.png Debianized 60%
Estesa da:
HAL 9000
Verificata da:
Wtf
HAL 9000 19:38, 31 ago 2014 (CEST)

Verificare ed estendere la guida | Cos'è una guida Debianized