In UNIX, i permessi sono un meccanismo che permettono di definire chi può leggere, scrivere o eseguire un file o una directory. Una delle caratteristiche distintive di UNIX, infatti, è che è stato progettato sin dai suoi primi giorni per essere un sistema multiutente, quindi deve utilizzare meccanismi che permettano agli utenti di gestire i propri file senza avere accesso ai file di altri utenti.
I permessi di un file o di una directory si possono configurare su tre distinte categorie di utenti:
Proprietario (in inglese owner): l’utente che possiede il file.
Gruppo (in inglese group): gli utenti appartenenti allo stesso gruppo a cui appartiene il file.
Altri (in inglese others): tutti gli altri utenti che non rientrano nelle due categorie precedenti.
1 - Tipi di permessi
I tre tipi di permessi che si possono assegnare a un file o una directory sono:
Lettura: permette di leggere il contenuto del file o, per una directory, di elencarne i contenuti.
Scrittura: consente di modificare il file o, per una directory, aggiungere/eliminare file.
Esecuzione: permette di eseguire un file o accedere a una directory.
2 - Rappresentazione dei permessi
All’interno di UNIX, ognuno dei tre tipi di permessi è rappresentato da una singola lettera dell’alfabeto:
Lettura: rappresentato con la r (da read).
Scrittura: rappresentato con la w (da write).
Esecuzione: rappresentato con la x (da execute).
Questi caratteri sono usati per rappresentare l’insieme dei permessi di un file o di una directory attraverso un’unica stringa di 10 caratteri, suddivisa nei seguenti 4 blocchi:
XXXXXXXXXX
dove:
X: indica il tipo di file e può assumere uno dei seguenti valori:
-: file normale.
d: directory.
l: link simbolico.
XXX: permessi per il proprietario (detto owner).
XXX: permessi per il gruppo (detto group).
XXX: permessi per gli altri (detti others).
In particolare, in ogni tripla di caratteri XXX che identificano i permessi di owner, group e others:
Il primo carattere rappresenta il permesso di lettura (r se il permesso è abilitato, - altrimenti).
Il secondo carattere rappresenta il permesso di scrittura (w se il permesso è abilitato, - altrimenti).
Il terzo carattere rappresenta il permesso di esecuzione (x se il permesso è abilitato, - altrimenti).
Esempio
Un esempio di rappresentazione dei permessi di una directory è il seguente:
drwxr-xr--
dove:
d: indica che si tratta di una directory.
rwx: indica i permessi del proprietario, quindi il proprietario ha permesso di lettura, scrittura ed esecuzione.
r-x: indica i permessi del gruppo, quindi i componenti del gruppo possono leggere e aprire la cartella, ma non modificarla, perché il permesso di scrittura è disabilitato con il -.
r--: indica i permessi degli altri, quindi gli altri hanno solamente il permesso di lettura.
3 - Modifica dei permessi
In UNIX, la modifica dei permessi dei file e delle directory può essere effettuata utilizzando i seguenti comandi:
chmod: consente di modificare i permessi del file o della directory.
chown: consente di modificare il proprietario del file o della directory.
chgrp: consente di modificare il gruppo di appartenenza del file o della directory.
L’uso di questi comandi è riservato solamente:
All’account root, che può modificare i permessi, il proprietario e il gruppo di qualsiasi file o directory senza restrizioni (o, allo stesso modo, un utente con privilegi speciali).
Al proprietario del file o della directory, che può solamente utilizzare il comando chmod.
Quindi, un utente comune non può modificare i permessi, ma solamente utilizzare i file o le directory secondo quelli già stabiliti.
3.1 - Comando chmod
Il comando chmod (dall’inglese change mode) modifica i permessi di lettura, scrittura ed esecuzione di owner, group e others. La sintassi del comando è la seguente:
chmod <modalità> <file/directory>
dove:
<modalità>: rappresentazione dei nuovi permessi da applicare al file o alla directory attraverso la modalità simbolica o la modalità numerica.
<file/directory>: il percorso al file o alla directory a cui applicare i nuovi permessi.
3.1.1 - Modalità simbolica
Nella modalità simbolica, per rappresentare i permessi si usano lettere e simboli:
u: per indicare il proprietario del file o della directory (da user).
g: per indicare il gruppo a cui appartiene il file o la directory (da group).
o: per indicare gli altri (da others).
a: per indicare i permessi di tutte e tre le categorie contemporaneamente (da all).
+: per aggiungere nuovi permessi oltre a quelli già esistenti.
-: per rimuovere dei permessi già esistenti.
=: per reimpostare nuovi permessi (sovrascrivendo quelli precedenti).
Esempio
Si consideri il seguente comando.
chmod u+w, g=rx, o-r file.txt
Si può dedurre che:
u+w: viene aggiunto (+) il permesso di scrittura (w) all’utente proprietario del file (u);
g=rx: vengono reimpostati (=) solamente i permessi di lettura (r) e di esecuzione (x) del file per il gruppo (g);
o-r: viene rimosso (-) il permesso di lettura (r) al file per gli altri (o).
3.1.2 - Modalità numerica
Nella modalità numerica, per rappresentare i permessi si usano triple di cifre ottali (quindi da 0 a 7) per rappresentare rispettivamente i permessi di owner, group e others. Le cifre ottali vengono rappresentate in binario ognuna da tre bit:
XXX
dove:
X: permesso di lettura (1 se abilitato, 0 altrimenti).
X: permesso di scrittura (1 se abilitato, 0 altrimenti).
X: permesso di esecuzione (1 se abilitato, 0 altrimenti).
Questa combinazione di tre bit viene convertita in decimale (ecco perché può assumere valori da 010=0002 a 710=1112) e rappresenta i permessi della singola categoria di ogni gruppo
Esempio
Si consideri il seguente comando.
chmod 752 file.txt
Si può dedurre che:
7 (in binario 1112): per il proprietario saranno abilitati i permessi di scrittura (1), i permessi di lettura (1) e i permessi di esecuzione del file (1).
5 (in binario 1012): per il gruppo saranno abilitati i permessi di scrittura (1) e i permessi di esecuzione del file (1), ma non i permessi di lettura (0).
2 (in binario 0102): per gli altri saranno abilitati solamente i permessi di lettura (1).
3.2 - Comando chown
Il comando chown (dall’inglese change owner) modifica l’utente proprietario di un file o di una directory. La sintassi del comando è la seguente:
chown <utente> <file/directory>
dove:
<utente>: è il nome dell’utente che si vuole impostare come nuovo proprietario del file o della directory.
<file/directory>: il percorso al file o alla directory a cui si vuole cambiare il proprietario.
Opzionalmente, si può anche cambiare contemporaneamente sia l’utente proprietario che il gruppo di appartenenza del file o della directory:
chown <utente>:<gruppo> <file/directory>
3.3 - Comando chgrp
Il comando chgrp (dall’inglese change group) modifica il gruppo di appartenenza di un file o di una directory. La sintassi del comando è la seguente:
chgrp <gruppo> <file/directory>
dove:
<gruppo>: è il nome del gruppo che si vuole impostare come nuovo gruppo di appartenenza del file o della directory.
<file/directory>: il percorso al file o alla directory a cui si vuole cambiare il gruppo.
Fonti
🏫 Lezioni e slide del Prof. Schifanella Claudio del corso di Laboratorio di Sistemi Operativi (canale B, turno T4), Corso di Laurea in Informatica presso l’Università di Torino, A.A. 2024-25: