Introduzione

In Linux, l'accesso ai file è gestito attraverso i permessi, gli attributi e i proprietari dei file. Ciò garantisce che solo utenti e processi autorizzati possano accedere a file e directory.

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

Permessi dei file

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

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

Il proprietario del file può essere modificata utilizzando i comandi chown e chgrp.

Esistono tre tipi di permessi ai file applicabili a ciascuna classe:

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

Questo concetto consente di specificare a quali utenti è consentito leggere il file, scrivere sul file o eseguire il file.

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

ls -l filename.txt
-rw-r--r-- 12 noviello root 1239291 Aug  8 03:04 filename.log
|[-][-][-]-   [------] [---]
| |  |  | |      |       |
| |  |  | |      |       +-----------> 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 normale file "-", directory "d", un collegamento simbolico "l" o qualsiasi altro tipo speciale di file.

I successivi nove caratteri rappresentano i permessi dei file, tre terzine di tre caratteri ciascuna. La prima terzina mostra i permessi del proprietario, le seconde i permessi  di un 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 permessi di lettura e scrittura rw-, il gruppo e altri hanno solo permessi di lettura r--.

Ognuna delle tre terzine di permessi può avere effetti diversi, a seconda che siano impostati su un file o su una directory.

Utilizzare chmod

La forma generale del comando chmod assume la forma seguente:

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. Il comando può accettare uno o più file e/o directory separati da spazio come argomenti.

Solo root, il proprietario del file o l'utente con i privilegi di sudo può modificare i permessi di un file. Prestare particolare attenzione durante l'utilizzo chmod, soprattutto quando si modificano in modo ricorsivo i permessi.

Metodo simbolico

La sintassi del comando chmod quando si utilizza la modalità simbolica ha il seguente formato:

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

Il primo set di flag [ugoa…], flag utenti, definisce per quali classi utenti vengono modificate i permessi al file.

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

Se il flag degli utenti viene omesso, quello predefinito è "a" e i permessi impostati da umask 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.
  • = Modifica i permessi correnti nei permessi specificati. Se non vengono specificati i permessi dopo il simbolo "=", tutti i permessi della classe utente specificati vengono rimossi.

I permessi perms... possono essere esplicitamente impostati utilizzando zero o uno o più dei seguenti flag: r, w, x, X, s, e t. Utilizzare una sola lettera dal set u, g e o quando si copiano i permessi da una all'altra classe di utenti.

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

Ecco alcuni esempi, concedere ai membri del gruppo i permessi a leggere il file, ma non a scriverlo ed eseguirlo:

chmod g=r filename

Rimuovere i permessi di esecuzione per tutti gli utenti:

chmod a-x filename

Rimuovere repulsivamente i permessi in scrittura per altri utenti:

chmod -R o-w dirname

Rimuovere i permessi di lettura, scrittura ed esecuzione per tutti gli utenti tranne il proprietario del file:

chmod og-rwx filename

Lo stesso risultato si può ottnere anche utilizzando il seguente modulo:

chmod og= filename

Concedere i permessi di lettura, scrittura ed esecuzione al proprietario del file, permessi 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 i permessi che hanno i membri del gruppo del file:

chmod g+u filename

Per aggiungere un sticky bit a una determinata directory:

chmod o+t dirname

Metodo numerico

La sintassi del comando chmod 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 viene utilizzato un numero di 3 cifre, la prima cifra rappresenta i permessi del proprietario del file, la seconda del 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 di permessi di una specifica classe utente è rappresentato dalla somma dei valori dei permessi per quel gruppo.

Per scoprire i permessi del file in modalità numerica, è sufficiente calcolare i totali per tutte le classi di utenti. Ad esempio, per concedere i permessi di lettura, scrittura ed esecuzione al proprietario del file, leggere ed eseguire i permessi per il gruppo del file e leggere i permessi solo per tutti gli altri utenti, procedere come segue:

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

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

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

Quando viene utilizzato il numero di 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 di 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 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

Vediamo alcuni esempi della modalità numerica.

Concedi i permessi di lettura e scrittura al proprietario del file e per i membri del gruppo e tutti gli altri utenti solo i permessi di lettura:

chmod 644 dirname

Dare al proprietario del file i permessi di lettura, scrittura ed esecuzione, permessi di lettura ed esecuzione 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 sticky bit a una determinata directory:

chmod 1777 dirname

Impostare in modo ricorsivo i permessi di lettura, scrittura ed esecuzione per il proprietario del file e nessun permesso per tutti gli altri utenti su una determinata directory:

chmod -R 700 dirname

Utilizzando un file di riferimento

L' opzione --reference=ref_file consente di impostare i permessi del file in modo che siano uguali a quelle del file di riferimento specificato ref_file.

chmod --reference=REF_FILE FILE

Ad esempio, il comando seguente assegnerà i permessi di file1 a file2

chmod --reference=file1 file2

Modifica ricorsiva dei permessi del file

Per operare in modo ricorsivo su tutti i file e le directory nella directory specificata, utilizzare l' opzione -R( --recursive):

chmod -R MODE DIRECTORY

Ad esempio, per modificare i permessi a 755 di tutti i file e le sottodirectory della directory /var/www, utilizzare:

chmod -R 755 /var/www

Operando su collegamenti simbolici

I collegamenti simbolici hanno sempre i permessi 777.

Per impostazione predefinita, quando si modificano i permessi di symlink, chmod cambierà i permessi del file a cui punta il collegamento.

chmod 755 symlink

È probabile che invece di modificare la proprietà di destinazione, verrà visualizzato l'errore “cannot access ‘symlink’: Permission denied” error.

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. Se il parametro è impostato su 1 significa abilitato e 0 disabilitato. Si consiglia di non disabilitare la protezione del collegamento simbolico.

Modifica dei permessi dei file in blocco

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

Lo scenario più comune è modificare in modo ricorsivo i permessi dei file del sito Web 644 e i permessi della directory 755.

Utilizzando il metodo numerico:

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

Utilizzando il metodo simbolico:

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

Il comando find cercherà tutti i file e le directory in /var/www/sito trovati con il comando chmod per impostare i permessi.

Conclusione

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

Per saperne di più sul comando chmod digita il seguente comando:

man chmod