Articolo originale: https://www.freecodecamp.org/news/file-permissions-in-linux-chmod-command-explained/

Proprio come ogni altro sistema operativo, più utenti possono creare account e condividere la stessa macchina con un sistema operativo Linux in esecuzione.

Tuttavia quando utenti diversi condividono un sistema possono sorgere facilmente problemi di privacy. Ad esempio un utente potrebbe non volere che gli altri possano vedere, modificare o cancellare i propri file.

Il terminale di Linux è dotato di alcuni super poteri quando si ha a che fare con i permessi sui file. Puoi concedere o revocare permessi per ciascun file e directory dal tuo terminale Linux.

Cosa Sono i Permessi sui File in Linux?

I permessi sui file controllano quali azioni possono essere eseguite da ciascun utente. Lettura, Scrittura ed Esecuzione sono le tre possibili azioni per ogni file.

Gli utenti sono classificati in tre grandi categorie: Utenti normali, Gruppi e Altri. Linux consente agli utenti di impostare i permessi a livello molto granulare. Puoi mettere in sicurezza il tuo file o la tua directory in ogni posizione possibile in un filesystem.

Sembra utile, non è vero?

Ci sono tre importanti comandi che userai per la gestione dei permessi sui file:

  1. chmod (Change mode - Cambia modalità)
  2. chown (Change ownership - Cambia proprietà)
  3. chgrp (Change group - Cambia gruppo)

Tra questi, chmod è uno dei più importanti, e ne discuteremo qui, mentre esaminerò gli altri in prossimi articoli.

Esaminiamo nei dettagli il comando chmod.

Azioni che puoi eseguire su un file

Prima di proseguire oltre, voglio assicurarmi che per te sia chiaro come funzionano le azioni di lettura, scrittura ed esecuzione su un file. Lettura e scrittura sono piuttosto autoesplicativi – determinano se un utente può leggere e scrivere un file.

Ma cos'è un file eseguibile?

Un file viene detto eseguibile se ha una sequenza di istruzioni per ottenere qualcosa. Un buon esempio sono i file di script (Script di Shell).

Cos'è il Comando chmod?

chmod è un comando che ti consente di cambiare i permessi per un file o directory per tutti i tipi di utenti.

Ecco la sintassi del comando:

chmod <Operazioni> <Nome File/Directory>
Sintassi per l'uso del comando chmod

Puoi concedere o revocare i permessi sostituendo Operazioni nella sintassi sopra indicata.

Quali sono le operazioni che puoi eseguire?

Le operazioni sono divise in due categorie, che esploriamo qui sotto.

Permessi a Livello Utente

Le opzioni che puoi usare per controllare i permessi a livello utente sono:

  • u – Concede permessi a un utente
  • g – Concede permessi a un gruppo (un gruppo di utenti)
  • o – Concede permessi agli altri (chi non appartiene a nessuna delle categorie precedenti).

Nota: Se questa opzione viene lasciata vuota, i permessi saranno applicati all'utente connesso. Per la maggior parte dei casi non sarà valorizzata.

Permessi al Livello di File

Queste opzioni controllano i permessi al livello di file.

  • r – Concede permessi di lettura
  • w – Concede permessi di scrittura
  • x – Concede permessi di esecuzione

Queste opzioni devono essere precedute dall'operatore '+' o '-'.

'+' indica che si aggiunge un nuovo permesso,  '-'  indica che si revoca un permesso esistente.

Ecco un esempio:

chmod +r sample.txt
Comando per aggiungere permessi di lettura a un file

Il comando qui sopra aggiunge permessi di lettura al file sample.txt .

Abbastanza semplice, giusto? Continuiamo.

Come Rendere Eseguibile un File in Linux

Posso spiegarlo più chiaramente con un esempio tratto da una mia esperienza.

Linux è il sistema operativo predefinito per il mio team. Recentemente abbiamo assunto uno stagista, che non sapeva nulla di Linux ma era voglioso di imparare ed esplorare. Abbiamo cominciato a istruirlo chiedendogli inizialmente di scrivere qualche script di shell, visto che la maggior parte dei server eseguono Linux come sistema operativo. Ha trovato tutto il codice su internet e lo ha copiato (gli abbiamo affidato questo compito intenzionalmente).

Lo stagista ha salvato il file ma non era in grado di eseguire lo script. Non sapeva identificare il vero problema. Ha iniziato a togliere qualche blocco di codice e ha tentato di eseguirlo ancora e ancora.

Continuava a ricevere un errore che diceva "Command not found" (comando non trovato).

Alla fine ha sostituito la prima riga con una istruzione di stampa (il comando echo) e ha eseguito il file con la speranza di vedere il risultato alla console ma non aveva ancora trovato l'errore.

Ormai un po' frustrato, ha chiesto aiuto.

Esaminiamo il problema.

Fondamentalmente, possiamo eseguire i file .sh semplicemente eseguendoli in questo modo:

./install.sh
Comando per eseguire lo script di shell

Vediamo il codice all'interno di install.sh

echo "This is executable file 🎉"
install.sh

Ha eseguito lo stesso comando ma non ha funzionato. Questo perché il file non era in formato eseguibile. Pertanto ho eseguito il comando magico per renderlo eseguibile:

chmod +x install.sh
Comando per aggiungere permessi di esecuzione a un file
trd4dTKoxhk9Ap9xLifsuo6bD9wj4kc_i5gtDudFLQyU1gNdJLGoLoyCuJLh1FF9Yah-IG43YuR3yrrtJq48xBEYEq0QQkHMFB1n1YBiv-_fWJT95gyihZD0tjAj0ScnEmF33WRFdHJbfzTSpxSnaimyUbHlK9a2hMujE8CeyT4AoliZY5XJ_wKOsIVrPw
Istruzioni da terminale per rendere un file eseguibile

Ora è eseguibile. Mi ha guardato come se fossi un  hacker 😂. In realtà è un concetto piuttosto semplice e di base.

Come Rimuovere Permessi da un File in Linux

Lavoro con il mio collega Divad su molti progetti, e gli piace provare a prendermi in giro. Lavoriamo insieme su molti progetti per hobby e spesso scriviamo script di shell per una distribuzione veloce.

Ogniqualvolta scrive script di shell, rimuove sempre tutti i permessi dal file e invia le modifiche al repository remoto. Quindi ogni volta devo concedere i permessi usando i comandi qui sopra per qualsiasi azione debba fare.

Diamo una rapida occhiata al comando che usa per rimuovere i permessi sul file.

Qui abbiamo un file chiamato install.sh che ha tutti i permessi (Lettura, Scrittura, Esecuzione). Rimuoviamo il permesso di esecuzione per questo file di script.

chmod -x install.sh
Comando per rimuovere i permessi di esecuzione per un file
image-136
Istruzioni da terminale per rimuovere i permessi di esecuzione per un file

Ora non saresti in grado di eseguire il file. Se provi otterrai un errore come mostrato nella videata qui sopra.

Rimuoviamo i permessi di lettura dal file.

chmod -r install.sh
Comando per rimuovere i permessi di lettura per un file

Con questo comando abbiamo rimosso i permessi di lettura. Ora cerchiamo di leggere quel file usando  Nano (l'editor di file per il terminale di Linux). Dovresti ottenere l'errore "Permission Denied" (Permesso negato) indicato in basso.

DHdaIMmV0pcFiMO-9GiLwXbUes8QZs5v6uKDLfuCu9Ltt-0SitENOM8najXPaxMXFJSQAzlI7F1u1p8i6fbqq1timsCoVGVOBdEtzUlybcmoh0W6oHWrIKyUUJr1dOjDZ_vbo0WkGE3fcLa3T7ZfvymVKVZPoKvKrDDH7ZVFSSlyeyQ1ypLixkAdD5uroA
iphPcFoH9r0VnGArokWKexbVTzGtMkaOC-EgeXECKqHyE2QJMA49sh5HK_u_ZNKDDKc_hmFPe-dM8VVy0Xu-EKGT1VpBaABcUtPxCEipSvNVhwJQWfxisGBHJbvAcosK3kO8JNsWT9qSl2-7A0cK-A8gHjWIK4cfvNAx4iofZOOPOgevXbR8mVjmDZqk0w

Lo stesso vale per la rimozione del permesso di scrittura dal file:

chmod -w install.sh
Comando per rimuovere il permesso di scrittura dal file
wVL6XdsMVVBrqw3dnrjELCIsqQyDkxtQWUKcD8HyXAUJktcBQyYAK1Ln-A9P517WW1b8tfm95HGd4NmRuP9fgs9QI6w9ZrR0ZeSNyMpWIlYlGld_Vq1-_m8fDDcV9Et-BJd99Jy3RI2cs6vm26Ywp9IFJzx1su8CGVgoe38-BNJp9qDooZe7XAbqv1S88A

Possiamo mettere tutto quanto sopra insieme usando questo comando:

chmod -rwx install.sh
Comando per rimuovere i permessi di lettura, scrittura, esecuzione da un file

Questa è la parte fondamentale per quanto riguarda la gestione dei permessi in Linux. Ma ricorda che abbiamo appena sfiorato la superficie dell'argomento. Cerca di comprenderla e fai qualche esperimento con qualche semplice file. Perché, chissà, in futuro potresti avere un collega come Divad. :)

Come Aggiungere o Rimuovere Permessi per Directory (Cartelle) in Linux

Se lavori con Linux, potresti esserti imbattuto in varie directory come  /etc, /var, /opt e altre. Potresti tuttavia non essere a conoscenza del perché queste directory esistono.

Tutte queste cartelle hanno una cosa in comune, vale a dire che non sarai in grado di creare un file o una cartella al loro interno senza i privilegi di root.

Questa impostazione viene preconfigurata nel tuo sistema quando Linux viene installato.

Potresti tuttavia chiederti, posso applicare restrizioni su una cartella nella mia directory /home simili a quelle delle directory sopra citate? La risposta è sì. Puoi farlo modificando i permessi per la directory usando il comando chmod.

Capiamolo con un esempio.

Ho creato una directory chiamata locked_directory e da questa ho rimosso i permessi di lettura. Se cercassi di leggere il contenuto della cartella con il comando ls , vedrei il messaggio di errore "Permission Denied" (Permesso negato).

chmod -r locked_directory/
Comando per eliminare il permesso di lettura da una directory
pasted-image-0-1
Comandi dal terminale per eliminare il permesso di lettura da una directory

Ma sai che posso creare un'altra directory all'interno di locked_directory chiamata dir1 e leggere i file e le cartelle in dir1?

FMLRcjtvY-M1YVSANwmgdzdDwBJ9lrv4V7dLREva9RRUmal7PG8Q5p-l4XZMCi3zIznvSqIKpr68PwGlcripbREffgPzpmqOJ09OR-CvBEGrncBxYX9c9OTe0kq5-xL9rsGP1xQDO_sZP9iXPmHKpXFukFhTIYlXaFRnoHvdCRYA1FJDHcvXmFqP8dmshA

Allora qual è lo scopo del comando che abbiamo eseguito appena prima? La rimozione del permesso di lettura su una directory genitore dovrebbe rimuovere lo stesso permesso anche sulle directory figlie, giusto?

Bene, è esattamente ciò che ti ho detto in precedenza. Linux gestisce il permesso sui file con un livello di granularità molto alto.

Se vuoi applicare i permessi alla directory genitore e a tutte le sue discendenti, devi passare una specifica opzione al comando chmod.

Questa opzione è -R. Praticamente significa che gli stessi permessi saranno applicati ricorsivamente a tutte le sottodirectory (le directory figlie). In questo modo i permessi verranno applicati fino all'ultima directory figlia.

Ecco la sintassi per fare questo:

sudo chmod -R <permessi> <nomedirectory>
Sintassi per rimuovere i permessi di lettura da una directory ricorsivamente

Ricorda che l'esecuzione di un comando che effettua un'operazione ricorsiva, richiede i privilegi root. Pertanto devi aggiungere sudo all'inizio di questo comando. Ecco la sintassi:

sudo chmod -R -r locked_directory
Comando per rimuovere i permessi di lettura da una directory ricorsivamente
GZGisVgUxcZjYduKGlOaYHUaTRTgI7tf3nNzdpxL8QZvDDYV_PLgwaFipmbfxzDlziG_Gy7f5Gyeibc_E7IhGvEOmReUKUe3t7yYMXZKDsRnXcxivbepHpqww3y2YSLSyjvi83i_c5Z1rgQbc_ku-Bz5hy8lMl8idzg4MtfYtEZymPFTZBNceq9xgH79ZQ
Istruzioni da terminale per rimuovere i permessi di lettura da una directory ricorsivamente

Dalla videata qui sopra, puoi vedere che il tentativo di visualizzare i file della directory figlia fallisce dopo che è stato rimosso il permesso di lettura ricorsivamente a partire dalla directory genitore.

Un Altro Modo di Gestire i Permessi sui File in Linux

In alternativa, puoi usare una rappresentazione ottale per controllare i permessi di un file.

Possiamo usare numeri per rappresentare i permessi dei file (è il metodo più comunemente usato per impostare i permessi). Quando cambi i permessi usando la modalità ottale, rappresenti i permessi per ciascuna tripletta (utente/gruppo/altri) usando un numero (4, 2,1 o una combinazione degli stessi).

Vediamo la sintassi usando la modalità ottale:

chmod <utente><gruppo><altri> install.sh
Sintassi per usare la modalità ottale

Ecco un esempio di modalità ottale:

chmod 777 install.sh
Comando per concedere tutti i permessi usando la modalità ottale

Come posso rimuovere i permessi usando la modalità ottale?

Possiamo usare 0 per rimuovere i permessi da un file. Ecco un esempio:

chmod 000 install.sh
Comando per rimuovere tutti i permessi usando la modalità ottale
Accesso Modalità Simbolica Modalità Ottale
Lettura r 4
Scrittura w 2
Esecuzione x 1

La tabella qui sopra mostra i codici simbolici e ottali per i permessi dei file.

Accesso Modalità Simbolica
Es.:+rwx,g+rw,o+r
Modalità Ottale
Es.:764 (Utente,Gruppo,Altri)
Utente u <prima posizione>
Gruppo g <seconda posizione>
Altri o <terza posizione>

Potresti essere confuso😖. Continua a leggere per comprendere meglio.

Esaminiamo un caso di utilizzo.

Vuoi concedere i permessi di lettura, scrittura, esecuzione agli utenti, e permessi di lettura per i gruppi e per gli altri sul file install.sh.

Vediamo come farlo usando le due modalità sopra citate.

Come gestire i permessi in modalità simbolica

chmod u+rwx,go+r install.sh
Comando per applicare la casistica sopra citata usando la modalità simbolica

Smembriamo ogni parte e cerchiamo di capirne il significato:

  • u+rwx rappresenta l'aggiunta dei privilegi di lettura, scrittura, esecuzione per gli utenti
  • go+r rappresenta l'aggiunta dei privilegi di lettura per gruppi e altri

Come gestire i permessi in modalità ottale

 chmod 744 install.sh
Comando per applicare la casistica sopra citata usando la modalità ottale

Analizziamo ogni numero e cerchiamo di capirne il significato:

  • Il primo numero (7) rappresenta i permessi per l'utente: 7 = ( 4 (lettura) +2 (scrittura) +1 (esecuzione) )
  • Il secondo numero (4) rappresenta i permessi per i gruppi: 4 (lettura)
  • Il terzo numero (4) rappresenta i permessi per gli altri: 4 (lettura)

Quale Modalità è la Migliore?

La modalità simbolica risulta molto più potente di quella ottale.

La ragione è che nella modalità simbolica possiamo mascherare i bit di permesso che vogliamo cambiare mentre nella modalità ottale i permessi sono assoluti e non possono essere usati per modificare i singoli bit.

Come Trovare i Permessi di un File

Possiamo trovare i permessi attualmente esistenti per un file usando il comando ls.

Spero che tu sappia tutto circa il comando ls. Aggiungendo l'opzione -l e il nome del file il comando  ls ti mostra maggiori informazioni, compresi i permessi.

ls -l install.sh
Comando per conosce i permessi esistenti di un file
image-137
Istruzioni da terminale per conoscere i permessi esistenti di un file

Osserva la prima parte del risultato (-rwxrwxrwx) dalla videata qui sopra. Esaminiamo cosa significa:

permissions-1-1

Il primo carattere indica il tipo di elemento.

  • "-" indica che è un file normale
  • "d" indica che è una directory
  • "l" indica che è un link simbolico (symlink, che è una scorciatoia a un file/directory)

Il successivo insieme di lettere è raggruppato con un massimo di 3 per ciascun gruppo. Questi gruppi rappresentano i corrispondenti permessi per utente, gruppo e altri.

Conclusione

In questo articolo, hai imparato la gestione di base dei permessi di file e cartelle.

Spero ti sia piaciuto leggere questo tutorial. Ho una richiesta da farti: cerca di fare un tentativo con qualche situazione complicata come avere permutazioni e combinazioni di permessi 😂. Ti aiuterà sicuramente per la tua intera carriera.

Iscriviti alla mia newsletter visitando il mio sito e dai anche un'occhiata all'elenco di tutti i miei blog.

Saluti!