Gestione permessi File e Directory

Permessi base

In Linux la gestione dei permessi di lettura, scrittura ed esecuzione di file/cartelle avviene tramite il comando chmod mentre la modifica dell'utente e del gruppo di appartenenza del file/cartelle tramite il comando chown.


Modifica il nome utente ed il gruppo di un file

# chown utente:gruppo nome_file

Tramite il comando id è possibile elencare le info UID e GID dell'utente:

$ id
uid=1000(frank) gid=100(users) gruppi=100(users)

Quando si crea un nuovo file lo si crea con l'utente e il gruppo di appartenenza dell'utente loggato.

$ touch file.txt

Il comando ls permette la visualizzazione di tutti i file/cartelle, i permessi di lettura, scrittura ed esecuzione e le informazioni relative all'utente/gruppo di appartenenza.

$ ls -l
-rw-rw-r-- 1 frank users 0 7 mag 15:34 file.txt

I permessi file/cartella in Linux: d rwx rwx rwx

-

Indica la cartella con "d"

Indica un collegamento con "l" (L Minuscola)

Indica il file del dispositivo a caratteri con "c"

Indica il file del dispositivo a blocchi con "b"

rwx

Permessi Utente di Lettura, Scrittura ed Esecuzione

rwx

Permessi Gruppo di Lettura, Scrittura ed Esecuzione

rwx

Permessi Other (Altri) di Lettura, Scrittura ed Esecuzione

frank

Nome utente proprietario del file

users

Nome del gruppo di appartenenza dell'utente


Il comando chmod cambia i permessi di lettura, scrittura ed esecuzione per i file/cartelle attraverso due modalità di utilizzo:

  • rappresentazione simbolica
  • rappresentazione ottale

Rappresentazione simbolica

r read = permesso di lettura file/cartelle
w write = permesso di scrittura file/cartelle
x execute = permesso di esecuzione dei file ed accesso per le cartelle
u user = utente proprietario dei file/cartelle
g group = gruppo di appartenenza dell'utente proprietario dei file/cartelle
o other = tutti gli altri utenti non appartenenti al gruppo dell'utente proprietario dei file/cartelle
a all = user + group + other
s setuid e setgid
t sticky bit

Esempio 1. Al file.txt togliere i permessi di scrittura all'utente (u), al gruppo dell'utente (g) e agli altri (o):

$ chmod ugo-w file.txt

rappresentabile anche in questo modo (a=ugo):

$ chmod a-w file.txt

Esempio 2. Al file.txt togliere i permessi di lettura al gruppo dell'utente (g):

$ chmod g-r file.txt


Rappresentazione ottale

E' possibile modificare i permessi di file/cartelle attraverso l'utilizzo della denominazione ottale:

r = 4 read = permesso di lettura file/cartelle
w = 2 write = permesso di scrittura file/cartelle
x = 1 execute = permesso di esecuzione dei file ed accesso per le cartelle

La somma dei tre numeri permette la combinazione dei permessi in lettura, scrittura ed esecuzione dell'utente, del gruppo utente e degli altri.


Esempio 1. Concedere i permessi al file.txt:

  • all'utente i permessi in lettura, scrittura ed esecuzione: 4+2+1=7
  • al gruppo utente i permessi in lettura ed esecuzione: 4+1=5
  • agli altri nessun permesso: 0
$ ls -l
$ -rwxrwxrwx 1 utente gruppo 0 giu 10 08:58 file.txt
$ chmod 0750 file.txt
$ ls -l
$ -rwxr-x--- 1 utente gruppo 0 giu 10 08:58 file.txt


Permessi speciali o bit speciali

Attraverso la rappresentazione numerica ottale:

setuid = 4
setgid = 2
sticky bit = 1

Attraverso la rappresentazione simbolica:

-rwsr-xr-x 1 root root 157192 feb 2 2020 /usr/bin/apt s = rappresentazione del setuid
-rwxr-sr-x 1 root tty 34896 gen 10 2019 /usr/bin/wall s = rappresentazione del setgid
drwxr-xr-t 2 frank users 4096 dic 31 10:07 cartella_1 sticky bit

SETUID

L’esecuzione del file avviene con i permessi dell’utente proprietario del file e non con i permessi dell’utente che lo ha eseguito (read + write + execute con setuid).

E’ applicabile solo ai file eseguibili e non agli script.

# touch file_1
# ls -l file_1
-rw-r--r-- 1 root root 0 dic 31 18:07 file_1
# chmod 4755 file_1
# ls -l
-rwsr-xr-x 1 root root 0 dic 31 18:07 file_1
oppure
# chmod u+s file_1
# ls -l
-rwSr-xr-x 2 utente gruppo 4096 giu 10 18:35 file_1
# chmod u+x file_1
# ls -l
-rwsr-xr-x 2 utente gruppo 4096 giu 10 18:35 file_1

SETGID

Attivato sui file: qualsiasi utente che eseguirà questo programma lo eseguirà con i permessi del gruppo proprietario del file e non con i permessi del gruppo dell'utente che l'ha eseguito.

# touch file_1
# ls -l file_1
-rw-r--r-- 1 root root 0 dic 31 18:07 file_1
# chmod 2775 file_1
# ls -l
-rwxr-Sr-x 1 root root 0 dic 31 18:07 file_1
oppure
# chmod g+s file_1
# ls -l
-rwxrwSr-x 2 utente gruppo 4096 giu 10 18:35 file_1
# chmod u+x file_1
# ls -l
-rwxrwsr-x 2 utente gruppo 4096 giu 10 18:35 file_1

Attivato sulle directory: i file creati all'interno della directory avranno come gruppo non il gruppo degli utenti dei file creati, bensì il gruppo dell'utente al quale è stato assegnato alla cartella. Questo è spesso utilizzato per facilitare la condivisione dei file.

Quindi, qualsiasi utente facente parte di un gruppo utente diverso da users che creerà un file nella cartella dir_1 avrà come gruppo utente: users.

# mkdir dir_1
# chown frank:users dir_1
# ls -l
drwxr-xr-x 2 frank users 4096 gen 2 20:02 dir_1
# chmod 2775 dir_1
# ls -l
drwxrwsr-x 2 frank users 4096 gen 2 22:00 dir_1
oppure
# chmod g+sw dir_1
# ls -l
drwxrwsr-x 2 frank users 4096 gen 2 22:01 dir_1


STICKY BIT

Tutto ciò che contiene la cartella con lo sticky bit attivo è protetta da eliminazione da tutti gli utenti che non sono direttamente proprietari del file, cioè solo l'utente proprietario del file oppure l'utente root possono rimuoverlo, nè gli utenti appartenenti allo stesso gruppo nè gli altri utenti possono rimuovere il file ma possono modificarlo se hanno il permesso in scrittura.

$ mkdir dir_1
$ chmod 1775 dir_1
oppure
$ chmod +t dir_1
$ chmod g+w dir_1
$ ls -l
drwxrwxr-t 2 frank users 4096 gen 3 23:58 dir_1
$ cd dir_1
$ touch file_1.txt
$ ls -l
-rw-r--r-- 1 frank users 0 gen 4 00:00 file_1.txt
$ chmod 777 file_1
$ ls -l
-rwxrwxrwx 1 frank users 0 gen 4 00:28 file_1

Loggandosi con un altro utente appartenete al gruppo users non è possibile rimuovere i file poichè alla cartella dir_1 è stato applicato lo stickybit.


$ su luca
Password:
$ ls -l
drwxrwxr-t 2 frank users 4096 gen 3 23:58 dir_1
$ cd dir_1
$ ls -l
-rwxrwxrwx 1 frank users 0 gen 4 00:28 file_1
$ rm file_1.txt
rm: impossibile rimuovere 'file_1': Operazione non permessa