Comando chmod

()

In Linux, l’accesso ai file è gestito tramite le autorizzazioni, gli attributi e la proprietà dei file.
Ciò garantisce che solo gli utenti nei processi autorizzati possano accedere a file e directory.

Questo tutorial spiega come utilizzare il comando chmod per modificare i permessi di accesso di file e directory.

Autorizzazioni file Linux
Prima di andare oltre, spieghiamo il modello di base dei permessi di Linux.

In Linux, ogni file è associato a un proprietario e un gruppo e assegnato con diritti di accesso permessi per tre diverse classi di utenti:

Il proprietario del file.
I membri del gruppo.
Altri (tutti gli altri).

La proprietà del file può essere modificata utilizzando i comandi chown e chgrp.

Esistono tre tipi di autorizzazioni file che si applicano a ciascuna classe:

Il permesso di lettura.
Il permesso di scrittura.
Il permesso di esecuzione.

Questo concetto consente di specificare quali utenti possono leggere il file, scrivere nel file o eseguire il file.

I permessi dei file possono essere visualizzati utilizzando il ls comando:

ls -l filename.txt

-rw-r–r– 12 linuxize users 12.0K Apr 8 20:51 filename.txt
|[-][-][-]- [——] [—]
| | | | | | |
| | | | | | +———–> 7. Group
| | | | | +——————-> 6. Owner
| | | | +————————–> 5. Alternate Access Method
| | | +—————————-> 4. Others Permissions
| | +——————————-> 3. Group Permissions
| +———————————-> 2. Owner Permissions
+————————————> 1. File Type

Il primo carattere mostra il tipo di file. Può essere un file normale ( -), una directory ( d), un collegamento simbolico ( l) o qualsiasi altro tipo speciale di file.

I successivi nove caratteri rappresentano i permessi del file, tre terzine di tre caratteri ciascuna. La prima tripletta mostra i permessi del proprietario, la seconda i permessi del gruppo e l’ultima tripletta mostra i permessi di tutti gli altri. I permessi possono avere un significato diverso a seconda del tipo di file.

Nell’esempio sopra ( rw-r–r–) significa che il proprietario del file ha i permessi di lettura e scrittura ( rw-), il gruppo e gli altri hanno solo i permessi di lettura ( r–).

Ognuna delle tre triplette di autorizzazioni può essere costituita dai seguenti caratteri e avere effetti diversi, a seconda che siano impostate su un file o su una directory:

Effetto delle autorizzazioni sui file

In Linux, le directory sono tipi speciali di file che contengono altri file e directory.

chmod [OPTIONS] MODE FILE…

Il comando chmod consente di modificare i permessi su un file utilizzando una modalità simbolica o numerica o un file di riferimento. Spiegheremo le modalità in modo più dettagliato più avanti in questo articolo. Il comando può accettare come argomenti uno o più file e/o directory separati da spazi.

Solo root, il proprietario del file o l’utente con privilegi sudo possono modificare i permessi di un file. Prestare particolare attenzione quando si utilizza chmod, soprattutto quando si modificano in modo ricorsivo le autorizzazioni.

Metodo simbolico (testo)
La sintassi del comando chmod quando si utilizza la modalità simbolica ha il seguente formato:

chmod [OPTIONS] [ugoa…][-+=]perms…[,…] FILE…

La prima serie di flag ( [ugoa…]), i flag degli utenti, definisce quali classi di utenti vengono modificate le autorizzazioni al file.

u – Il proprietario del file.
g – Gli utenti che sono membri del gruppo.
o – Tutti gli altri utenti.
a- Tutti gli utenti, identici a ugo.

Se il flag degli utenti viene omesso, quello predefinito è ae le autorizzazioni impostate da umask non sono interessate.

Il secondo set di flag ( [-+=]), i flag di operazione, definisce se i permessi devono essere rimossi, aggiunti o impostati:

  • Rimuove le autorizzazioni specificate.
  • Aggiunge autorizzazioni specificate.
    =Modifica le autorizzazioni correnti nelle autorizzazioni specificate. Se non vengono specificate autorizzazioni dopo il =simbolo, tutte le autorizzazioni della classe utente specificata vengono rimosse.
    Le autorizzazioni ( perms…) possono essere impostate in modo esplicito utilizzando zero o una o più delle seguenti lettere: r, w, x, X, s, e t. Utilizzare una singola lettera dal set u, ge oquando si copiano i permessi da una classe di utenti a un’altra.

Quando si impostano le autorizzazioni per più di una classe utente ( [,…]), utilizzare le virgole (senza spazi) per separare le modalità simboliche.

Di seguito sono riportati alcuni esempi di come utilizzare il chmodcomando in modalità simbolica:

Dai ai membri del gruppo il permesso di leggere il file, ma non di scriverlo ed eseguirlo:

chmod g=r filename
Rimuovere l’autorizzazione di esecuzione per tutti gli utenti:

chmod a-x filename
Rimuovere in modo ripugnante l’autorizzazione di scrittura per altri utenti:

chmod -R o-w dirname
Rimuovere l’autorizzazione di lettura, scrittura ed esecuzione per tutti gli utenti tranne il proprietario del file:

chmod og-rwx filename
La stessa cosa può essere realizzata anche utilizzando il seguente modulo:

chmod og= filename
Dai i permessi di lettura, scrittura ed esecuzione al proprietario del file, leggi i permessi al gruppo del file e nessun permesso a tutti gli altri utenti:

chmod u=rwx,g=r,o= filename
Aggiungi i permessi di proprietario del file ai permessi che hanno i membri del gruppo del file:

chmod g+u filename
Aggiungi un bit appiccicoso a una determinata directory:

chmod o+t dirname
Metodo numerico
La sintassi del chmodcomando quando si utilizza il metodo numerico ha il seguente formato:

chmod [OPTIONS] NUMBER FILE…
Quando si utilizza la modalità numerica, è possibile impostare i permessi per tutte e tre le classi utente (proprietario, gruppo e tutte le altre) contemporaneamente.

Il NUMBER può essere un numero di 3 o 4 cifre.

Quando si utilizza un numero a 3 cifre, la prima cifra rappresenta i permessi del proprietario del file, la seconda il gruppo del file e l’ultima tutti gli altri utenti.

Ogni autorizzazione di scrittura, lettura ed esecuzione ha il seguente valore numerico:

r (leggi) = 4
w (scrivi) = 2
x (esegui) = 1

nessun permesso = 0
Il numero di autorizzazioni di una specifica classe utente è rappresentato dalla somma dei valori delle autorizzazioni per quel gruppo.

Per conoscere i permessi del file in modalità numerica è sufficiente calcolare i totali per tutte le classi di utenti. Ad esempio, per dare i permessi di lettura, scrittura ed esecuzione al proprietario del file, leggere ed eseguire i permessi al gruppo del file e solo leggere i permessi a tutti gli altri utenti, dovresti fare quanto segue:

Proprietario: rwx=4+2+1=7
Gruppo: rx=4+0+1=5
Altri: rx=4+0+0=4

Utilizzando il metodo sopra arriviamo al numero 754, che rappresenta i permessi desiderati.

Per impostare i flag setuid, setgid, e sticky bitutilizzare un numero di quattro cifre.

Quando si utilizza il numero a 4 cifre, la prima cifra ha il seguente significato:

setuid=4
setgid=2
sticky=1

nessuna modifica = 0
Le tre cifre successive hanno lo stesso significato di quando si utilizza un numero a 3 cifre.

Se la prima cifra è 0, può essere omessa e la modalità può essere rappresentata con 3 cifre. La modalità numerica 0755è la stessa di 755.

Per calcolare la modalità numerica puoi anche usare un altro metodo (metodo binario), ma è un po’ più complicato. Sapere come calcolare la modalità numerica utilizzando 4, 2 e 1 è sufficiente per la maggior parte degli utenti.

Puoi controllare i permessi del file nella notazione numerica usando il comando stat:

stat -c “%a” filename
644

Ecco alcuni esempi di come utilizzare il comando chmod in modalità numerica:

Assegna al proprietario del file le autorizzazioni di lettura e scrittura e le autorizzazioni di lettura solo ai membri del gruppo e a tutti gli altri utenti:chmod 644 dirname
Dai al proprietario del file i permessi di lettura, scrittura ed esecuzione, leggi ed esegui i permessi ai membri del gruppo e nessun permesso a tutti gli altri utenti:chmod 750 dirname
Assegna le autorizzazioni di lettura, scrittura ed esecuzione e un bit appiccicoso a una determinata directory: chmod 1777 dirname
Imposta ricorsivamente le autorizzazioni di lettura, scrittura ed esecuzione per il proprietario del file e nessuna autorizzazione per tutti gli altri utenti su una determinata directory: chmod -R 700 dirname
Utilizzo di un file di riferimento
L’ –reference=ref_fileopzione consente di impostare i permessi del file in modo che siano gli stessi del file di riferimento specificato ( ref_file).

chmod –reference=REF_FILE FILE
Ad esempio, il seguente comando assegnerà i permessi del file1tofile2

chmod –reference=file1 file2
Modifica ricorsivamente i permessi del file
Per operare in modo ricorsivo su tutti i file e le directory nella directory data, utilizzare l’ opzione -R( –recursive):

chmod -R MODE DIRECTORY
Ad esempio, per modificare i permessi di tutti i file e le sottodirectory nella /var/wwwdirectory 755, utilizzeresti: chmod -R 755 /var/www


Operare su collegamenti simbolici
I collegamenti simbolici hanno sempre i 777permessi.

Per impostazione predefinita, quando chmodsi modificano le autorizzazioni del collegamento simbolico, verranno modificate le autorizzazioni sul file a cui punta il collegamento.

chmod 755 symlink
È probabile che invece di cambiare la proprietà di destinazione, otterrai un errore “impossibile accedere a ‘link simbolico’: autorizzazione negata”.

L’errore si verifica perché per impostazione predefinita sulla maggior parte delle distribuzioni Linux i collegamenti simbolici sono protetti e non è possibile operare sui file di destinazione. Questa opzione è specificata in /proc/sys/fs/protected_symlinks. 1significa abilitato e 0disabilitato. Si consiglia di non disabilitare la protezione del collegamento simbolico.

Modificare i permessi dei file in blocco
A volte ci sono situazioni in cui è necessario modificare in blocco i permessi di file e directory.

Lo scenario più comune consiste nel modificare in modo ricorsivo le autorizzazioni del file del sito Web 644e le autorizzazioni della directory in 755.

Utilizzando il metodo numerico:

find /var/www/my_website -type d -exec chmod 755 {} \;
find /var/www/my_website -type f -exec chmod 644 {} \;

Utilizzando il metodo simbolico:

find /var/www/my_website -type d -exec chmod u=rwx,go=rx {} \;
find /var/www/my_website -type f -exec chmod u=rw,go=r {} \;

Il find comando cercherà file e directory in /var/www/my_websitee passerà ogni file e directory trovati al chmodcomando per impostare le autorizzazioni.

Conclusione
Il comando chmod modifica i permessi del file. Le autorizzazioni possono essere impostate utilizzando la modalità simbolica o numerica.

/ 5
Grazie per aver votato!

How useful was this post?

Click on a star to rate it!

Average rating / 5. Vote count:

No votes so far! Be the first to rate this post.

As you found this post useful...

Follow us on social media!

We are sorry that this post was not useful for you!

Let us improve this post!

Tell us how we can improve this post?