Nei sistemi GNU/Linux file e cartelle non sono liberamente accessibili. Il sistema nasce per essere multiutente e ogni oggetto del filesystem è protetto da un sistema di permessi che garantisce sicurezza e isolamento.
Ogni distribuzione Linux prevede utenti e gruppi. Alla creazione di un utente viene generalmente creato un gruppo omonimo. Un utente può appartenere a più gruppi.
ls -l
Il comando ls -l mostra i file con dettagli: tra questi, i permessi
sono la parte più importante.
-rw-r--r-- 1 mario mario 120 Jan 26 10:30 lezione.txt
-rw-r--r--- = file normaled = directory (cartella)l = link simbolicorw-r--r--r = read → puoi leggerew = write → puoi scrivere/modificarex = execute → puoi eseguire (o “attraversare” una directory)- = permesso assentex cambia significato tra file e cartelle
x significa “posso eseguirlo” (es.
./run.sh).
x significa “posso entrarci/attraversarla”
(es. cd, accesso ai contenuti).I permessi numerici hanno 3 cifre: utente / gruppo / altri. Ogni cifra è la somma di tre “pesi”:
r = 4w = 2x = 1| Numero | Somma | Permessi |
|---|---|---|
| 7 | 4 + 2 + 1 | rwx |
| 6 | 4 + 2 | rw- |
| 5 | 4 + 1 | r-x |
| 4 | 4 | r-- |
644rw- → legge e scriver-- → legge soltantor-- → legge soltantorw-r--r--
755rwx → legge, scrive, eseguer-x → legge ed eseguer-x → legge ed eseguerwxr-xr-x
chmod (base)
chmod modifica i permessi. Puoi farlo in due modi:
simbolico (aggiungo/tolgo una cosa) oppure numerico (imposto
tutto).
chmod u+x script.sh
u = user (proprietario)+ = aggiungix = esecuzionechmod 644 docs/lezione.txt
chmod 755 una_cartella
644755 (oppure 700 se
vuoi che solo tu possa eseguire)755 (perché serve x per
entrarci)
In ls -l vedi anche proprietario e gruppo
(nell’esempio: mario mario).
Questo serve perché Linux decide i permessi così:
id
groups
chownchown cambia proprietario/gruppo, ma di solito richiede privilegi
(sudo).
È un comando potente: si usa con attenzione e non serve per capire i permessi di base.
Obiettivo: vedere con mano che senza x uno script non parte, e che ls -l
ti fa capire subito cosa manca.
echo -e '#!/bin/bash\necho "Ciao Linux"' > run.sh
chmod +x run.sh
ls -l run.sh
./run.sh
chmod +x run.sh in ls -l deve comparire almeno una x
(di solito nell’owner)../run.sh e ricevi “Permission denied”, vuol dire: manca x
(o la directory non ha i permessi corretti).#!/bin/bash serve a dire “con quale interprete eseguire lo script”.
ls -l → prima lettera: tipo; poi 9 caratteri: permessi (utente/gruppo/altri).r=4, w=2, x=1 → i numeri (644/755) sono somme.644 → rw-r--r-- (file “leggibile”, scrivibile solo dal proprietario).
755 → rwxr-xr-x (eseguibile/attraversabile da tutti, scrivibile solo
dal proprietario).x su directory = puoi entrarci; senza x spesso “non passi”.chmod u+x file aggiunge esecuzione al proprietario;
chmod 644/755 imposta tutto.
id e groups ti dicono chi sei e quali permessi di gruppo ti si
applicano.