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:

dove:

  • : indica il tipo di file e può assumere uno dei seguenti valori:
    • -: file normale.
    • d: directory.
    • l: link simbolico.
  • : permessi per il proprietario (detto owner).
  • : permessi per il gruppo (detto group).
  • : permessi per gli altri (detti others).

In particolare, in ogni tripla di caratteri 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:

dove:

  • : permesso di lettura (1 se abilitato, 0 altrimenti).
  • : permesso di scrittura (1 se abilitato, 0 altrimenti).
  • : permesso di esecuzione (1 se abilitato, 0 altrimenti). Questa combinazione di tre bit viene convertita in decimale (ecco perché può assumere valori da a ) 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 ): per il proprietario saranno abilitati i permessi di scrittura (), i permessi di lettura () e i permessi di esecuzione del file ().
  • 5 (in binario ): per il gruppo saranno abilitati i permessi di scrittura () e i permessi di esecuzione del file (), ma non i permessi di lettura ().
  • 2 (in binario ): per gli altri saranno abilitati solamente i permessi di lettura ().

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: