Lavorando con Linux è pressoché indispensabile conoscere l'uso del comando chmod. Questo comando permette di assegnare i permessi ai files e directories delle varie applicazioni, allo scopo di decidere chi può leggere, scrivere o eseguire una determinata risorsa.

La questione non riguarda solo la sicurezza o la privacy dei dati, ma il corretto funzionamento delle applicazioni. Una delle principali differenze tra i sistemi Windows e Linux è proprio la politica sull'argomento delle “default permissions”. Su Windows si assume come default che un programma possa essere eseguito da qualsiasi utente, a meno che non venga specificato diversamente. Su Linux avviene spesso il contrario: per default una risorsa non è mai eseguibile, e può essere gestita solo dall'utente che l'ha creata. Ecco perché è importante saper gestire i permessi di gruppi e utenti in modo corretto: senza questa conoscenza rischiamo di non riuscire ad eseguire le applicazioni che ci servono.

Utenti, gruppi e permessi

Per comprendere il funzionamento del comando chmod è necessario saper interpretare alcune informazioni fornite dalla shell. Quando elenchiamo le risorse presenti all'interno di una directory (tramite il comando ls o ll), otteniamo un elenco di questo tipo

-rw-r--r-- 1 L500 None 180 10 mar 17.39 foo

-rwxr-xr-x 1 L500 None 65 9 mar 14.38 signup.sh

drwxr-xr-x 1 L500 None 0 22 mar 10.36 tmp

quello che ci serve, per capire i permessi assegnati ad utenti e gruppi di utenti, è la chiave di lettura dei simboli stampati all'inizio di ogni riga. Il “trucco” per leggere agevolmente queste informazioni è il criterio di separazione dei simboli, ovvero: i caratteri stampati all'inizio di ogni riga vanno divisi secondo il modello 1-3-3-3. Se stessimo parlando della formazione di una squadra sportiva, possiamo immaginare uno sport che richieda squadre di 10 giocatori, di cui 1 è il portiere mentre gli altri 9 giocano sul campo. Con questa analogia, il “modulo” 1-3-3-3 ci dice che abbiamo 1 portiere, 3 giocatori in difesa, 3 al centrocampo e 3 in attacco.

Applicando il modulo alla sigla “-rw-r--r--” (la prima delle tre righe viste sopra) risulta

  • portiere: -
  • difesa: rw-
  • centrocampo: r--
  • attacco: r--

questo perché abbiamo diviso la sigla “-rw-r--r--” in 4 gruppi di simboli. Una volta imparato a raggruppare i simboli in terzine, possiamo abbandonare la similitudine calcistica e capire il vero significato della codifica. Il primo carattere (il portiere) descrive il tipo di risorsa: il simbolo indica un file, la lettera d una directory, la lettera l un link simbolico.

La risorsa elencata come “-rw-r--r--” è quindi un file, perché il primo simbolo della riga è -.

Per capire il significato delle tre terzine può tornarci utile ricordare la sigla UGO, ovvero: User, Group e Others. La lettura corretta della riga “-rw-r--r--” è quindi

  • Tipo di risorsa: -
  • Permessi utente proprietario (User): rw-
  • Permessi del gruppo proprietario (Group): r--
  • Permessi altri utenti e/o gruppi (Others): r--

a questo punto tutto dovrebbe essere abbastanza intuitivo. Il simbolo r indica il permesso di lettura (read), il simbolo w indica il permesso di scrittura (write), mentre il simbolo x, se presente, indica il permesso di esecuzione (execute). Le informazioni e i permessi per questa risorsa sono quindi

  • Tipo di risorsa: file
  • Permessi proprietario: leggere e scrivere
  • Permessi del gruppo: solo lettura
  • Permessi altri utenti: solo lettura

Il comando chmod

Una volta compresa la chiave di lettura delle informazioni su utenti, gruppi e permessi, l'uso del comando chmod è semplice ed intuitivo. Basta specificare su chi vogliamo agire, cosa vogliamo cambiare e come vogliamo cambiarlo. Ad esempio

chmod u+x foo

specifica che per l'utente proprietario (simbolo u) dobbiamo aggiungere (simbolo +) il permesso di esecuzione (simbolo x) per la risorsa foo. Analogamente il comando

chmod g-w foo

rimuove (simbolo -) i permessi di scrittura dal gruppo proprietario della risorsa foo.

Consideriamo infine il comando

chmod o=r foo

che assegna (simbolo =) i permessi di lettura della risorsa foo a tutti gli altri, ovvero gli utenti diversi dall'utente proprietario e non appartenenti al gruppo proprietario.

Conclusioni

Abbiamo visto come usare i simboli +, - e = per gestire i permessi sulle risorse. Il simbolo + aggiunge permessi a quelli già esistenti, il simbolo rimuove un permesso da quelli esistenti, mentre il simbolo = permette di impostare i permessi come vogliamo, sovrascrivendo la configurazione precedente.

Usando poi il simbolo a per indicare all users and groups possiamo assegnare (o rimuovere) velocemente tutti i permessi che ci servono, ad esempio

chmod a=rxw foo

assegna tutti i permessi possibili a tutti gli utenti e gruppi, mentre il comando

chmod a-rxw foo

rimuove tutti i permessi possibili a tutti gli utenti e gruppi.

E' possibile eseguire gli stessi comandi in modo molto sintetico tramite la notazione ottale, ma si tratta di una notazione che risulta comoda dopo un po' di esperienza. La notazione che abbiamo visto oggi è detta invece simbolica perché più intuitiva: basta ricordare la sigla UGO e i caratteri r, w, x per gestire i permessi di qualsiasi risorsa.

Ti potrebbero interessare

WordPress: aggiornarlo è fondamentale per Sicurezza e Prestazioni

Aggiornare WordPress è fondamentale

Mantenere sempre aggiornato il proprio sito web WordPress è di fondamentale importanza per diversi motivi:

Sicurezza: le versioni più recenti di WordPress spesso includono correzioni di [...]

Indirizzo Email e Sito Internet personali

Il potere di Indirizzo Email e Sito Internet Personali

L'importanza, anche per una persona di avere un indirizzo email e un sito internet con il proprio nome

Viviamo in un'era digitale in cui la presenza online è diventata [...]

Scopri i vantaggi del Cloud Hosting di Aziende Italia

Perchè scegliere un Cloud Hosting

Hosting o Cloud Hosting? Se amministri più siti web puoi semplificare la gestione ed ottimizzare i costi.

Scopri i suoi vantaggi dei nostri Cloud Hosting Facilità di [...]
Cisco
DELL
Intel
NetApp
Proxmox
Ripe