Comando Chmod in Linux (Permessi dei file)

author
9 minutes, 59 seconds Read

In Linux, l’accesso ai file è gestito attraverso i permessi dei file, gli attributi e la proprietà. Questo assicura che solo gli utenti e i processi autorizzati possano accedere a file e directory.

Questo tutorial copre come usare il comando chmod per cambiare i permessi di accesso a file e directory.

Permessi dei file in Linux #

Prima di andare avanti, spieghiamo il modello base dei permessi di Linux.

In Linux, ogni file è associato con un proprietario e un gruppo e assegnato con diritti di accesso ai 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 cambiata usando i comandi chowne chgrp.

Ci sono tre tipi di permessi di file che si applicano ad ogni classe:

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

Questo concetto ti permette di specificare quali utenti sono autorizzati a leggere il file, scrivere sul file o eseguire il file.

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

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 link simbolico (l), o qualsiasi altro tipo speciale di file.

I nove caratteri successivi rappresentano i permessi del file, tre terzine di tre caratteri ciascuna. La prima terzina mostra i permessi del proprietario, la seconda i permessi del gruppo, e l’ultima terzina 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 permessi può essere costruita con i seguenti caratteri e ha effetti diversi, a seconda che siano impostati su un file o su una directory:

Effetto dei permessi sui file

Permesso Carattere Significato sul file
Lettura - Il file non è leggibile. Non puoi visualizzare il contenuto del file.
r Il file è leggibile.
Scrittura - Il file non può essere cambiato o modificato.
w Il file può essere cambiato o modificato.
Esegui - Il file non può essere eseguito.
x Il file può essere eseguito.
s Se si trova nella terzina user imposta il bit setuid. Se si trova nella tripletta group, imposta il bit setgid. Significa anche che il flag x è impostato.
Quando i flag setuid o setgid sono impostati su un file eseguibile, il file viene eseguito con i privilegi del proprietario del file e/o del gruppo.
S Come s ma il flag x non è impostato. Questo flag è raramente usato sui file.
t Se trovato nella tripletta others imposta il bit sticky.
Significa anche che il flag x è impostato. Questo flag è inutile sui file.
T Come t ma il flag x non è impostato. Questo flag è inutile sui file.

Effetto dei permessi sulle directory (cartelle)

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

Permesso Carattere Significato su Directory
Lettura - Il contenuto della directory non può essere mostrato.
r Il contenuto della directory può essere mostrato.)
Scrivi - Il contenuto della directory non può essere alterato.
w Il contenuto della directory può essere alterato.
(per esempio puoi creare nuovi file, cancellare file ..etc.)
Esegui - La directory non può essere modificata.
x La directory può essere navigata usando cd.
s Se si trova nella terzina user, imposta il bit setuid. Se si trova nella tripletta group imposta il bit setgid. Significa anche che il flag x è impostato. Quando il flag setgid è impostato su una directory i nuovi file creati al suo interno ereditano l’ID del gruppo della directory (GID), invece dell’ID del gruppo primario dell’utente che ha creato il file.
setuid non ha effetto sulle directory.
S Come s ma il flag x non è impostato. Questo flag è inutile sulle directory.
t Se si trova nella terzina others imposta il bit sticky.
Significa anche che il flag x è impostato. Quando il bit appiccicoso è impostato su una directory, solo il proprietario del file, il proprietario della directory o l’utente amministrativo può cancellare o rinominare i file all’interno della directory.
T Come t ma il flag x non è impostato. Questo flag è inutile sulle directory.

Usare chmod #

Il comando chmod ha la seguente forma generale:

chmod MODE FILE...

Il comando chmod vi permette di cambiare i permessi su un file usando sia una modalità simbolica o numerica che un file di riferimento. Spiegheremo le modalità in dettaglio più avanti in questo articolo. Il comando può accettare uno o più file e/o directory separati da uno spazio come argomenti.

Solo root, il proprietario del file o l’utente con privilegi sudo possono cambiare i permessi di un file. Fate molta attenzione quando usate chmod, specialmente quando cambiate ricorsivamente i permessi.

Metodo simbolico (testo) #

La sintassi del comando chmod quando usate il modo simbolico ha il seguente formato:

chmod perms… FILE...

La prima serie di flags (), users flags, definisce quali classi di utenti i permessi al file sono cambiati.

  • 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 utenti è omesso, quello di default è a e i permessi che sono impostati da umaskare non sono interessati.

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

  • - Rimuove i permessi specificati.
  • + Aggiunge i permessi specificati.
  • = Cambia i permessi attuali nei permessi specificati. Se non vengono specificati permessi dopo il simbolo =, tutti i permessi della classe utente specificata vengono rimossi.

I permessi (perms...) possono essere impostati esplicitamente usando zero o una o più delle seguenti lettere: r, w, x, X, s e t. Usate una singola lettera dall’insieme u, g, e o quando copiate i permessi da una a un’altra classe di utenti.

Quando impostate i permessi per più di una classe di utenti (), usate delle virgole (senza spazi) per separare i modi simbolici.

Di seguito alcuni esempi di come usare il comando chmod in modalità simbolica:

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

    chmod g=r filename
  • Rimuovere il permesso di esecuzione per tutti gli utenti:

    chmod a-x filename
  • Rimuovi il permesso di scrittura per gli altri utenti:

    chmod -R o-w dirname
  • Rimuovi il permesso 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 la seguente forma:

    chmod og= filename
  • Dare il permesso di lettura, scrittura ed esecuzione al proprietario del file, il permesso di lettura al gruppo del file e nessun permesso a tutti gli altri utenti:

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

    chmod g+u filename
  • Aggiungi un bit adesivo a una data directory:

    chmod o+t dirname

Metodo numerico #

La sintassi del comando chmod quando si usa il metodo numerico ha il seguente formato:

chmod NUMBER FILE...

Quando si usa il modo numerico, è possibile impostare i permessi per tutte e tre le classi di utenti (proprietario, gruppo e tutti gli altri) allo stesso tempo.

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

Quando viene usato un numero di 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 permesso di scrittura, lettura ed esecuzione ha il seguente valore numerico:

  • r (lettura) = 4
  • w (scrittura) = 2
  • x (esecuzione) = 1
  • nessun permesso = 0

Il numero dei permessi di una specifica classe di utenti è rappresentato dalla somma dei valori dei permessi per quel gruppo.

Per trovare i permessi del file in modo numerico basta calcolare i totali per tutte le classi di utenti. Per esempio, per dare i permessi di lettura, scrittura ed esecuzione al proprietario del file, i permessi di lettura ed esecuzione al gruppo del file e solo i permessi di lettura a tutti gli altri utenti dovrete fare quanto segue:

  • Proprietario: rwx=4+2+1=7
  • Gruppo: r-x=4+0+1=5
  • Altri: r-x=4+0+0=4

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

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

Quando il numero di 4 cifre è usato, la prima cifra ha il seguente significato:

  • setuid=4
  • setgid=2
  • sticky=1
  • no changes = 0

Le tre cifre successive hanno lo stesso significato di quando si usa un numero di 3 cifre.

Se la prima cifra è 0 può essere omessa, e il modo può essere rappresentato con 3 cifre. Il modo numerico 0755 è lo stesso di 755.

Per calcolare il modo numerico si può anche usare un altro metodo (metodo binario), ma è un po’ più complicato. Sapere come calcolare il modo numerico usando 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 usare il comando chmod in modalità numerica:

  • Dare al proprietario del file i permessi di lettura e scrittura e solo i permessi di lettura ai membri del gruppo e a tutti gli altri utenti:

    chmod 644 dirname
  • Dare al proprietario del file i permessi di lettura, scrittura ed esecuzione, leggere ed eseguire ai membri del gruppo e nessun permesso a tutti gli altri utenti:

    chmod 750 dirname
  • Dare i permessi di lettura, scrittura ed esecuzione, e un bit adesivo a una data directory:

    chmod 1777 dirname
  • Impostare ricorsivamente i permessi di lettura, scrittura ed esecuzione al proprietario del file e nessun permesso per tutti gli altri utenti su una data directory:

    chmod -R 700 dirname

Utilizzare un file di riferimento #

L’opzione --reference=ref_file permette di impostare i permessi del file come quelli del file di riferimento specificato (ref_file).

chmod --reference=REF_FILE FILE

Per esempio, il seguente comando assegnerà i permessi del file1 a file2

chmod --reference=file1 file2

Modificare ricorsivamente i permessi del file #

Per operare ricorsivamente su tutti i file e le directory sotto la directory data, usa l’opzione -R (--recursive):

chmod -R MODE DIRECTORY

Per esempio, per cambiare i permessi di tutti i file e le sottodirectory sotto la directory /var/www in 755 si usa:

chmod -R 755 /var/www

Operare sui collegamenti simbolici #

I collegamenti simbolici hanno sempre i permessi 777.

Di default, quando si cambiano i permessi di un symlink, chmod cambierà i permessi sul file a cui punta il link.

chmod 755 symlink

C’è la possibilità che invece di cambiare la proprietà della destinazione, si ottenga un errore “cannot access ‘symlink’: Permission denied”.

L’errore si verifica perché per impostazione predefinita nella 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. 1 significa abilitato e 0 disabilitato. Si raccomanda di non disabilitare la protezione symlink.

Cambiare i permessi dei file in blocco #

A volte ci sono situazioni in cui si ha bisogno di cambiare in blocco i permessi di file e directory.

Lo scenario più comune è quello di cambiare ricorsivamente i permessi del file del sito web a 644 e i permessi della directory a 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 comando find cercherà file e directory sotto /var/www/my_website e passerà ogni file e directory trovati al comando chmod per impostare i permessi.

Conclusione #

Il comando chmod cambia i permessi del file. I permessi possono essere impostati usando la modalità simbolica o numerica.

Per saperne di più su chmod visita la manpage di chmod.

Similar Posts

Lascia un commento

Il tuo indirizzo email non sarà pubblicato.