Nei sistemi UNIX e UNIX-like, l'accesso ai file e alle cartelle è dettato dai permessi. Essi possono essere assegnati ad utenti specifici o a gruppi di utenti.
I permessi seguono due principi basilari:
- Chi può assegnare i permessi per un file, è l'autore del file stesso.
- I permessi sui file di sistema o altri file li concede l'utente Root.
Se si usa il comando ls senza alcun parametro, il risultato sarà un elenco di nomi ordinato alfabeticamente.
$ ls
bin cache dev home lib media opt root sbin srv tmp var boot data etc init lib64 mnt proc run snap sys usr $
Per visualizzare un elenco di file con i relativi permessi, si deve usare il parametro "-l
" (lista):
$ ls -l
drwxr-xr-x 1 root root 4096 giu 22 22:18 bin
drwxr-xr-x 1 root root 4096 mar 30 2017 boot
drwxrwx--- 1 root root 4096 gen 1 1970 cache
[...]
drwxrwxrwt 1 root root 4096 ott 23 17:45 tmp
drwxr-xr-x 1 root root 4096 mar 30 2017 usr
drwxr-xr-x 1 root root 4096 mar 30 2017 var
$
Come si può evincere dalla prima colonna dei risultati, ci saranno 10 caratteri che ci diranno molto sulla natura dei file/cartelle.
Per iniziare, tutte le cartelle vengono segnate con una d
. Tutti i file hanno un segno -
e tutti i collegamenti simbolici hanno un l
.
Seguono i 9 caratteri dei permessi, separati a gruppi di tre, che rappresentano i permessi rispettivamente i permessi per l'utente creatore del file, per il gruppo di appartenenza dell'autore e per tutti gli altri utenti o gruppi.
-rwx------ file.sh
- Permessi concessi solo all'autore del file----rwx--- file.sh
- Permessi concessi solo al gruppo di appartenenza dell'autore del file-------rwx file.sh
- Permessi concessi a chiunque altro nel sistema
I caratteri dei permessi UNIX consentono, rispettivamente su un file o ad una cartella, di:
- Read
- Leggere il file
- Elencare le sottocartelle di una cartella
- Write
- Modificare il contenuto di un file
- Aggiungere o rimuovere file dalla cartella (citando Wikipedia, si noti che per cancellare un file si deve avere il permesso di scrittura sulla cartella, non sul file)
- eXecution
- Eseguire un file
- Entrare in una cartella, ma non di vederne il contenuto
-
- Permesso assente
Si noti che i collegamenti simbolici non hanno bisogno di permessi, in quanto ereditano i permessi del file/cartella originale
La rappresentazione ottale
I permessi UNIX possono essere anche espressi con una base 8, invece che con le lettere A, W e X.
I valori rispettivi dei permessi sono i seguenti:
Valore ottale | Valore alfabetico | Permesso |
---|---|---|
0 | --- | nessuno |
1 | --x | esecuzione |
2 | -w- | scrittura |
3 | -wx | scrittura ed esecuzione |
4 | r-- | lettura |
5 | r-x | lettura ed esecuzione |
6 | rw- | lettura e scrittura |
7 | rwx | lettura, scrittura ed esecuzione |
Un altro modo per capire come sono rappresentati i permessi, è ricordare che a READ, WRITE e EXECUTE sono assegnati 3 numeri:
- Read - 4
- Write - 2
- eXecute - 1
Se si volesse rappresentare un file con permessi di lettura e scrittura, basterebbe sommare 4 e 2, per ottenere 6, che è la rappresentazione nella tabella soprastante del permesso rw-
.
Se si volesse rappresentare un file con permessi di lettura ed esecuzione, basterebbe sommare 4 ed 1, ottenendo così 5, che è la rappresentazione nella tabella soprastante del permesso r-x.
Per cambiare o rimuovere permessi
I comandi che permettono di gestire i permessi su file e cartelle sono i seguenti:
chmod
- Cambiare i permessi ad un file o ad una cartellachown
- Cambiare il proprietario di un file o di una cartellachgrp
- Cambiare il gruppo di appartenenza di un file o di una cartella.
Cambiare un gruppo di appartenenza non influisce sul proprietario del file/cartella!
Le sintassi dei comandi sono varie, non entrerò nello specifico di tutte le sintassi.
Qui di seguito, una situazione iniziale di files. Tutti e tre sono stati creati con permessi di lettura e scrittura da parte del proprietario, mentre per il gruppo e per tutti gli altri, solo i permessi di lettura.
$ ls -l
-rw-r--r-- 1 root root 0 ott 23 20:44 file1
-rw-r--r-- 1 root root 0 ott 23 20:44 file2
-rw-r--r-- 1 root root 0 ott 23 20:44 file3
Per aggiungere un permesso (in questo caso, di esecuzione) ad un file/cartella si usa la sintassi:
$ chmod +x file1
$ ls -l
-rwxr-xr-x 1 root root 0 ott 23 20:44 file1
-rw-r--r-- 1 root root 0 ott 23 20:44 file2
-rw-r--r-- 1 root root 0 ott 23 20:44 file3
Da notare che il semplice +x
aggiunge il permesso a tutti i criteri di appartenenza.
Se si volesse aggiungere solo al criterio "gruppo" il permesso di esecuzione, si dovrebbe usare la sintassi:
$ chmod g=+x file1
$ ls -l
-rw-r-xr-- 1 root root 0 ott 23 20:44 file1
-rw-r--r-- 1 root root 0 ott 23 20:44 file2
-rw-r--r-- 1 root root 0 ott 23 20:44 file3
Dove il parametro g=
sta a significare "solo per i gruppi".
Allo stesso modo si possono usare i parametri per le appartenenze:
a=
- per tutti (proprietario, gruppi ed altri)u=
- per l'utente proprietariog=
- per il gruppo di appartenenzao=
- per tutti gli altri
Allo stesso modo, per rimuovere un permesso da un file/cartella, si cambia il simbolo del comando da "-" a "+".
$ ls -l
-rwxrwxrwx 1 root root 0 ott 23 20:44 file1
-rw-r--r-- 1 root root 0 ott 23 20:44 file2
-rw-r--r-- 1 root root 0 ott 23 20:44 file3
$ chmod -x file1
$ ls -l
-rw-rw-rw- 1 root root 0 ott 23 20:44 file1
-rw-r--r-- 1 root root 0 ott 23 20:44 file2
-rw-r--r-- 1 root root 0 ott 23 20:44 file3