Permessi (Unix)

Da Wikipedia, l'enciclopedia libera.

Nei sistemi operativi multiutente il meccanismo dei permessi gestisce l'accesso a file e directory del file system del sistema da parte dei vari utenti. I sistemi operativi 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[modifica | modifica sorgente]

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[modifica | modifica sorgente]

A ciascun file e directory in un file system Unix viene assegnato un utente che ne è il proprietario (solitamente il suo creatore). Per tale utente si applica la classe di permessi detta utente.

A ciascun file e directory viene inoltre assegnato esattamente un gruppo di appartenenza (solitamente il gruppo principale del suo creatore). Agli utenti che non sono proprietari del file, ma che sono membri del gruppo di appartenenza del file si applica la classe di permessi detta gruppo. A tal proposito si ricorda che mentre un file appartiene esattamente ad un gruppo di utenti, un utente del sistema può essere membro di uno o più gruppi (di cui uno è detto principale mentre gli altri sono detti supplementari).

Per tutti gli altri utenti che non ricadono nei due casi sopra elencati si applica invece la classe di permessi detta altri. Gli ulteriori permessi sono applicati indipendentemente dalla classe.

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

  • drwxrwxrwx - Segnala che il file è una directory (il tipo di file viene indicato prima delle classi);
  • -rwxrwxrwx - Gli attributi marcati in nero si riferiscono all'utente proprietario del file;
  • -rwxrwxrwx - Gli attributi marcati in nero si riferiscono al gruppo di cui l'utente fa parte (se non è il proprietario del file, ma fa parte del gruppo di utenti assegnato al file);
  • -rwxrwxrwx - Gli attributi marcati in nero si riferiscono a tutti gli altri utenti o gruppi che non sono quelli assegnati al file.

Permessi di base[modifica | modifica sorgente]

I permessi di base, che si applicano nell'ambito delle tre classi sopra elencate, sono:

  • lettura (r) – applicato ai file permette di leggerne il contenuto; applicato alle directory consente di elencare i nomi dei file e delle sottodirectory che contengono;
  • scrittura (w) – applicato ai file permette di modificarne il contenuto; applicato alle directory permette di aggiungere o rimuovere in esse dei file e altre sottodirectory; da notare quindi che non sono i permessi su un file a determinare se esso può essere cancellato, ma sono i permessi sulla directory che lo contiene a farlo;
  • esecuzione (x) – applicato ai file permette di eseguirli; applicato alle directory permette di attraversarle per accedere ai file ed alle sottodirectory in esse contenute (ma non di elencarne il contenuto, per il quale serve anche il permesso di lettura).

Altri permessi[modifica | modifica sorgente]

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:

  • set user ID, detto anche setuid o suid: quando è applicato ad un file che ha il permesso di esecuzione (un file eseguibile), indica che esso va eseguito con i privilegi dell'utente proprietario del file anziché con quelli dell'utente che lo avvia; viene comunemente usato per consentire ad utenti ordinari di eseguire programmi che richiedono particolari privilegi di sistema di cui normalmente dispone solo l'amministratore. Viene rappresentato con s o S, vedi rappresentazione simbolica per maggiori informazioni;
  • set group ID, detto anche setgid: quando è applicato ad un file che ha il permesso di esecuzione (un file eseguibile), indica che esso va eseguito con i permessi del gruppo assegnato al file anziché quelli del gruppo principale dell'utente che lo avvia. Applicato alle directory indica che i nuovi file e sottodirectory creati al loro interno avranno come gruppo assegnato quello della directory che li contiene anziché quello principale dell'utente che crea il file o la directory. Viene rappresentato con s o S, vedi rappresentazione simbolica per maggiori informazioni;
  • sticky: un tempo, quando applicato ai file eseguibili, suggeriva al kernel di mantenere nel file di swap una copia del file eseguibile anche dopo che era terminato, in modo da sveltirne gli avvii successivi. Oggi tale suggerimento viene generalmente ignorato. Quando è applicato ad una directory indica invece che i file in essa contenuti possono essere cancellati e spostati solamente dagli utenti che ne sono proprietari, o dall'utente proprietario della directory che li contiene, o ancora dal superuser (root); è il caso ad esempio delle directory /tmp e /var/tmp, dove tutti gli utenti debbono poter creare e modificare dei file, ma nessuno eccetto il superuser deve poter rimuovere o spostare file temporanei di altri utenti. Viene rappresentato con t o T, vedi rappresentazione simbolica per maggiori informazioni;

Permessi dei collegamenti simbolici[modifica | modifica sorgente]

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[modifica | modifica sorgente]

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

Rappresentazione simbolica[modifica | modifica sorgente]

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:

  • r – lettura
  • w – scrittura
  • x – esecuzione (o attraversabilità per le directory)
  • - – indica l'assenza del permesso corrispondente

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

  • nella prima classe (quella che denota i permessi per il proprietario) il permesso di esecuzione può anche essere indicato come
    • s ( minuscolo ) quando sono presenti sia il permesso set user ID che quello di esecuzione
      • -rws------
    • S ( maiuscolo ) quando è presente solo il permesso set user ID
      • -rwS------
  • nella seconda classe (quella che denota i permessi per il gruppo) il permesso di esecuzione può anche essere indicato come
    • s ( minuscolo ) quando sono presenti sia il permesso set group ID che quello di esecuzione
      • ----rws---
    • S ( maiuscolo ) quando è presente solo il permesso set group ID
      • ----rwS---
  • nella terza classe (quella che denota i permessi per gli altri) il permesso di esecuzione può anche essere indicato come
    • t ( minuscolo ) quando sono presenti sia il permesso sticky che quello di esecuzione
      • --------t
    • T ( maiuscolo ) quando è presente solo il permesso sticky
      • --------T

Esempi[modifica | modifica sorgente]

  • 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[modifica | modifica sorgente]

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:

  • 4 – lettura
  • 2 – scrittura
  • 1 – esecuzione

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

Cifra Rappresentazione simbolica Permessi
0 --- nessun permesso
1 --x esecuzione
2 -w- scrittura
3 -wx scrittura ed esecuzione
4 r-- lettura
5 r-x lettura ed esecuzione
6 rw- lettura e scrittura
7 rwx lettura, scrittura, esecuzione

Anche agli altri permessi viene assegnato un numero:

  • 4set user ID
  • 2set group ID
  • 1sticky

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

Cifra Rappresentazione simbolica Permessi
0 nessun ulteriore permesso
1 --------t sticky
2 -----s--- set group ID
3 -----s--t sticky e set group ID
4 --s------ set user ID
5 --s-----t set user ID e sticky
6 --s--s--- set user ID e set group ID
7 --s--s--t set 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 ID set group ID sticky lettura scrittura esecuzione lettura scrittura esecuzione lettura scrittura esecuzione
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[1] è 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[modifica | modifica sorgente]

  • 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[modifica | modifica sorgente]

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[modifica | modifica sorgente]

  1. ^ (EN) Solaris 10 chmod(2) man page

Bibliografia[modifica | modifica sorgente]

  • W. Richard Stevens, Advanced Programming in the UNIX Environment, Addison Wesley, 1992, pp. 78-81, ISBN 0-201-56317-7.

Voci correlate[modifica | modifica sorgente]

  • ls (Unix) – Elenca il contenuto di directory con i relativi permessi.
  • chmod – Modifica i permessi di file e/o directory.
  • umask – Suggerisce permessi da negare.
  • chown - Cambia proprietario di un file.
  • chgrp – Cambia il gruppo assegnato a file e directory.
sicurezza informatica Portale Sicurezza informatica: accedi alle voci di Wikipedia che trattano di sicurezza informatica