In Linux, l'accesso ai file è gestito tramite le autorizzazioni, gli attributi e la proprietà dei file. Ciò garantisce che solo gli utenti e i processi autorizzati possano accedere a file e directory.
Questo tutorial spiega come usare chmod
comando per modificare i permessi di accesso a file e directory.
Autorizzazioni file Linux #
Prima di andare oltre, spieghiamo il modello di autorizzazioni di base di Linux.
In Linux, ogni file è associato a un proprietario e a un gruppo e gli vengono assegnati diritti di accesso autorizzati 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 il chown
e chgrp
comandi.
Esistono tre tipi di autorizzazioni per i file che si applicano 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 nel file o eseguire il file.
I permessi dei file possono essere visualizzati usando 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 (-
), directory (d
), un collegamento simbolico(l
), o qualsiasi altro tipo speciale di file.
I successivi nove caratteri rappresentano i permessi del file, tre triplette di tre caratteri ciascuna. La prima tripletta mostra le autorizzazioni del proprietario, la seconda le autorizzazioni di gruppo e l'ultima tripletta mostra le autorizzazioni 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 altri hanno solo i permessi di lettura (r--
).
Ciascuna delle tre triplette di autorizzazioni può essere costituita dai seguenti caratteri e avere effetti diversi, a seconda che sia impostata su un file o su una directory:
Effetto delle autorizzazioni sui file
Autorizzazione | Personaggio | Significato su file |
---|---|---|
Leggi | - | Il file non è leggibile. Non è possibile visualizzare il contenuto del file. |
r | Il file è leggibile. | |
Scrivi | - | Il file non può essere modificato 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 trovato in user tripletta imposta il setuid po. Se trovato nel group tripletta, imposta il setgid po. Significa anche che x flag è impostato.Quando il setuid o setgid i flag sono impostati su un file eseguibile, il file viene eseguito con il proprietario del file e/o i privilegi di gruppo. | |
S | Come s ma il x il flag non è impostato. Questo flag è usato raramente sui file. | |
t | Se trovato negli others tripletta imposta il sticky bit.Significa anche che x bandiera è impostata. Questo flag è inutile sui file. | |
T | Come t ma il x il flag non è impostato. Questo flag è inutile sui file. |
Effetto delle autorizzazioni sulle directory (cartelle)
In Linux, le directory sono tipi speciali di file che contengono altri file e directory.
Autorizzazione | Personaggio | Significato su Directory |
---|---|---|
Leggi | - | Il contenuto della directory non può essere mostrato. |
r | È possibile visualizzare il contenuto della directory. (ad es. È possibile elencare i file all'interno della directory con ls .) | |
Scrivi | - | Il contenuto della directory non può essere modificato. |
w | Il contenuto della directory può essere modificato. (ad es. puoi creare nuovi file, eliminare file...ecc.) | |
Esegui | - | Non è possibile modificare la directory in. |
x | La directory può essere navigata usando cd . | |
s | Se trovato in user tripletta, imposta il setuid po. Se trovato nel group tripletta imposta il setgid po. Significa anche che x bandiera è impostata. Quando il setgid flag è impostato su una directory i nuovi file creati al suo interno ereditano l'ID del gruppo di directory (GID), anziché l'ID del gruppo primario dell'utente che ha creato il file.setuid non ha effetto sulle directory. | |
S | Come s ma il x il flag non è impostato. Questo flag è inutile nelle directory. | |
t | Se trovato negli others tripletta imposta il sticky bit.Significa anche che x bandiera è impostata. Quando lo sticky bit è impostato su una directory, solo il proprietario del file, il proprietario della directory o l'utente amministrativo può eliminare o rinominare i file all'interno della directory. | |
T | Come t ma il x il flag non è impostato. Questo flag è inutile nelle directory. |
Utilizzo di chmod
#
Il chmod
comando assume la seguente forma generale:
chmod [OPTIONS] MODE FILE...
Il chmod
comando 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 uno o più file e/o directory separati da uno spazio come argomenti.
Solo il root, il proprietario del file o l'utente con privilegi sudo possono modificare i permessi di un file. Fai molta attenzione quando usi chmod
, soprattutto quando si modificano ricorsivamente le autorizzazioni.
Metodo simbolico (testo) #
La sintassi di chmod
comando quando si utilizza la modalità simbolica ha il seguente formato:
chmod [OPTIONS] [ugoa…][-+=]perms…[,…] FILE...
Il primo set di flag ([ugoa…]
), flag degli utenti, definisce quali classi di utenti vengono modificate le autorizzazioni per il file.
u
- Il proprietario del file.g
- Gli utenti che sono membri del gruppo.o
- Tutti gli altri utenti.a
- Tutti gli utenti, identici augo
.
Se il flag degli utenti viene omesso, quello predefinito è a
e le autorizzazioni impostate da umaska 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 con le autorizzazioni specificate. Se non vengono specificate autorizzazioni dopo=
simbolo, tutte le autorizzazioni della classe utente specificata vengono rimosse.
I permessi (perms...
) può essere impostato esplicitamente utilizzando zero o una o più delle seguenti lettere:r
, w
, x
, X
, s
e t
. Usa una singola lettera dell'insieme u
, g
e o
quando si copiano i permessi da una classe utente a un'altra.
Quando si impostano i permessi per più di una classe utente ([,…]
), usa le virgole (senza spazi) per separare le modalità simboliche.
Di seguito sono riportati alcuni esempi di come utilizzare il chmod
comando in modalità simbolica:
-
Concedi 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
-
Rimuovi ricorsivamente 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 eseguita anche utilizzando il seguente modulo:
chmod og= filename
-
Concedi autorizzazioni di lettura, scrittura ed esecuzione al proprietario del file, autorizzazioni di lettura al gruppo del file e nessuna autorizzazione a tutti gli altri utenti:
chmod u=rwx,g=r,o= filename
-
Aggiungi le autorizzazioni del proprietario del file alle autorizzazioni 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 di chmod
comando 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 il gruppo del file e l'ultima tutti gli altri utenti.
Ciascuna autorizzazione di scrittura, lettura ed esecuzione ha il seguente valore numerico:
r
(leggi) =4w
(scrivere) =2x
(esegui) =1- nessuna autorizzazione =0
Il numero delle 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 concedere autorizzazioni di lettura, scrittura ed esecuzione al proprietario del file, autorizzazioni di lettura ed esecuzione al gruppo del file e autorizzazioni di lettura solo a tutti gli altri utenti, procedere come segue:
- Proprietario:rwx=4+2+1=7
- Gruppo:r-x=4+0+1=5
- Altri:r-x=4+0+0=4
Usando il metodo sopra arriviamo al numero 754
, che rappresenta le autorizzazioni desiderate.
Per impostare il setuid
, setgid
e sticky bit
i flag usano un numero a quattro cifre.
Quando viene utilizzato il numero a 4 cifre, la prima cifra ha il seguente significato:
- setuid=4
- setgid=2
- appiccicoso=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
è lo stesso 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 stat
comando:
stat -c "%a" filename
644
Ecco alcuni esempi di come usare chmod
comando in modalità numerica:
-
Concedi al proprietario del file autorizzazioni di lettura e scrittura e autorizzazioni di lettura solo ai membri del gruppo e a tutti gli altri utenti:
chmod 644 dirname
-
Concedi al proprietario del file autorizzazioni di lettura, scrittura ed esecuzione, autorizzazioni di lettura ed esecuzione ai membri del gruppo e nessuna autorizzazione a tutti gli altri utenti:
chmod 750 dirname
-
Concedi permessi 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 #
Il --reference=ref_file
l'opzione consente di impostare i permessi del file in modo che corrispondano a quelli del file di riferimento specificato (ref_file
).
chmod --reference=REF_FILE FILE
Ad esempio, il comando seguente assegnerà i permessi del file1
a file2
chmod --reference=file1 file2
Modifica ricorsivamente le autorizzazioni del file #
Per operare ricorsivamente su tutti i file e le directory nella directory data, usa il -R
(--recursive
) opzione:
chmod -R MODE DIRECTORY
Ad esempio, per modificare i permessi di tutti i file e le sottodirectory in /var/www
directory in 755
useresti:
chmod -R 755 /var/www
Operazione su collegamenti simbolici #
I link simbolici hanno sempre 777
autorizzazioni.
Per impostazione predefinita, quando si modificano i permessi del collegamento simbolico, chmod
cambierà le autorizzazioni sul file a cui punta il collegamento.
chmod 755 symlink
È probabile che invece di modificare la proprietà del target, visualizzerai un errore "impossibile accedere al 'collegamento 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
. 1
significa abilitato e 0
Disabilitato. Si consiglia di non disabilitare la protezione del collegamento simbolico.
Modifica delle autorizzazioni 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 ricorsivamente le autorizzazioni del file del sito Web in 644
e le autorizzazioni della directory per 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_website
e passa ogni file e directory trovati a chmod
comando per impostare i permessi.
Conclusione #
Il chmod
comando cambia i permessi del file. I permessi possono essere impostati utilizzando la modalità simbolica o numerica.
Per saperne di più su chmod
visita la manpage di chmod.
Se hai domande o feedback, sentiti libero di lasciare un commento.