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:
chmod
(Change mode - Cambia modalità)chown
(Change ownership - Cambia proprietà)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:
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 utenteg
– 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 letturaw
– Concede permessi di scritturax
– 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:
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:
Vediamo il codice all'interno di 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:
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.
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.
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.
Lo stesso vale per la rimozione del permesso di scrittura dal file:
Possiamo mettere tutto quanto sopra insieme usando questo comando:
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).
Ma sai che posso creare un'altra directory all'interno di locked_directory
chiamata dir1
e leggere i file e le cartelle in dir1
?
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:
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:
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:
Ecco un esempio di modalità ottale:
Come posso rimuovere i permessi usando la modalità ottale?
Possiamo usare 0
per rimuovere i permessi da un file. Ecco un esempio:
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
Smembriamo ogni parte e cerchiamo di capirne il significato:
u+rwx
rappresenta l'aggiunta dei privilegi di lettura, scrittura, esecuzione per gli utentigo+r
rappresenta l'aggiunta dei privilegi di lettura per gruppi e altri
Come gestire i permessi in 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.
Osserva la prima parte del risultato (-rwxrwxrwx
) dalla videata qui sopra. Esaminiamo cosa significa:
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!