Permessi Linux spiegati semplice: utenti, gruppi, chmod e sudo
Guarda il video sui permessi Linux: cosa sono utenti, gruppi, owner, group, others, read, write, execute, chmod, chown, sudo e perché evitare chmod 777.
Quando si inizia a usare Linux, prima o poi arriva un messaggio che può sembrare poco amichevole:
Permission denied
Stai provando ad aprire un file, modificarlo, eseguire uno script o entrare in una cartella, ma Linux ti blocca. A quel punto la domanda è inevitabile: perché non posso farlo?
La risposta sta in uno dei concetti più importanti di Linux: i permessi.
Nel video precedente della serie Capire Linux abbiamo parlato del filesystem: abbiamo visto dove stanno i file, cosa rappresentano directory come /home, /etc, /usr, /var, /dev, /proc, e perché in Linux si dice spesso che “tutto è un file”.
Ma sapere dove si trova un file non basta.
Bisogna anche capire chi può usarlo e in che modo.
Un file può essere leggibile, modificabile o eseguibile. Una directory può essere consultata, modificata o attraversata. Un utente può avere pieni diritti su un file, mentre un altro può non poterlo nemmeno leggere.
Questo articolo spiega i permessi Linux in modo semplice, senza partire subito da comandi complicati.
L’obiettivo è costruire una mappa mentale chiara: utenti, gruppi, root, sudo, owner, group, others, read, write, execute, chmod, chown e perché bisogna evitare permessi troppo aperti come 777.
Perché i permessi sono così importanti in Linux
Linux è un sistema operativo pensato per essere usato da più utenti, più programmi e più servizi contemporaneamente.
Questo vale soprattutto sui server, ma anche su un normale computer personale.
In un sistema Linux possono esistere:
- utenti reali, cioè le persone che usano il computer;
- utenti di sistema, usati da servizi e applicazioni;
- gruppi di utenti con permessi condivisi;
- processi che devono accedere solo ad alcune risorse;
- file personali, file di configurazione, programmi e dati di sistema.
Senza permessi, ogni utente o programma potrebbe fare qualsiasi cosa.
Potrebbe leggere file privati, modificare configurazioni importanti, cancellare file di sistema o eseguire script pericolosi.
I permessi servono proprio a creare confini.
Sono una specie di sistema di chiavi, serrature e badge. Non basta sapere dove si trova una stanza: bisogna sapere se hai il diritto di entrare, leggere i documenti, modificarli o eseguire qualcosa.
Questa logica è uno dei motivi per cui Linux è considerato un sistema robusto e adatto ad ambienti multiutente, server, cloud, sviluppo software e cybersecurity.
Linux è un sistema multiutente
Per capire i permessi Linux bisogna partire da un concetto fondamentale: Linux è multiutente.
Questo significa che il sistema non è pensato intorno a un unico utente che può fare tutto.
Può esistere un utente per l’amministratore, uno per una persona che lavora sul sistema, uno per un servizio web, uno per un database, uno per un’applicazione specifica.
Questa separazione serve a limitare i danni.
Se un servizio viene compromesso, ma quel servizio ha pochi permessi, l’attaccante non potrà automaticamente modificare tutto il sistema. Se un utente sbaglia comando, il danno può restare limitato ai suoi file personali. Se un’applicazione deve solo leggere un file, non ha bisogno anche del permesso di modificarlo.
Questa è la base del principio del minimo privilegio: ogni utente, programma o servizio dovrebbe avere solo i permessi necessari per fare il proprio lavoro, non di più.
Utente normale e root
In Linux esiste una differenza molto importante tra utente normale e root.
L’utente normale è quello con cui si lavora tutti i giorni. Può creare documenti, modificare file nella propria home, usare programmi, scaricare file, lavorare con il terminale.
Root, invece, è l’amministratore del sistema.
L’utente root ha privilegi molto elevati. Può modificare configurazioni di sistema, installare software, cambiare proprietari e permessi, gestire servizi, intervenire su file importanti.
Proprio per questo root va usato con attenzione.
Lavorare sempre come root è pericoloso, perché un errore può avere conseguenze molto più gravi. Se sbagli comando come utente normale, spesso il danno resta circoscritto. Se sbagli comando come root, puoi compromettere l’intero sistema.
A cosa serve sudo
Per evitare di lavorare sempre come root, molte distribuzioni Linux usano sudo.
In modo semplice, sudo permette a un utente autorizzato di eseguire un comando con privilegi amministrativi temporanei.
Non diventi root per tutta la sessione. Chiedi privilegi elevati solo per quel comando specifico.
Questo è utile quando devi fare operazioni amministrative, per esempio modificare un file di configurazione in /etc, installare un pacchetto o gestire un servizio.
Ma sudo non dovrebbe essere usato come scorciatoia automatica.
Se un comando non funziona, non bisogna sempre aggiungere sudo davanti senza ragionare.
Prima conviene chiedersi:
- sto modificando qualcosa di sistema?
- è normale che servano privilegi amministrativi?
- sto lavorando nella mia home?
- il problema è davvero un permesso mancante?
- il file appartiene all’utente corretto?
Usare sudo senza capire il motivo può nascondere il problema reale.
Owner, group e others
Ogni file o directory in Linux ha tre riferimenti principali:
- owner
- group
- others
L’owner è il proprietario del file. Di solito è l’utente che lo ha creato, anche se il proprietario può essere cambiato.
Il group è il gruppo associato al file. Un gruppo serve a raccogliere più utenti sotto una stessa categoria.
Gli others sono tutti gli altri utenti: quelli che non sono il proprietario e non appartengono al gruppo associato al file.
Quindi, quando qualcuno prova ad accedere a un file, Linux valuta a quale categoria appartiene:
- è l’owner?
- fa parte del group?
- è un other?
In base a questa risposta applica permessi diversi.
Questo permette di avere un controllo molto preciso.
Un file può essere modificabile dal proprietario, leggibile dal gruppo e completamente chiuso agli altri. Oppure può essere leggibile da tutti, ma modificabile solo da root. Oppure può essere eseguibile solo da un gruppo specifico.
I tre permessi principali: read, write, execute
I permessi Linux principali sono tre:
r→ readw→ writex→ execute
r significa lettura.
w significa scrittura o modifica.
x significa esecuzione, ma sulle directory assume un significato particolare.
Questi permessi possono essere assegnati separatamente a owner, group e others.
Quindi non esiste solo “accesso sì” o “accesso no”. Esistono livelli diversi di accesso per soggetti diversi.
Cosa significa read su un file
Il permesso r su un file permette di leggerne il contenuto.
Se hai r su un file di testo, puoi aprirlo e leggerlo.
Se hai r su un file di configurazione, puoi consultarne il contenuto.
Se hai r su uno script, puoi vedere le istruzioni che contiene.
Ma leggere non significa modificare.
È come consultare un documento in archivio: puoi leggerlo, ma non è detto che tu possa cambiarlo.
Cosa significa write su un file
Il permesso w su un file permette di modificarne il contenuto.
Con w puoi salvare modifiche, sovrascrivere dati, aggiornare il file.
Questo permesso è più delicato della lettura, perché ti permette di cambiare le informazioni.
Per questo molti file di sistema possono essere leggibili da più utenti, ma modificabili solo da root o da utenti autorizzati.
Un esempio classico riguarda i file dentro /etc.
In /etc si trovano molte configurazioni di sistema. Può essere utile leggerle per capire come è configurato un servizio, ma non è normale che un utente qualsiasi possa modificarle liberamente.
Cosa significa execute su un file
Il permesso x su un file permette di eseguirlo come programma o script.
Questo è un concetto importante per chi arriva da altri sistemi operativi.
In Linux un file non diventa eseguibile solo perché ha una certa estensione.
Non basta che si chiami script.sh.
Non basta che contenga comandi validi.
Per poterlo avviare direttamente, deve avere il permesso di esecuzione.
Per esempio, uno script backup.sh può essere scritto correttamente, ma se non ha il permesso x, Linux può impedire l’esecuzione diretta.
Questo spiega perché spesso, quando si lavora con script, compare il comando chmod.
Come leggere una stringa di permessi Linux
Quando usi il comando:
ls -l
Linux può mostrare una riga che inizia così:
-rwxr-xr--
All’inizio sembra una sequenza difficile da leggere, ma in realtà è molto ordinata.
La stringa va divisa in blocchi.
Il primo carattere indica il tipo di elemento:
-indica un file normale;dindica una directory.
Dopo il primo carattere ci sono tre blocchi da tre caratteri:
rwx r-x r--
Il primo blocco riguarda l’owner. Il secondo blocco riguarda il group. Il terzo blocco riguarda gli others.
Quindi:
-rwxr-xr--
significa:
- file normale;
- owner: può leggere, scrivere ed eseguire;
- group: può leggere ed eseguire, ma non scrivere;
- others: possono solo leggere.
La regola è semplice: non bisogna leggere tutto insieme, ma a blocchi.
Permessi su file e permessi su directory
Uno degli aspetti che confonde di più chi inizia è questo: i permessi non hanno sempre lo stesso significato su file e directory.
Su un file:
rpermette di leggere il contenuto;wpermette di modificare il contenuto;xpermette di eseguire il file.
Su una directory:
rpermette di vedere l’elenco dei nomi contenuti nella directory;wpermette di creare, cancellare o rinominare elementi nella directory;xpermette di attraversare la directory, entrarci o usarla in un percorso.
Il punto più importante è proprio x.
Su un file x significa esecuzione.
Su una directory x significa attraversamento.
Immagina una directory come un corridoio.
Il permesso r ti permette di leggere l’elenco delle porte presenti nel corridoio.
Il permesso w ti permette di aggiungere o togliere porte.
Il permesso x ti permette di attraversare il corridoio.
Senza x, potresti anche conoscere il nome di un file, ma non riuscire ad accedervi attraverso quel percorso.
Esempio: file personale in /home
Immagina un file:
/home/mario/appunti.txt
Questo è un file personale dell’utente Mario.
È normale che Mario possa leggerlo e modificarlo. È altrettanto normale che altri utenti non possano modificarlo, e magari nemmeno leggerlo.
Nel video sul filesystem abbiamo visto che /home è la zona delle case degli utenti.
Ogni utente ha il proprio spazio personale. I permessi servono a rendere concreta questa separazione.
Non basta che i file siano messi in cartelle diverse: Linux deve anche sapere chi può accedervi.
Esempio: file di configurazione in /etc
Ora prendiamo un file dentro /etc.
La directory /etc contiene configurazioni di sistema.
Molti file possono essere leggibili dagli utenti o dai programmi, perché alcune informazioni devono essere consultate.
Ma non è normale che tutti possano modificarli.
Se qualsiasi utente potesse cambiare configurazioni di rete, servizi, autenticazione o impostazioni globali, il sistema diventerebbe fragile.
Per questo spesso puoi leggere alcuni file in /etc, ma per modificarli servono privilegi amministrativi, per esempio tramite sudo.
Qui si vede bene la differenza tra lettura e scrittura: consultare una configurazione è una cosa, cambiarla è un’altra.
Esempio: script eseguibile
Un altro esempio molto utile è lo script.
Supponiamo di avere un file:
backup.sh
Dentro ci sono comandi validi. Il file è scritto correttamente. Ma quando provi ad avviarlo direttamente, Linux potrebbe bloccarlo.
Il motivo può essere la mancanza del permesso x.
Il contenuto del file non basta: serve anche il permesso di esecuzione.
Qui entra in gioco chmod, che serve a cambiare i permessi.
Esempio: directory condivisa
Immagina una directory usata da più persone di un team.
Invece di aprire l’accesso a tutti, puoi usare un gruppo.
Tutti gli utenti del gruppo possono leggere e magari scrivere nella directory. Gli altri utenti, invece, non devono accedere.
Questo è uno dei casi in cui i gruppi diventano molto utili.
Permettono una condivisione controllata: non dai accesso al mondo intero, ma solo alle persone che fanno parte del gruppo giusto.
I comandi da conoscere: ls -l, chmod, chown, groups e sudo
In questo video non serve imparare tutte le opzioni dei comandi, ma è utile conoscere il ruolo dei principali strumenti legati ai permessi.
ls -l
ls -l mostra i dettagli di file e directory.
Permette di vedere:
- la stringa dei permessi;
- il proprietario;
- il gruppo;
- la dimensione;
- la data;
- il nome del file.
È spesso il punto di partenza quando vuoi capire perché puoi o non puoi accedere a qualcosa.
chmod
chmod serve a cambiare i permessi.
Permette di aggiungere o togliere r, w e x a owner, group e others.
È uno strumento potente, ma non va usato a caso.
Il punto non è “aprire tutto”. Il punto è capire quale permesso manca davvero e a chi serve.
chown
chown serve a cambiare proprietario e gruppo di file e directory.
Questo è diverso da chmod.
Con chmod cambi cosa possono fare owner, group e others.
Con chown cambi chi è l’owner o qual è il gruppo associato.
Cambiare proprietario significa cambiare chi ha il controllo principale su quel file.
groups
groups mostra di quali gruppi fa parte un utente.
È utile quando vuoi capire perché un utente può accedere a una directory condivisa, oppure perché non riesce a farlo.
sudo
sudo permette di eseguire un comando con privilegi amministrativi temporanei, se l’utente è autorizzato.
È utile, ma va usato consapevolmente.
Perché evitare chmod 777
Uno degli errori più comuni è usare:
chmod 777
per risolvere qualsiasi problema di permessi.
Il numero 777 indica, in modo semplificato, lettura, scrittura ed esecuzione per tutti:
- owner;
- group;
- others.
In pratica, chiunque può leggere, modificare ed eseguire.
A volte il problema sembra risolto, perché l’errore sparisce. Ma il prezzo è alto: hai aperto troppo.
È come dire: “Non riesco a entrare in una stanza, quindi tolgo tutte le serrature dell’edificio”.
Magari funziona, ma non è una buona idea.
Permessi troppo aperti possono esporre file sensibili, permettere modifiche indesiderate o rendere eseguibili file che non dovrebbero esserlo.
Su un server, questo può diventare un problema serio di sicurezza.
Il principio del minimo privilegio
La regola corretta è il principio del minimo privilegio.
Ogni utente, programma o servizio dovrebbe avere solo i permessi necessari per fare il proprio lavoro.
Non di più.
Se un servizio deve leggere un file, non serve dargli anche il permesso di modificarlo. Se un utente deve caricare file in una directory, non è detto che debba poter modificare tutto il sistema. Se uno script deve essere eseguito solo dal proprietario, non serve renderlo eseguibile da tutti.
Meno permessi inutili concedi, meno rischi crei.
Errori comuni dei principianti
Quando si impara Linux, alcuni errori sono molto frequenti.
Il primo è usare sempre sudo senza capire perché.
Il secondo è usare chmod 777 per risolvere qualsiasi errore di permessi.
Il terzo è confondere x su file e directory.
Il quarto è cambiare permessi in modo ricorsivo su directory importanti, senza sapere l’impatto.
Il quinto è ignorare i gruppi, che invece sono uno strumento fondamentale per gestire accessi condivisi senza aprire tutto a tutti.
C’è poi un errore meno ovvio: pensare che per cancellare un file contino solo i permessi del file.
In realtà cancellare un file significa modificare la directory che lo contiene. La directory contiene l’elenco dei file. Quando cancelli un file, rimuovi una voce da quell’elenco.
Per questo contano molto i permessi della directory, in particolare il permesso di scrittura sulla directory.
Riepilogo finale
I permessi Linux servono a stabilire chi può fare cosa su file e directory.
Linux è un sistema multiutente, quindi deve distinguere tra utenti diversi, gruppi diversi, servizi diversi e livelli diversi di accesso.
Root è l’amministratore del sistema, ma non bisogna lavorare sempre come root.
Ogni file o directory ha:
- un owner;
- un group;
- una categoria others.
I permessi principali sono:
rper leggere;wper scrivere o modificare;xper eseguire un file o attraversare una directory.
Una stringa come:
-rwxr-xr--
non è casuale. Va letta a blocchi: tipo di elemento, permessi dell’owner, permessi del group, permessi degli others.
I comandi da ricordare sono:
ls -lper vedere i permessi;chmodper cambiarli;chownper cambiare proprietario e gruppo;groupsper vedere i gruppi dell’utente;sudoper eseguire operazioni amministrative quando serve.
La cosa più importante da ricordare è questa: i permessi non sono un ostacolo. Sono una protezione.
Prima di cambiarli, bisogna capire chi deve accedere, a cosa deve accedere e quale permesso serve davvero.
Prossimo passo: i processi Linux
Nel video sul filesystem abbiamo capito dove stanno le cose.
In questo video abbiamo visto chi può fare cosa su quelle cose.
Il passo successivo è capire cosa succede quando avvii un programma.
Nel prossimo episodio della serie Capire Linux parleremo dei processi Linux: vedremo la differenza tra programma e processo, cosa sono i PID, i processi padre e figlio, lo scheduler e il multitasking.
Perché quando lanci un comando, Linux non sta semplicemente “aprendo un’applicazione”: sta creando e gestendo un processo.
Ed è lì che filesystem, permessi, kernel e programmi iniziano davvero a incontrarsi.