Il comando chown Linux è uno strumento fondamentale per la gestione delle autorizzazioni e delle proprietà dei file. Grazie ad esso, è possibile cambiare il proprietario e il gruppo di un file o di una directory. chmod, invece, è uno dei comandi più utilizzati per gestire i permessi di accesso ai file e alle directory. In questa guida, esploreremo tutte le funzionalità di entrambi e presenteremo alcuni trucchi e segreti per utilizzarli al meglio in scenari professionali.
Cos’è il comando Linux chown?
Il comando chown, abbreviazione di “change owner“, serve a cambiare il proprietario e/o il gruppo di un file o di una directory. In un sistema Linux, infatti, ogni file ha un proprietario e un gruppo associato: chown permette di modificare questi attributi.
La sintassi base del comando è la seguente:
chown [opzioni] nuovo_proprietario:nuovo_gruppo file_o_directory
I nomi del nuovo proprietario e del gruppo sono separati dal simbolo dei due punti. Chiude il comando, l’indicazione del nome o della directory sui quali si desidera agire.
Nel seguente esempio (notare l’aggiunta dell’opzione -R
), cambiamo il proprietario e il gruppo di tutti i file e le eventuali sottocartelle contenute nella directory specificata:
chown -R user1:staff /home/user1
Le opzioni più utili da usare con chown
Il comando chown può essere eventualmente abbinato con diverse opzioni. Oltre all’attivazione dello schema ricorsivo, descritto al paragrafo precedente, segnaliamo alcuni switch che permettono di padroneggiare l’utilizzo del comando:
-v
(“verbose”): Mostra i dettagli delle modifiche effettuate.
--reference=<file>
: Imposta la proprietà e il gruppo di un file o directory usando quelli estratti da un altro file (specificato al posto di <file>
).
--from=<user>:<group>
: Cambia la proprietà se e solo se il file ha un proprietario e gruppo specificati. Esempio: chown --from=user1:staff user2:admin documento.txt
Attenzione ai file e alle cartelle di sistema
Quando si lavora con i file di sistema, è essenziale prestare attenzione. Il comando chown può cambiare la proprietà di file critici, causando problemi sul sistema Linux in uso. Ad esempio, cambiare la proprietà di elementi come /bin
, /usr
, /etc
e simili, oltre che dei rispettivi contenuti, può ingenerare malfunzionamenti.
Per evitare di compromettere file di sistema, è buona pratica eseguire il comando chown come utente non privilegiato (o come root solo quando strettamente necessario) e limitarsi ad applicare interventi su cartelle che non sono critiche.
Se si desidera cambiare la proprietà solo su file non di sistema, si può utilizzare il comando find
in combinazione con chown. Di seguito un esempio che cambia la proprietà dei soli file non appartenenti all’utente root:
find /home/user1 -not -user root -exec chown user1:staff {} \;
Cambiare solo la proprietà di file modificati di recente
Un altro trucco utile è quello che consente di modificare la proprietà dei file modificati di recente. Usando ancora una volta find
, è possibile selezionare i file basati sulla data di modifica e quindi applicare chown:
find /home/user1 -mtime -7 -exec chown user1:staff {} \;
In questo caso, il comando cambia la proprietà dei file modificati negli ultimi 7 giorni.
Cosa fa il comando chmod su Linux
Nell’installare qualche software avanzato vi sarete probabilmente trovati nella necessità di rendere eseguibile un file. Più nello specifico, uno script d’installazione (.sh
).
Il comando chmod, abbreviazione di change mode, è lo strumento “principe” per gestire i permessi di accesso ai file e alle directory. Comprendere a fondo il suo funzionamento è essenziale per garantire la sicurezza e il corretto funzionamento del sistema.
I permessi determinano chi può leggere, scrivere o eseguire un file, ed è possibile configurarli per il proprietario (user), il gruppo (group) e gli altri utenti (others).
La sintassi di base è la seguente:
chmod [opzioni] permessi file_o_directory
I permessi possono essere impostati sia in notazione simbolica che in notazione numerica. Per visualizzare i permessi di un file, basta digitare il comando che segue:
ls -l <nomefile>
La notazione simbolica
Ogni file o directory ha tre tipi di permessi:
- Lettura (`r`): Permette di leggere il contenuto del file.
- Scrittura (`w`): Per modificare il file.
- Esecuzione (`x`): Per eseguire il file (utile per script e programmi).
I permessi sono organizzati in tre gruppi:
- Proprietario (user, `u`)
- Gruppo (group, `g`)
- Altri (others, `o`)
Nell’output del comando ls -l
presentato al paragrafo precedente, il primo carattere (`-`) indica se è un file normale (`-`), una directory (`d`) o altro. I successivi 9 caratteri rappresentano i permessi.
Nell’immagine pubblicata in precedenza, dopo il carattere iniziale, i primi 3 caratteri rwx
indicano che il proprietario del file può leggerlo, scriverci ed eseguirlo. I successivi tre caratteri r-x
stanno a significare che il gruppo può leggere ed eseguire il file (ma non modificarlo). Gli ultimi tre caratteri indicano che anche gli altri utenti possono leggere ed eseguire il file senza poterlo modificare.
Rendere eseguibile uno script
Si supponga di voler rendere eseguibile un file per il proprietario. La combinazione di u+x
permette di ottenere questo risultato:
chmod u+x script.sh
Per inciso, osserviamo che per avviare un file senza renderlo eseguibile si può usare il comando bash script.sh
.
Il comando seguente, ad esempio, rimuovere il permesso di lettura per gli altri utenti (notare il segno meno):
chmod o-r file.txt
Per dare permessi completi al proprietario e solo lettura agli altri si può ad esempio usare la sintassi che segue:
chmod u=rwx,g=,o=r file.sh
La notazione numerica
I permessi possono essere rappresentati con un valore numerico basato su tre bit:
- Lettura (`r`) = 4
- Scrittura (`w`) = 2
- Esecuzione (`x`) = 1
La somma di questi valori rappresenta i permessi:
- 7 (4+2+1): Lettura, scrittura ed esecuzione.
- 6 (4+2): Lettura e scrittura.
- 5 (4+1): Lettura ed esecuzione.
- 4: Sola lettura.
- 0: Nessun permesso.
Il celebre comando seguente, che potreste aver trovate in molteplici guide, assegna quindi permessi completi per il proprietario (7), sola lettura per il gruppo (4) e nessun accesso per altri (0):
chmod 740 prova.sh
Sostituendo 740
con 777
si assegnano i permessi completi a tutti gli utenti (proprietario, gruppo e altri). Si tratta di una configurazione generalmente sconsigliata per motivi di sicurezza.
Le opzioni che si possono utilizzare con chmod
Come abbiamo visto nel caso del comando chown, anche chmod supporta molteplici opzioni. Tra quelle più utili ci sentiamo di consigliare le seguenti:
-v
(“verbose”): Mostra i dettagli delle modifiche apportate.-R
: Attiva la ricorsione e permette di assegnare i permessi in blocco a tutti i file ed eventuali sottocartelle contenuti nella directory specificata (esempio:chmod -R 755 <directory>
).--preserve-root -R
: Evita di modificare i permessi della directory root per errore.--reference
: Imposta i permessi di un file in base a quelli di un altro (esempio:chmod --reference=esempio.txt altrofile.txt
).
Gestione sicura delle directory condivise
Non è cosa infrequente che si creino problemi, su Linux, all’interno delle directory di lavoro condivise tra più utenti.
Il seguente comando fa sì che tutti i file creati all’interno della cartella condivisa ereditino il gruppo della directory stessa (utilizzo dell’apposito bit setgid +s
):
chmod g+s <cartella_condivisa>
Protezione contro la cancellazione
Sempre ricorrendo al comando chmod, si può impedire la cancellazione accidentale di un file da parte di altri utenti rimuovendo il permesso di scrittura per il gruppo e per others:
chmod go-w file.txt
Il comando chmod +t <directory>
imposta inoltre il cosiddetto sticky bit sulla cartella indicata. Questo significa che solo il proprietario del file o l’utente root possono eliminarlo, anche all’interno delle directory condivise.
Differenze tra chown e chmod
I comandi chown e chmod sono due strumenti essenziali per chi si trova ad amministrare, a vario titolo, sistemi Linux in locale e sul cloud.
chown è utilizzato per modificare la proprietà di un file o directory, consentendo di assegnare il file a un nuovo utente proprietario e/o a un nuovo gruppo. Il comando è evidentemente essenziale per gestire l’organizzazione e la sicurezza in ambienti multiutente: qui è necessario trasferire la responsabilità sulla gestione di determinati file senza alterarne i permessi di accesso.
Al contrario, chmod consente di definire i permessi di accesso per il proprietario, il gruppo e gli altri utenti, determinando chi può leggere, scrivere o eseguire un file. È lo strumento principale per configurare le regole di accesso a livello granulare, garantendo che solo utenti autorizzati possano interagire con i file in base alle politiche di sicurezza stabilite.
In sintesi, chown si concentra su chi possiede il file, determinando il controllo amministrativo su di esso, mentre chmod definisce cosa i proprietari e gli altri utenti possono fare con il file, regolando l’accesso in base alle necessità operative.
In un ambiente di produzione, cambiare la proprietà di file senza muoversi con cautela, può avere implicazioni significative sulla sicurezza e sul funzionamento del sistema. È importante monitorare i cambiamenti (usando l’opzione verbose -v
), creare un backup prima di modificare file e cartelle, usare con la massima cautela script automatizzati.