Command Line - File System - Linux

Permessi dei file in Linux

La gestione dei permessi dei file in Linux è uno degli aspetti fondamentali della sicurezza e dell’amministrazione del sistema. Comprendere come funzionano i permessi consente di proteggere dati sensibili, garantire la corretta esecuzione delle applicazioni e prevenire accessi non autorizzati.

Verificare i permessi

Il modo più semplice per vedere i permessi di un file è l’utilizzo del comando

ls -l

drwxr-xr-x 2 user group    6 Feb 14 test
-rwxr-xr-- 1 user group 4096 Feb 14 file.txt

che visualizza nella prima parte della riga i permessi con questa struttura [Tipo][User][Group][Others]. Nell’esempio vediamo una cartella ed un file, analizziamo i permessi

Nel caso del file

  • : File standard (può essere d in caso di directory o l nel caso di link simbolico)
  • rwx : proprietario con permessi di lettura, scrittura, esecuzione
  • r-x : gruppo con permessi di lettura ed esecuzione
  • r– : altri con permessi di sola lettura

Nel caso di directory

  • r : consente di visualizzare il contenuto
  • w : consente di creare o eliminare file
  • x : consente di attraversare la directory (cd)

Possiamo quindi riassumere dicendo che ogni file e directory in Linux è associato a tre categorie di utenti

  • Proprietario (User)
  • Gruppo (Group)
  • Altri utenti (Others)

e per ciascuna categoria possono essere assegnati tre tipi di permessi

SimboloSignificatoPer i filePer le directory
rRead (lettura)Visualizzare il contenutoElencare i file nella directory
wWrite (scrittura)Modificare il fileCreare/eliminare file
xExecute (esecuzione)Eseguire il fileEntrare nella directory (cd)

La modalità numerica (ottale)

Linux utilizza una rappresentazione numerica dei permessi basata su valori

PermessoValore
r4
w2
x1

dove la somma determina il valore finale

PermessoValore
7rwx (4+2+1)
6rw- (4+2+0)
5r-x (4+1+0)
4r– (4+0+0)
3-wx (0+2+1)
2-w- (0+2+0)
1–x (0+0+1)
0— (0+0+0)

un esempio pratico per assegnare i permessi è

chmod 755 file.txt

dove Proprietario: 7 → rwx, Gruppo: 5 → r-x, Altri: 5 → r-x

Utilizzando l’opzione -R (ricorsivo) nel comando applicheremo i permessi a tutti i file e le directory all’interno del percorso specificato

# Esempio struttura directory
file.txt
cartella/
├─ script.sh
└─ data.txt

# Comando per modificare i permessi in modo ricorsivo
chmod -R 755 cartella

Tutte le directory e tutti i file dentro cartella avranno permessi rwxr-xr-x

La modalità simbolica

Oltre alla modalità numerica, è possibile modificare i permessi in modo più granulare

# Aggiunge il permesso di esecuzione all'utente (proprietario)
chmod u+x file.txt

# Rimuove il permesso di scrittura al gruppo
chmod g-w file.txt

# Imposta per “others” solo il permesso di lettura, rimuovendo qualsiasi altro permesso precedente
chmod o=r file.txt

# Aggiunge il permesso di esecuzione a tutti
chmod a+x file.txt

dove

  • u = user
  • g = group
  • o = others
  • a = all

Questa modalità è utile per modifiche rapide senza dover ricalcolare il valore numerico complessivo

Proprietà dei File: chown e chgrp

Nel sistema Linux, ogni file e directory è associato a un proprietario (utente) e a un gruppo, elementi fondamentali per il corretto funzionamento del modello di sicurezza basato sui permessi.

Il comando chown (change owner) consente di modificare il proprietario di un file e, opzionalmente, anche il gruppo associato. È uno strumento cruciale quando si configurano applicazioni web, servizi di sistema o ambienti multiutente. Ad esempio, assegnare la proprietà di una directory applicativa all’utente che esegue il servizio, permette di evitare errori di accesso e riduce il rischio di configurazioni insicure come permessi eccessivamente permissivi (ad esempio 777).

Il comando chgrp (change group), invece, modifica esclusivamente il gruppo associato a file e directory. È particolarmente utile nei contesti collaborativi, dove più utenti appartengono allo stesso gruppo di lavoro e devono poter accedere alle stesse risorse.

Vediamo qualche esempio di utilizzo

ComandoCosa faRisultato
chown carlo file.txtCambia il proprietario di un fileProprietario del file diventa “carlo” mentre il gruppo resta invariato
chown carlo:staff file.txtCambia proprietario e gruppoIl proprietario del file diventa “carlo” ed il gruppo “staff”
chown :staff file.txtCambia solo il gruppoIl proprietario rimane invariato mentre il gruppo diventa “staff”
chown -R carlo:staff /srv/progettoApplica ricorsivamente proprietà a directory e fileTutti i file e sottodirectory diventano con proprietario “carlo” e gruppo “staff”
chgrp staff file.txtCambia solo il gruppoIl gruppo del file diventa “staff” mentre il proprietario resta invariato
chgrp -R staff /srv/progettoCambia gruppo ricorsivamente su directoryTutti i file e directory sotto /srv/progetto avranno come gruppo “staff”

Un esempio pratico

Supponiamo di avere un server web con Nginx che non riesce a leggere i file del sito e restituisce l’errore “403 Forbidden”. Nel nostro esempio abbiamo

  • Web server in esecuzione come utente: nginx
  • Directory del sito: /var/www/miosito
  • Proprietario attuale: root
  • Permessi errati: 700

Iniziamo a verificare i permessi

ls -ld /var/www/miosito

drwx------ 2 root root 4096 Feb 14 /var/www/miosito

In questa situazione, il problema è che il web server non ha accesso ai file. Vediamo come poter correggere

# Modifica il proprietario
chown -R nginx:nginx /var/www/miosito

# Modifica i permessi di accesso
chmod -R 750 /var/www/miosito

queste modifiche permetteranno al sito di funzionare correttamente.