Comprendiamo la gestione dei permessi su Linux

Linux offre una gestione chiara e gerarchica di permessi di accesso a file e cartelle ed è quindi importante comprenderli per saperli gestire al meglio.

In questa guida cercheremo di spiegare cosa sono i permessi, come funzionano e come poterli gestire.


Che cosa sono i permessi?

Linux è un sistema multiutente e, proprio per questo, deve offrire a ogni utente la possibilità di gestire l’accesso ai propri file e proteggerli da accessi non autorizzati.
Questa logica viene utilizzata sia per garantire l’integrità dei file necessari al funzionamento del sistema operativo sia per garantire la privacy dei diversi utenti.

Tutto questo si basa su due concetti principali: le classi di permessi e i tipi di permesso.


Classi di permessi

Un sistema operativo e un archivio sono generalmente composti da migliaia di file, in sistemi così complessi diventerebbe impossibile gestire i permessi in maniera puntuale, per questo ci viene data la possibilità di gestire delle classi e, per ogni classe, un diverso livello di accesso.

Quando creiamo un file dobbiamo sempre assegnare un proprietario e un gruppo di appartenenza, ma la gestione dei permessi non si ferma qui. Vediamo nel dettaglio quali sono le classi messe a disposizione dal sistema prima di comprendere quali sono i livelli dei permessi assegnabili a ogni classe.

Se la spiegazione non dovesse essere chiara, date una lettura veloce e spostatevi all’esempio pratico.

Proprietario

Una di queste classi è il proprietario del file o della cartella. Questo permesso è puntuale, definisce il tipo di accesso disponibile per uno specifico utente e garantisce se opportunamente configurato garantisce che il file sia accessibile solamente all’utente designato.

Gruppo

In certi casi l’utilizzo di permessi puntuali complicherebbe troppo la gestione e la manutenzione dei permessi per il singolo file, per questo possiamo assegnare un gruppo di appartenenza sia allì’utente che a un file.

Quando andremo ad assegnare a un file un certo livello di accesso per un gruppo specifico, in automatico tutti gli utenti assegnati a quel gruppo otterranno accesso a quel file come definito per il gruppo di appartenenza.

Altri

Questa classe ci viene in aiuto quando vogliamo assegnare un permesso generico.


Livelli di permessi

Una volta comprese le classi di permessi, vediamo quali sono i livelli di accesso che possiamo assegnare a ogni classe.

Lettura

Il come ci suggerisce il nome potremmo assegnare l’accesso al file o alla cartella in lettura, potremmo così sbirciare il contenuto della stessa, ma non potremo modificarlo o eseguirlo nel caso in cui si tratti di un applicativo o di uno script.

Scrittura

Quando assegneremo un permesso di scrittura gli utenti designati potranno modificare il contenuto del file e potranno cancellarlo.

Esecuzione

Il permesso di esecuzione ci dà la possibilità di eseguire un file. Questo livello di autorizzazione nasce dalla necessità di consapevolizzare gli utenti che eseguendo un file si potrebbero compiere azioni potenzialmente dannose per il sistema.


Esempi

Se non si ha pregresse esperienze potrebbe risultare difficile comprendere l’utilizzo di quanto appena spiegato. Vediamo dunque alcuni esempi.


Esempio pratico

Facciamo un parallelo con la realtà che ci circonda. Pensiamo al nostro sistema come a una casa.

All’interno della casa ci saranno delle aree (cartelle) e degli oggetti (file). In base alle scelte dettate dagli amministratori (Admin) tali aree e oggetti saranno visibili (leggibili), modificabili (scrivibili) o utilizzabili (eseguibili) da utenti diversi per garantire la sicurezza sistema.

Possiamo quindi mappare logicamente questo ambiente e ricondurlo alla logica offerta dal nostro Kernel Linux.

Avremmo quindi i Genitori appartenenti al gruppo Admin del sistema oltre che componenti del gruppo Family. I Figli invece apparterranno solamente al gruppo Family. I permessi per eventuali gli Ospiti sono impostati senza sapere chi saranno esattamente questi ospiti.

Immaginiamo di suddividere le aree e gli oggetti (.obj) della casa come fossero cartelle e file, assegnando proprietari (Owner) e gruppi (Group) di appartenenza:

FolderOwnerGroup
/Home/BedroomsGenitore1Family
/Home/Bedrooms/ParentsGenitore1Admin
/Home/Bedrooms/SonsGenitore1Family
/Home/Garage/Genitore1Family
/Home/Garage/car.objGenitore1Admin
/Home/Kitchen/Genitore1Family
/Home/Kitchen/fridge.objGenitore1Family
/Home/Living/Genitore1Family
/Home/Living/television.objGenitore1Family
/Home/BathroomGenitore1Family
/Home/Bathroom/washbasin.objGenitore1Family

Adesso assegnami i livelli permessi a ogni Area e Oggetto. Per semplicità mapperemo i permessi con i seguenti acronimi:

  • r = visibili (leggibili)
  • w = modificabili (scrivibili)
  • x = utilizzabili (eseguibili)
FolderOwnerGroupOthers
/Home/Bedroomsrw-rw-
/Home/Bedrooms/Parentsrw-rw-
(teoricamente :D)
/Home/Bedrooms/Sonsrw-rw-
/Home/Garage/rw-rw-r–
/Home/Garage/car.objrwxrwxr–
/Home/Kitchen/rw-r–r–
/Home/Kitchen/fridge.objrwxr-xr–
/Home/Living/rw-r–r–
/Home/Living/television.objrwxr–xr–x
/Home/Bathroomrw-r–r–
/Home/Bathroom/washbasin.objrwxr-xr-x

Nonostante alcuni limiti (come per esempio il non poter assegnare due proprietari a un’area o a un oggetto) questo sistema risulta essere chiaro e semplice da gestire.

Se dovesse essere introdotto un nuovo figlio dovremmo solo assegnare l’appartenenza al gruppo Family per assegnargli correttamente tutti i permessi già assegnati ai fratelli. Lo stesso vale per un nuovo ospite non previsto.


Impostazione generica dei permessi

Generalmente quando andiamo a installare una distribuzione Linux, durante il processo di installazione vengono creati almeno due utenti e i relativi gruppi.

Un utente root e un omonimo gruppo (root) alla quale vengono assegnati i vari file di sistema.

Ipotizziamo un utente teodoro come utilizzatore del sistema, questo utente sarà assegnato al gruppo teodoro insieme ad altri gruppi come potrebbe per esempio essere un gruppo generico users.


Impostazione dei permessi di Apache

Generalmente, installando un Web Server Apache, viene creato un utente e un gruppo specifico in maniera da circoscrivere eventuali azioni dannose eseguite da un malintenzionato tramite il servizio.

La configurazione standard di questo servizio prevede che sia eseguito da un utente www-data appartenente al gruppo www-data.

Sempre in fase di installazione viene creata una cartella /var/www di proprietà dell’utente www-data e assegnata al gruppo www-data.

FolderOwnerGroup
/var/wwwwww-datawww-data

I permessi per questa cartella sono in genere assegnati nel seguente modo:

FolderOwnerGroupOthers
/var/wwwrwxr-xr-x

Dove:

  • r = lettura
  • w = scrittura
  • x = esecuzione

Se volessi permettere anche al mio utente personale la possibilità di accedere e modificare il contenuto della cartella /var/www senza dover elevare i miei permessi, potrei assegnare il gruppo www-data anche al mio utente con il comando usermod:

usermod -a -G www-data teodoro

Consiglio di leggere la guida al comando (usermod –help) o il paragrafo dedicato all’interno dell’articolo dedicato alla gestione dei permessi prima di utilizzarlo per evitare di arrecare danni irrimediabili al vostro sistema.


Argomenti correlati

Se siete sopravvissuti a questa parte teorica possiamo vedere come mettere in pratica le conoscenze acquisite e quali comandi ci torneranno utili.