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/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à 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