Come utilizzare il comando chmod su Linux

Controlla chi può accedere ai file, cercare directory ed eseguire script utilizzando il comando chmod di Linux. Questo comando modifica i permessi dei file di Linux, che a prima vista sembrano complicati ma in realtà sono piuttosto semplici una volta che sai come funzionano.

chmod Modifica i permessi dei file

In Linux, chi può fare cosa su un file o una directory è controllato tramite serie di autorizzazioni. Sono disponibili tre serie di autorizzazioni. Un set per il proprietario del file, un altro set per i membri del gruppo del file e un set finale per tutti gli altri.

Le autorizzazioni controllano le azioni che possono essere eseguite sul file o sulla directory. Consentono o impediscono che un file venga letto, modificato o, se si tratta di uno script o di un programma, eseguito. Per una directory, le autorizzazioni determinano chi può accedere alla directory e chi può creare o modificare i file all’interno della directory.

Usa il comando chmod per impostare ciascuna di queste autorizzazioni. Per vedere quali autorizzazioni sono state impostate su un file o una directory, possiamo usare ls.

Visualizzazione e comprensione delle autorizzazioni dei file

Possiamo usare l’opzione -l (formato lungo) per fare in modo che ls elenchi i permessi dei file per file e directory.

ls -l

Su ogni riga, il primo carattere identifica il tipo di voce che viene elencato. Se è un trattino (-) è un file. Se è la lettera d è una directory.

I nove caratteri successivi rappresentano le impostazioni per i tre set di autorizzazioni.

I primi tre caratteri mostrano i permessi per l’utente che possiede il file (permessi utente).
I tre caratteri centrali mostrano le autorizzazioni per i membri del gruppo del file (autorizzazioni di gruppo).
Gli ultimi tre caratteri mostrano i permessi per chiunque non rientri nelle prime due categorie (altri permessi).

Ci sono tre caratteri in ogni set di autorizzazioni. I caratteri sono indicatori della presenza o dell’assenza di uno dei permessi. Possono essere un trattino (-) o una lettera. Se il carattere è un trattino, significa che il permesso non è concesso. Se il carattere è una r, w o una x, il permesso è stato concesso.

Le lettere rappresentano:

r: permessi di lettura. Il file può essere aperto e il suo contenuto visualizzato.
w: autorizzazioni di scrittura. Il file può essere modificato, modificato ed eliminato.
x: autorizzazioni di esecuzione. Se il file è uno script o un programma, può essere eseguito (eseguito).

Per esempio:

– significa che non sono state concesse autorizzazioni.
rwx significa che sono state concesse autorizzazioni complete. Gli indicatori di lettura, scrittura ed esecuzione sono tutti presenti.

Nel nostro screenshot, la prima riga inizia con una d. Questa riga fa riferimento a una directory chiamata “archivio”. Il proprietario della directory è “dave” e il nome del gruppo a cui appartiene la directory è anche chiamato “dave”.

I successivi tre caratteri sono le autorizzazioni utente per questa directory. Questi mostrano che il proprietario dispone delle autorizzazioni complete. I caratteri r, w e x sono tutti presenti. Ciò significa che l’utente dave ha i permessi di lettura, scrittura ed esecuzione per quella directory.

Il secondo set di tre caratteri sono i permessi di gruppo, questi sono rx. Questi mostrano che i membri del gruppo dave hanno i permessi di lettura ed esecuzione per questa directory. Ciò significa che possono elencare i file e il loro contenuto nella directory e possono eseguire il cd (eseguire) in quella directory. Non dispongono delle autorizzazioni di scrittura, quindi non possono creare, modificare o eliminare file.

Anche il set finale di tre personaggi è rx. Queste autorizzazioni si applicano alle persone che non sono regolate dai primi due set di autorizzazioni. Queste persone (chiamate “altri”) hanno i permessi di lettura ed esecuzione su questa directory.

Quindi, per riassumere, i membri del gruppo e altri hanno le autorizzazioni di lettura ed esecuzione. Il proprietario, un utente chiamato dave, dispone anche dei permessi di scrittura.

Per tutti gli altri file (a parte il file di script mh.sh) dave e i membri del gruppo dave hanno proprietà di lettura e scrittura sui file e gli altri hanno solo i permessi di lettura.

Per il caso speciale del file di script mh.sh, il proprietario dave ei membri del gruppo dispongono di autorizzazioni di lettura, scrittura ed esecuzione e gli altri hanno solo autorizzazioni di lettura ed esecuzione.

Comprensione della sintassi delle autorizzazioni

Per usare chmod per impostare i permessi, dobbiamo dirgli:

Chi: per chi stiamo impostando le autorizzazioni.
Cosa: che cambiamento stiamo facendo? Stiamo aggiungendo o rimuovendo l’autorizzazione?
Quale: quali autorizzazioni stiamo impostando?

Utilizziamo indicatori per rappresentare questi valori e formiamo brevi “istruzioni di autorizzazione” come u + x, dove “u” significa “utente” (chi), “+” significa aggiungi (cosa) e “x” indica il permesso di esecuzione (quale).

I valori “chi” che possiamo utilizzare sono:

u: Utente, ovvero il proprietario del file.
g: Gruppo, ovvero i membri del gruppo a cui appartiene il file.
o: Altri, ovvero persone non governate dai permessi ue g.
a: All, ovvero tutto quanto sopra.

Se nessuno di questi viene utilizzato, chmod si comporta come se fosse stata utilizzata “a”.

I valori “cosa” che possiamo utilizzare sono:

-: Segno meno. Rimuove l’autorizzazione.
+: Segno più. Concede l’autorizzazione. L’autorizzazione viene aggiunta alle autorizzazioni esistenti. Se desideri avere questa autorizzazione e solo questa serie di autorizzazioni, utilizza l’opzione =, descritta di seguito.
=: Segno di uguale. Imposta un’autorizzazione e rimuovi gli altri.

I “quali” valori che possiamo utilizzare sono:

r: il permesso di lettura.
w: il permesso di scrittura.
x: l’autorizzazione di esecuzione.

Impostazione e modifica delle autorizzazioni

Supponiamo di avere un file in cui tutti hanno le autorizzazioni complete su di esso.

ls -l new_ file.txt

ls -l nuovo_ file.txt in una finestra di terminale

Vogliamo che l’utente dave abbia i permessi di lettura e scrittura e il gruppo e gli altri utenti abbiano solo i permessi di lettura. Possiamo fare usando il seguente comando:

chmod u=rw,og=r new_file.txt

chmod u = rw, og = r new_file.txt in una finestra di terminale

L’uso dell’operatore “=” significa che cancelliamo tutti i permessi esistenti e quindi impostiamo quelli specificati.

controlliamo la nuova autorizzazione su questo file:

ls -l new_file.txt

ls -l nuovo_ file.txt in una finestra di terminale

Le autorizzazioni esistenti sono state rimosse e le nuove autorizzazioni sono state impostate, come previsto.

Che ne dici di aggiungere un’autorizzazione senza rimuovere le impostazioni delle autorizzazioni esistenti? Possiamo farlo facilmente anche noi.

Supponiamo di avere un file di script che abbiamo terminato di modificare. Dobbiamo renderlo eseguibile per tutti gli utenti. Le sue autorizzazioni attuali assomigliano a questo:

ls -l new_script.sh

ls -l new_script.sh in una finestra di terminale

Possiamo aggiungere il permesso di esecuzione per tutti con il seguente comando:

chmod a+x new_script.sh

chmod a + x new_script.sh in una finestra di terminale

Se diamo un’occhiata alle autorizzazioni, vedremo che l’autorizzazione di esecuzione è ora concessa a tutti e le autorizzazioni esistenti sono ancora presenti.

ls -l new_script.sh

ls -l new_script.sh in una finestra di terminale

Avremmo potuto ottenere la stessa cosa senza la “a” nell’istruzione “a + x”. Il seguente comando avrebbe funzionato altrettanto bene.

chmod +x new_script.sh

Impostazione delle autorizzazioni per più file

Possiamo applicare le autorizzazioni a più file contemporaneamente.

Questi sono i file nella directory corrente:

ls -l

ls -l in una finestra di terminale

Supponiamo di voler rimuovere i permessi di scrittura per gli “altri” utenti dai file con estensione “.page”. Possiamo farlo con il seguente comando:

chmod o-r *.page

chmod o * .page in una finestra di terminale

Controlliamo quale effetto ha avuto:

ls -l

ls -l in una finestra di terminale

Come possiamo vedere, il permesso di lettura è stato rimosso dai file “.page” per la categoria “altro” di utenti. Nessun altro file è stato interessato.

Se avessimo voluto includere file nelle sottodirectory, avremmo potuto utilizzare l’opzione -R (ricorsiva).

chmod -R o-r *.page

Abbreviazione numerica

Un altro modo per utilizzare chmod è fornire le autorizzazioni che desideri dare al proprietario, al gruppo e ad altri come un numero di tre cifre. La cifra più a sinistra rappresenta le autorizzazioni per il proprietario. La cifra centrale rappresenta le autorizzazioni per i membri del gruppo. La cifra più a destra rappresenta i permessi per gli altri.

Le cifre che puoi utilizzare e ciò che rappresentano sono elencate qui:

0: (000) Nessun permesso.
1: (001) autorizzazione di esecuzione.
2: (010) Autorizzazione di scrittura.
3: (011) Scrittura ed esecuzione dei permessi.
4: (100) Autorizzazione alla lettura.
5: (101) Lettura ed esecuzione dei permessi.
6: (110) Permessi di lettura e scrittura.
7: (111) Permessi di lettura, scrittura ed esecuzione.

Ciascuno dei tre permessi è rappresentato da uno dei bit nell’equivalente binario del numero decimale. Quindi 5, che è 101 in binario, significa leggere ed eseguire. 2, che è 010 in binario, significherebbe il permesso di scrittura.

Usando questo metodo, imposti i permessi che desideri avere; non aggiungi queste autorizzazioni alle autorizzazioni esistenti. Quindi, se i permessi di lettura e scrittura fossero già presenti, dovresti usare 7 (111) per aggiungere i permessi di esecuzione. L’uso di 1 (001) rimuove i permessi di lettura e scrittura e aggiunge il permesso di esecuzione.

Aggiungiamo nuovamente l’autorizzazione alla lettura sui file “.page” per le altre categorie di utenti. Dobbiamo impostare anche le autorizzazioni utente e gruppo, quindi dobbiamo impostarle su ciò che sono già. Questi utenti dispongono già delle autorizzazioni di lettura e scrittura, ovvero 6 (110). Vogliamo che gli “altri” abbiano i permessi di lettura e, quindi devono essere impostati su 4 (100).

Il seguente comando eseguirà questo:

chmod 664 *.page

chmod 664 * .page in una finestra di terminale

Questo imposta le autorizzazioni che richiediamo per l’utente, i membri del gruppo e altri su ciò di cui abbiamo bisogno. Agli utenti e ai membri del gruppo vengono ripristinate le autorizzazioni che erano già e agli altri viene ripristinata l’autorizzazione di lettura.

ls -l

ls -l in una finestra di terminale

Opzioni avanzate

Se tu leggi la pagina man per chmod vedrai che ci sono alcune opzioni avanzate relative ai bit SETUID e SETGID, e alla cancellazione limitata o bit “sticky”.

Per il 99% dei casi per cui avrai bisogno di chmod, le opzioni descritte qui ti copriranno.