Gestione dei permessi su UNIX

· 4 min lettura
Gestione dei permessi su UNIX

Nei sistemi UNIX e UNIX-like, l'accesso ai file e alle cartelle è dettato dai permessi. Essi possono essere assegnati ad utenti specifici o a gruppi di utenti.

I permessi seguono due principi basilari:

  • Chi può assegnare i permessi per un file, è l'autore del file stesso.
  • I permessi sui file di sistema o altri file li concede l'utente Root.

Se si usa il comando ls senza alcun parametro, il risultato sarà un elenco di nomi ordinato alfabeticamente.

$ ls
bin cache dev home lib media opt root sbin srv tmp var boot data etc init lib64 mnt proc run snap sys usr $

Per visualizzare un elenco di file con i relativi permessi, si deve usare il parametro "-l" (lista):

$ ls -l
drwxr-xr-x  1 root root  4096 giu 22 22:18 bin
drwxr-xr-x  1 root root  4096 mar 30  2017 boot
drwxrwx---  1 root root  4096 gen  1  1970 cache
[...]
drwxrwxrwt  1 root root  4096 ott 23 17:45 tmp
drwxr-xr-x  1 root root  4096 mar 30  2017 usr
drwxr-xr-x  1 root root  4096 mar 30  2017 var
$

Come si può evincere dalla prima colonna dei risultati, ci saranno 10 caratteri che ci diranno molto sulla natura dei file/cartelle.
Per iniziare, tutte le cartelle vengono segnate con una d. Tutti i file hanno un segno - e tutti i collegamenti simbolici hanno un l.

Seguono i 9 caratteri dei permessi, separati a gruppi di tre, che rappresentano i permessi rispettivamente i permessi per l'utente creatore del file, per il gruppo di appartenenza dell'autore e per tutti gli altri utenti o gruppi.

  • -rwx------ file.sh - Permessi concessi solo all'autore del file
  • ----rwx--- file.sh - Permessi concessi solo al gruppo di appartenenza dell'autore del file
  • -------rwx file.sh - Permessi concessi a chiunque altro nel sistema

I caratteri dei permessi UNIX consentono, rispettivamente su un file o ad una cartella, di:

  • Read
    • Leggere il file
    • Elencare le sottocartelle di una cartella
  • Write
    • Modificare il contenuto di un file
    • Aggiungere o rimuovere file dalla cartella (citando Wikipedia, si noti che per cancellare un file si deve avere il permesso di scrittura sulla cartella, non sul file)
  • eXecution
    • Eseguire un file
    • Entrare in una cartella, ma non di vederne il contenuto
  • -
    • Permesso assente
Si noti che i collegamenti simbolici non hanno bisogno di permessi, in quanto ereditano i permessi del file/cartella originale

La rappresentazione ottale

I permessi UNIX possono essere anche espressi con una base 8, invece che con le lettere A, W e X.

I valori rispettivi dei permessi sono i seguenti:

Valore ottale Valore alfabetico Permesso
0 --- nessuno
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 ed esecuzione

Un altro modo per capire come sono rappresentati i permessi, è ricordare che a READ, WRITE e EXECUTE sono assegnati 3 numeri:

  • Read - 4
  • Write - 2
  • eXecute - 1

Se si volesse rappresentare un file con permessi di lettura e scrittura, basterebbe sommare 4 e 2, per ottenere 6, che è la rappresentazione nella tabella soprastante del permesso rw-.

Se si volesse rappresentare un file con permessi di lettura ed esecuzione, basterebbe sommare 4 ed 1, ottenendo così 5, che è la rappresentazione nella tabella soprastante del permesso r-x.

Per cambiare o rimuovere permessi

I comandi che permettono di gestire i permessi su file e cartelle sono i seguenti:

  • chmod - Cambiare i permessi ad un file o ad una cartella
  • chown - Cambiare il proprietario di un file o di una cartella
  • chgrp - Cambiare il gruppo di appartenenza di un file o di una cartella.
    Cambiare un gruppo di appartenenza non influisce sul proprietario del file/cartella!

Le sintassi dei comandi sono varie, non entrerò nello specifico di tutte le sintassi.

Qui di seguito, una situazione iniziale di files. Tutti e tre sono stati creati con permessi di lettura e scrittura da parte del proprietario, mentre per il gruppo e per tutti gli altri, solo i permessi di lettura.

$ ls -l
-rw-r--r-- 1 root root 0 ott 23 20:44 file1
-rw-r--r-- 1 root root 0 ott 23 20:44 file2
-rw-r--r-- 1 root root 0 ott 23 20:44 file3

Per aggiungere un permesso (in questo caso, di esecuzione) ad un file/cartella si usa la sintassi:

$ chmod +x file1
$ ls -l
-rwxr-xr-x 1 root root 0 ott 23 20:44 file1
-rw-r--r-- 1 root root 0 ott 23 20:44 file2
-rw-r--r-- 1 root root 0 ott 23 20:44 file3

Da notare che il semplice +x aggiunge il permesso a tutti i criteri di appartenenza.

Se si volesse aggiungere solo al criterio "gruppo" il permesso di esecuzione, si dovrebbe usare la sintassi:

$ chmod g=+x file1
$ ls -l
-rw-r-xr-- 1 root root 0 ott 23 20:44 file1
-rw-r--r-- 1 root root 0 ott 23 20:44 file2
-rw-r--r-- 1 root root 0 ott 23 20:44 file3

Dove il parametro g= sta a significare "solo per i gruppi".
Allo stesso modo si possono usare i parametri per le appartenenze:

  • a= - per tutti (proprietario, gruppi ed altri)
  • u= - per l'utente proprietario
  • g= - per il gruppo di appartenenza
  • o= - per tutti gli altri

Allo stesso modo, per rimuovere un permesso da un file/cartella, si cambia il simbolo del comando da "-" a "+".

$ ls -l
-rwxrwxrwx 1 root root 0 ott 23 20:44 file1
-rw-r--r-- 1 root root 0 ott 23 20:44 file2
-rw-r--r-- 1 root root 0 ott 23 20:44 file3
$ chmod -x file1
$ ls -l
-rw-rw-rw- 1 root root 0 ott 23 20:44 file1
-rw-r--r-- 1 root root 0 ott 23 20:44 file2
-rw-r--r-- 1 root root 0 ott 23 20:44 file3