Modificare i permessi con chmod e chown

12/04/22 | ~ 6 minuti

In qualsiasi sistema operativo file e cartelle non sono liberamente accessibili e modificabili, ma seguono dei precisi permessi per garantire maggiore sicurezza.
I sistemi GNU/Linux, in particolare, nascono con la predisposizione all'uso multiutente e la componente dei permessi è una delle peculiarità principali, a prescindere dalla distribuzione.
Gli strumenti primari per la gestione dei permessi sono chmod e chown.

Utenti e gruppi

Facciamo un passo indietro.
Ogni distro Linux prevede la presenza di utenti e gruppi. Alla creazione di un utente generalmente corrisponde quella di un gruppo omonimo, a cui l'utente in questione sarà automaticamente aggiunto; ogni utente può far parte di uno o più gruppi.

Oltre ai gruppi che condividono il nome con gli utenti, ne esistono altri con funzionalità particolari, ad esempio il gruppo wheel viene usato per assegnare ad utenti standard permessi amministrativi quando usano il comando sudo.

La rappresentazione dei permessi

Per consuetudine la rappresentazione dei comandi avviene con il prefisso "$ ", che non va digitato nella shell.

L'interazione con i permessi può essere effettuata proficuamente anche da quasi tutti i file manager con interfaccia grafica ma, come sempre, per capire meglio, ci concentreremo sul terminale.

Se da una qualsiasi cartella digitiamo il comando: $ ls -l La shell ci risponderà con la lista dettagliata di tutto il contenuto: dr---w---x 2 dajelinux gdajelinux 4096 10 apr 12.00 Cartella -rwxr--r-- 1 dajelinux gdajelinux 0 10 apr 12.00 Prova1 ---xrw--wx 1 dajelinux gdajelinux 0 10 apr 12.00 Prova2

Ogni riga è suddivisa in colonne che espletano le proprietà del rispettivo file o cartella.
La prima colonna è formata da 1+9 caselle.
Tutte le caselle partono da uno stato nullo - non assegnato e possono assumere un valore definito da una lettera.
La prima casella è occupata da una d (directory) se si riferisce ad una cartella, ma rimarrà vuota (-) in caso di file.

Le nove caselle dalla 2 alla 10 vanno considerate raggruppandole in tre terzine.
Ogni gruppo di tre fa riferimento ai permessi dell'utente proprietario (u), del gruppo proprietario (g) e infine degli altri utenti (o).
Le 3 caselle di ogni piccolo gruppo, infine, possono avere dei valori specifici:

-rwxrwxrwx 1 dajelinux gdajelinux 0 10 apr 12.00 Prova3 L'utente e il gruppo proprietario, invece, compaiono rispettivamente nella terza e quarta colonna di ogni riga dell'output di ls. Qui corrispondono a dajelinux e gdajelinux.

Esempi

dr---w---x 2 dajelinux gdajelinux 4096 10 apr 12.00 Cartella La directory Cartella può essere solo letta dall'utente dajelinux, scritta dai componenti del gruppo gdajelinux ed eseguita dagli altri utenti.

-rwxr--r-- 1 dajelinux gdajelinux 0 10 apr 12.00 Prova1 Il file Prova1 può essere letto, scritto ed eseguito dal suo proprietario dajelinux, ma tutti gli altri potranno solo leggerlo.

---xrw--wx 1 dajelinux gdajelinux 0 10 apr 12.00 Prova2 Il file Prova2 può essere eseguito da dajelinux, letto e scritto da chi fa parte di gdajelinux e scritto ed eseguito dagli altri utenti.

Cambiare i permessi con chmod

Come abbiamo già visto, i permessi su Linux vengono rappresentati in tre terzine e divisi per utente, gruppo e altri utenti.
I permessi possono essere modificati selettivamente con chmod, aggiungendoli o rimuovendoli a seconda dei ruoli.

$ chmod u+r Prova1 $ chmod u+w Prova1 # chmod u+x Prova1 Tre comandi differenti, tutti per assegnare permessi all'utente proprietario sul file Prova1. u+r andrà ad aggiungere il permesso di lettura, u+w quello di scrittura, infine u+x quello di esecuzione.
È possibile raggruppare i comandi precedenti un unica richiesta alla shell: $ chmod u+rwx Prova1 Se avessi voluto rimuovere tutti i permessi sul file Prova1 avrei potuto digitare: $ chmod u-rwx Prova1 O avrei dovuto sostituire il + con il - in ogni singolo comando.

Quello che vale per l'utente (u), vale anche per il gruppo proprietario (g) e per gli altri utenti (o). $ chmod g+w Prova2 quindi, per permettere al gruppo di scrivere su Prova2, $ chmod o-x Prova2 per vietarne l'esecuzione a tutti gli altri utenti che non siano il proprietario del file o non facciano parte del gruppo che lo detiene, ecc.

Cambiare i proprietari con chown

Abbiamo già visto un esempio dell'output del comando ls -l dr---w---x 2 dajelinux gdajelinux 4096 10 apr 12.00 Cartella -rwxr--r-- 1 dajelinux gdajelinux 0 10 apr 12.00 Prova1 ---xrw--wx 1 dajelinux gdajelinux 0 10 apr 12.00 Prova2 Se le caselle della prima colonna rappresentano i permessi, utente e gruppo proprietari sono indicati nella terza e quarta colonna di ogni riga.
La modifica di questi valori è piuttosto semplice rispetto alle combinazioni necessarie per padroneggiare i permessi e si basa fondamentalmente su una struttura chown utente:gruppo . Nello specifico con il comando: $ chown luca:luca vado ad impostare come proprietari l'utente luca e il suo omonimo gruppo di appartenenza.

Non è la prima volta, e non sarà nemmeno l'ultima, che ometto dei metodi alternativi per eseguire delle operazioni, a scapito della completezza ma a vantaggio della semplicità.