Introduzione

Se stai tentando di risolvere un problema di autorizzazione con il tuo Server Web, prima di modificare ricorsivamente i permessi a chmod 777 della directory web assicurati di capire cosa fa chmod -R 777 e perché non dovresti mai impostare le autorizzazioni su 777.

Questo articolo spiega il modello di base delle autorizzazioni Linux e il significato dei numeri corrispondenti alle autorizzazioni.

Comprensione dei permessi dei file Linux

In Linux, l'accesso ai file è controllato dal sistema operativo mediante autorizzazioni, attributi e proprietà dei file. La comprensione del modello delle autorizzazioni del file system Linux consente di limitare l'accesso a file e directory solo agli utenti e ai processi autorizzati e rendere il sistema più sicuro.

Ogni file è di proprietà di un determinato utente e un gruppo e assegnato con diritti di accesso di autorizzazione per tre diverse classi di utenti:

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

Esistono tre tipi di autorizzazioni di file che si applicano a ciascuna classe utente e consentono di specificare quali utenti sono autorizzati a leggere il file, scrivere sul file o eseguire il file. Gli stessi attributi di autorizzazione si applicano sia ai file che alle directory con un significato diverso:

  • Il permesso di lettura.
  • Il file è leggibile. Ad esempio, quando è impostata l'autorizzazione di lettura, l'utente può aprire il file in un editor di testo.
  • I contenuti della directory possono essere visualizzati. L'utente può elencare i file all'interno della directory con il comando ls.
  • Il permesso di scrivere.
  • Il file può essere cambiato o modificato.
  • Il contenuto della directory può essere modificato. L'utente può creare nuovi file, eliminare file esistenti, spostare file, rinominare file ..etc.
  • Il permesso di esecuzione.
  • Il file può essere eseguito.
  • La directory può essere inserita usando il comando cd.

Le autorizzazioni per i file possono essere visualizzate utilizzando il comando ls. Ecco un esempio:

ls -l filename.txt
-rw-r--r-- 12 noviello users 11.0K Apr  7 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 normale file (-), directory (d), un collegamento simbolico (l) o qualsiasi altro tipo speciale di file.

I successivi nove caratteri rappresentano le autorizzazioni del file, tre terzine di tre caratteri ciascuna. La prima terzina mostra le autorizzazioni del proprietario, le seconde autorizzazioni di un gruppo e l'ultima terzina mostra le autorizzazioni di tutti gli altri.

Numero di autorizzazione

L'autorizzazione del file può essere rappresentata in un formato numerico o simbolico. In questo articolo, ci concentreremo sul formato numerico.

Il numero di autorizzazione può essere composto da tre o quattro cifre, che vanno da 0 a 7.

Quando si utilizza un numero di 3 cifre, la prima cifra rappresenta le autorizzazioni del proprietario del file, la seconda il gruppo del file e l'ultima tutti gli altri utenti.

Le autorizzazioni di scrittura, lettura ed esecuzione hanno il seguente valore numerico:

  • r (leggi) = 4
  • w (scrivi) = 2
  • x (esegui) = 1
  • nessuna autorizzazione = 0

La cifra delle autorizzazioni di una specifica classe utente è la somma dei valori delle autorizzazioni per quella classe.

Ogni cifra del numero di autorizzazioni può essere una somma di 4, 2, 1 e 0:

  • 0 (0 + 0 + 0) - Nessuna autorizzazione.
  • 1 (0 + 0 + 1) - Esegue solo l'autorizzazione.
  • 2 (0 + 2 + 0) - Solo permesso di scrittura.
  • 3 (0 + 2 + 1) - Scrive ed esegue le autorizzazioni.
  • 4 (4 + 0 + 0) - Solo permesso di lettura.
  • 5 (4 + 0 + 1) - Lettura ed esecuzione dell'autorizzazione.
  • 6 (4 + 2 + 0) - Autorizzazioni di lettura e scrittura.
  • 7 (4 + 2 + 1) - Lettura, scrittura ed esecuzione dell'autorizzazione.

Ad esempio, se il numero di autorizzazione è impostato su 750 significa che il proprietario del file ha le autorizzazioni di lettura, scrittura ed esecuzione, il gruppo di file ha autorizzazioni di lettura ed esecuzione e altri utenti non hanno autorizzazioni:

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

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 successive tre cifre 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 visualizzare le autorizzazioni del file nella notazione numerica (ottale), utilizzare il comando stat:

stat -c "%a" filename
644

Non usare mai chmod 777

L'impostazione delle autorizzazioni 777 su un file o una directory significa che sarà leggibile, scrivibile ed eseguibile da tutti gli utenti e potrebbe comportare un enorme rischio per la sicurezza.

Ad esempio, se si modificano in modo ricorsivo le autorizzazioni di tutti i file e le sottodirectory della directory /var/www in 777, qualsiasi utente sul sistema sarà in grado di creare, eliminare o modificare i file in quella directory.

Se si verificano problemi di autorizzazione con il server Web, invece di impostare in modo ricorsivo l'autorizzazione 777, modificare la proprietà del file per l'utente che esegue l'applicazione e impostare le autorizzazioni del file su 644 e le autorizzazioni della directory su 755.

La proprietà del file può essere modificata utilizzando il comando chown e le autorizzazioni con il comando chmod.

Supponiamo che tu abbia un'applicazione PHP sul tuo server in esecuzione come utente "noviello". Per impostare le autorizzazioni corrette dovresti eseguire:

chown -R noviello: /var/www

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

Conclusione

Se gestisci un sistema Linux, è fondamentale sapere come funzionano le autorizzazioni di Linux.

Non si devono mai impostare autorizzazioni rwxrwxrwx (777) per file e directory. 777 significa che chiunque può fare qualsiasi cosa con quei file.