Permessi (informatica)

I permessi, in informatica, indicano le autorizzazioni per l'accesso a file e directory del file system del sistema da parte dei vari utenti in un sistema operativo multiutente.

I sistemi di tipo Unix e Unix-like, essendo stati tra i primi sistemi multiutente, possiedono un proprio meccanismo tradizionale di permessi memorizzati nel file system, tipicamente assegnato/modificato da un amministratore di sistema.

Permessi tradizionali Unix

Nei sistemi Unix e Unix-like vi sono dei permessi di base o attributi per file e directory che sono applicabili a tre classi distinte, dette utente (o proprietario), gruppo e altri. Vi sono poi ulteriori permessi che si applicano globalmente al file o alla directory.

Questi permessi sono associati all'inode che rappresenta i dati del file o della directory, e non al nome del file, per cui due o più collegamenti fisici allo stesso inode avranno necessariamente gli stessi permessi, anche se collocati in directory diverse.

Classi

Gli utenti di ciascun file directory appartengono a tre classi utente: esse sono dette proprietario, gruppo di appartenenza e altri. Pertanto, ad ogni file o cartella è possibile associare i diversi permessi di base (scrittura, lettura, esecuzione) relativamente a ciascuna di queste tre classi di utenti:

I permessi ulteriori sono applicati indipendentemente dalla classe.

Con il comando ls -l <percorso/nome_file> riepilogando ad esempio si possono ottenere le seguenti informazioni sui permessi:

Permessi di base

I permessi di base, che si applicano ai file e cartelle nell'ambito delle tre classi utente sopra elencate, sono:

Altri permessi

Oltre ai permessi di base i sistemi Unix hanno altri tre permessi che si applicano globalmente al file o directory, in maniera indipendente dalla classe:

Permessi dei collegamenti simbolici

I collegamenti simbolici non hanno mai permessi propri, essendo solo riferimenti per nome ad un altro file, e a tutti gli effetti si può considerare che abbiano i permessi del file o della directory a cui si riferiscono.

È al limite possibile, in alcuni sistemi, dare opzioni per il cambiamento ricorsivo dei permessi seguendo anche i collegamenti simbolici.

Rappresentazione dei permessi

Esistono due rappresentazioni dei permessi sopra descritti: una simbolica ed una ottale.

Rappresentazione simbolica

Si tratta della rappresentazione usata dal comando ls -l, e consiste in una serie di 10 caratteri.

Il primo carattere indica il tipo di file o directory elencata, e non rappresenta propriamente un permesso:

Ad esso seguono tre serie di tre caratteri ciascuna. Ogni serie rappresenta una classe di permessi, rispettivamente per il proprietario, per il gruppo e per gli altri:

Gli altri permessi sono rappresentati con delle varianti all'interno delle tre classi, sebbene essi non siano applicabili per classe:

Esempi

  • drwxr-xr-x indica una directory leggibile, scrivibile e attraversabile dal proprietario, leggibile e attraversabile per il gruppo e per gli altri.
  • drwx------ indica una directory leggibile, scrivibile e attraversabile dal proprietario, ma inaccessibile per tutti gli altri.
  • drwxrwxrwt indica una directory leggibile, scrivibile e attraversabile da tutti e con il permesso sticky.
  • -rw------- indica un file leggibile e scrivibile solo dal proprietario
  • -rw-r--r-- indica un file leggibile da tutti, ma scrivibile solo dal proprietario
  • -------r-- indica un file leggibile da tutti eccetto il proprietario e gli utenti appartenenti al gruppo di utenti assegnato al file.
  • -r-sr-xr-x indica un file eseguibile leggibile ed eseguibile da tutti con anche il permesso speciale set user ID.
  • -r-Sr--r-- indica un file leggibile da tutti con anche il permesso speciale set user ID ma senza il permesso di esecuzione.
  • drwxrws--- indica una directory leggibile, scrivibile e attraversabile dal proprietario e dal gruppo di utenti assegnato alla directory, con anche il permesso speciale set group ID.

Rappresentazione ottale

La rappresentazione ottale dei permessi consiste in un numero di quattro cifre in base otto (da 0 a 7). Tutte le cifre eccetto l'ultima possono essere omesse, e si considerano pari a zero. Ad esempio "750" equivale a "0750", mentre "5" equivale a "0005".

L'ultima cifra rappresenta la classe di permessi per gli altri, la penultima cifra la classe di permessi per il gruppo, la terzultima cifra rappresenta la classe di permessi per il proprietario, e la quartultima cifra rappresenta gli altri permessi. Solitamente si specificano numeri di tre o quattro cifre.

Ai permessi di lettura, scrittura ed esecuzione sono assegnati dei numeri:

e la somma dei permessi abilitati denota la cifra da usare per la particolare classe di permessi (ultima, penultima e terzultima cifra), ovvero:

CifrasimboliPermessi
0---nessun permesso
1--xesecuzione
2-w-scrittura
3-wxscrittura ed esecuzione
4r--lettura
5r-xlettura ed esecuzione
6rw-lettura e scrittura
7rwxlettura, scrittura, esecuzione

Anche agli altri permessi viene assegnato un numero:

e anche qui la somma dei permessi abilitati denota la quartultima cifra.

CifraRappresentazione simbolicaPermessi
0nessun ulteriore permesso
1--------tsticky
2-----s---set group ID
3-----s--tsticky e set group ID
4--s------set user ID
5--s-----tset user ID e sticky
6--s--s---set user ID e set group ID
7--s--s--tset user ID, set group ID e sticky

Da notare che i numeri derivano dalla notazione binaria, in cui ad ogni permesso corrisponde un singolo bit (per un totale di 12 bit), che è impostato a 1 se il permesso è concesso oppure a 0 se è negato.

Altri permessi Permessi
proprietario gruppo altri
set user IDset group IDstickyletturascritturaesecuzioneletturascritturaesecuzioneletturascritturaesecuzione
Bit 12 11 10 9 8 7 6 5 4 3 2 1
Cifre ottali N Permessi N Permessi N Permessi N Permessi
0 nessun permesso 0 nessun permesso 0 nessun permesso 0 nessun permesso
1 sticky 1 esecuzione 1 esecuzione 1 esecuzione
2 set group ID 2 scrittura 2 scrittura 2 scrittura
3 set group ID e sticky 3 scrittura ed esecuzione 3 scrittura ed esecuzione 3 scrittura ed esecuzione
4 set user ID 4 lettura 4 lettura 4 lettura
5 set user ID e sticky 5 lettura ed esecuzione 5 lettura ed esecuzione 5 lettura ed esecuzione
6 set user ID e set group ID 6 lettura e scrittura 6 lettura e scrittura 6 lettura e scrittura
7 set user ID, set group ID e sticky 7 lettura, scrittura, esecuzione 7 lettura, scrittura, esecuzione 7 lettura, scrittura, esecuzione

Ad esempio un permesso 755 (in binario 000111101101) imposta lettura, scrittura ed esecuzione (7) per il proprietario (prima cifra), e lettura ed esecuzione (i due 5) per gruppo (seconda cifra) ed altri (terza cifra).

In certa documentazione è possibile siano specificate cinque cifre, la prima delle quali è però sempre zero, secondo la convenzione del linguaggio C per cui un numero ottale va indicato precedendolo da uno zero.

Esempi

  • 750 (equivalente a 0750) – Indica lettura, scrittura ed esecuzione per il proprietario (4 + 2 + 1 = 7), lettura ed esecuzione per il gruppo (4 + 1 = 5), nessun permesso per gli altri, nessun ulteriore permesso.
  • 50 (equivalente a 0050) – Indica nessun permesso per il proprietario, lettura ed esecuzione per il gruppo (4 + 1 = 5), nessun permesso per gli altri, nessun ulteriore permesso.
  • 5750 – Indica il permesso set user ID ed il permesso sticky (4 + 1 = 5), lettura, scrittura ed esecuzione per il proprietario, lettura ed esecuzione per il gruppo, nessun permesso per gli altri.

Permessi per file system non Unix

Con l'andare del tempo i vari sistemi Unix e Unix-like hanno gradualmente acquisito la possibilità di accedere a file system che non hanno un supporto nativo per lo schema di permessi sopra descritto.

In alcuni casi è stato possibile progettare delle estensioni al file system in modo da poter offrire anche questo tipo di supporto in maniera trasparente, come ad esempio nel caso delle estensioni Rock Ridge per il file system ISO 9660.

In molti altri casi, come ad esempio per i file system di tipo FAT e NTFS, si è ricorso ad una assegnazione di permessi, proprietario e gruppo secondo delle regole generalizzate che valgono per tutti i file e directory contenute, e che non sono memorizzate nel file system stesso. In casi come questi non è tipicamente possibile modificare individualmente i permessi di singoli file e directory.

Note

  1. ↑ (EN) Solaris 10 chmod(2) man page[collegamento interrotto]

Bibliografia

Voci correlate

  Portale Sicurezza informatica: accedi alle voci di Wikipedia che trattano di sicurezza informatica