Gestire i permessi su Linux

Se non avete mai lavorato con i permessi vi consiglio di leggere prima il mio articolo: Comprendiamo la gestione dei permessi su Linux.

Se avete sbirciato il mio articolo precedente avrete capito che su Linux abbiamo la possibilità di configurare i permessi per utenti specifici, per gruppi di utenti oppure permessi globali.


Visualizzare i permessi

I permessi possono essere visualizzati utilizzando il comando ls -l or ls -la or ls -lha . Consiglio di utilizzare il parametro –help per capire cosa significano i diversi parametri.

Di seguito un esempio del comando

ls -lha

In questa visualizzazione possiamo notare che la prima stringa di ogni riga è composta da una struttura di caratteri fissi. Tipo:

-rwxr-xr-x

Cosa significano questi caratteri?

Il primo carattere (rwxr-xr-x) indica il tipo di oggetto e può assumere i seguenti valori:

CarattereSignificato
File
dCartella
lCollegamento simbolico
bDispositivo a blocchi
cDispositivo a caratteri
pNamed pipe
sSocket

Questo primo carattere è seguito da tre gruppi di tre caratteri ciascuno (-rwxr-xr-x).

Questi caratteri indicano il livello di permesso di accesso:

CarattereSignificatoValore numerico
Nessun permesso assegnato0
rPermesso di accesso in Lettura4
wPermesso di accesso in Scrittura2
xPermesso di Esecuzione1

I tre gruppi indicano a quali tipologie di utenti si applicano i permessi riportati

Il primo gruppo indica i permessi associati al proprietario del file

Ricapitolando

La stringa -rwxr-xr-x significa:

TipoProprietarioGruppoAltri
rwxr-xr-x
Filelettura, scrittura, esecuzionelettura, esecuzionelettura, esecuzione

Modificare i permessi di file e cartelle

Abbiamo appena finito di capire come verificare lo stato dei permessi sul nostro sistema, vediamo adesso come modificarli.

Assegnazione esplicita dei permessi

Il comando chmod utilizzato in forma esplicita ci permette di gestire i permessi in forma testuale. I permessi saranno assegnati a una specifica classe:

LetteraSignificato
uProprietario
gGruppo
oAltri
aTutte le classi

Con un particolare livello che potrà essere di lettura (r), scrittura (w) ed esecuzione (x) sia su file e che su cartelle come spiegato nel paragrafo precedente.

Oltre a questi parametri basilari ci sono dei caratteri di assegnazione:

CarattereSignificato
=Assegna esattamente il permesso specificato
+Aggiungi il permesso specificato ai permessi già esistenti
Rimuovi il permesso specificato dai permessi già esistenti

Vediamo alcuni esempi.


Esempi

Immaginiamo di lavorare sul file /percorso/file.txt

Aggiungere permesso lettura a tutti
chmod a+r /percorso/file.txt
Rimuovere permesso lettura al gruppo
chmod g-r /percorso/file.txt
Aggiungere permesso scrittura al proprietario
chmod u+w /percorso/file.txt
Rimuovere permesso scrittura ad “altri”
chmod o-w /percorso/file.txt
Aggiungere permesso esecuzione a tutti
chmod a+x /percorso/file.txt
Rimuovere permesso esecuzione a “altri”
chmod o-x /percorso/file.txt
Aggiungere e rimuovere permessi contemporaneamente al gruppo
chmod g+rw-x /percorso/file.txt

Assegnazione esplicita ricorsiva

Applicare permesso a tutti i sotto-elementi di una cartella

Per applicare il cambio permessi a tutti i file e le cartelle all’interno di una specifica cartella, basta applicare il parametro -R ai quelli appena spiegati:

chmod u+r -R /percorso

Assegnazione dei permessi in forma binaria

I permessi possono essere assegnati in maniera ancora più veloce utilizzando i numeri con il seguente significato:

NumeroValore esplicitoSpiegazione
0Nessun permesso
1–xEsecuzione
2-w-Scrittura
3-wxScrittura ed Esecuzione
4r–Lettura
5r-xLettura ed Esecuzione
6rw-Lettura e Scrittura
7rwxTutti i permessi

I permessi numerici si assegnano nel seguente modo:

chmod 764 nomecartella

o nella forma ricorsiva:

chmod 764 -R nomecartella

I numeri, in ordine, rappresentano i diversi livelli di autorizzazione per proprietario, gruppo e altri utenti:

ugo
ProprietarioGruppoAltri utenti

L’esempio (764) riportato quindi assegna i seguenti permessi:

ugo
ProprietarioGruppoAltri utenti
764
rwxrwr

Assegnare permessi di un’altra classe

L’assegnazione può essere effettuata specificando i permessi in forma explicita, come spiegato prima oppure è possibile copiarli da un’altra classe.

In questo caso basta specificare le due classi mettendo il simbolo di uguale in mezzo.

Esempio

Possiamo trovarci nel caso in cui si voglia assegnare al gruppo di appartenenza gli stessi permessi del proprietario

chmod g=u /percorso/file.txt

Modificare assegnazione di proprietari e gruppi

Il comando chown ci permette di assergnare il proprietario ad un file o una cartella.

chown nomeutente:nomegruppo /home/name/directoryname

Se vogliamo assegare il mermesso alla cartella e a tutto il suo contenuto aggiungiamo il parametro -R:

chown -R nomeutente:nomegruppo /home/name/directoryname

Elevare i nostri permessi

Spesso ci ritroveremo a dover lanciare comandi con permessi elevati rispetto all’utente che utilizziamo normalmente. Dovremmo quindi effettuare un login come root sulla shell sulla quale stiamo lavorando, eseguire il comando ed effettuare un logout. Per velocizzare questa procedura la maggior parte delle distribuzioni mettono a disposizione delle scorciatoie come sudo (Super User DO).

A seconda del sistema operativo utilizzato il comando può essere sudo oppure su.

Se siamo affezionati al comando sudo, quando questo non è disponibile, è possibile installarlo.

sudo

La comodità del comando sudo sta nel fatto che nella stessa shell posso eseguire diversi comandi con diversi privilegi a seconda che io scriva sudo prima del comando o no.

teodoro@computer: sudo comando
su

Una volta elevati i miei permessi con il comando su –, dovrò digitare exit per poter tornare ai miei permessi originari.

teodoro@computer: su -
Password: (digita qui la tua password di root)
root@computer: comandi da eseguire
root@computer: exit
teodoro@computer: 

Questa seconda possibilità è lievemente più scomoda perché porterà la nostra shell nella home dell’utente per la quale abbiamo effettuato il login variando così la nostra Current Working Directory.


Problematiche

Questa architettura regge finché siamo all’interno del sistema nella quale è stata concepita. Quando usciamo da qui ci possono essere alcune problematiche.

Dipendenza dal sistema

Cosa succede se scollego un Hard Disk da un computer e lo collego a un sistema Linux con utenti e password differenti? Oppure, cosa succede se lo collego ad un computer con sistema operativo Windows?

Gli attori presi in causa da questo sistema sono principalmente due: il Kernel e il File System.

Kernel

Il Kernel gestisce la logica di gestione e di assegnazione dei permessi. Ma non tiene in memoria i permessi per sempre e delega l’archiviazione dei permessi ad un secondo elemento.

File System

Il File System gestisce il salvataggio dei file e dei relativi permessi su una memoria permanente e ogni sistema operativo ha il proprio File System “preferito“.

I permessi che impostiamo dipendono quindi da questi due fattori e spostando il disco su un altro sistema non è garantito il rispetto e il funzionamento dei permessi impostati.


Criptare il disco rigido

Per risolvere il problema riportato qui sopra si può criptare la partizione o la cartella dove risiedono i dati sensibili dell’utente.

Pro

Questo processo mi garantisce che anche in caso di furto i miei dati non potranno mai essere letti da nessuno.

Contro

Ci sono due controindicazioni:

  1. Le prestazioni del mio computer in fase di avvio potrebbero essere affette dall’operazione di de-criptaggio della partizione
  2. Se perdo la chiave di accesso non sarò più in grado di recuperare i file al suo interno

Argomenti correlati