Al prompt dei comadi con il carattere $ si identifica un utente con meno privilegi, mentre con il carattere # si identifica l'utente amministratore chiamato root.
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 |