Le parole scritte in rosso devono essere sostituite dai vostri parametri.
×
Beta!
Sto lavorando al sito e commetterò tanti errori: potete segnalarmeli all'indirizzo indicato in fondo pagina. Segnalatemi anche eventuali vostre richieste. Grazie. !!!
Permessi File
I permessi sono un concetto con cui, avendo a che fare con files e
, dobbiamo acquisire confidenza. Altrimenti, alla prima autorizzazione negata, non riusciremo a scoprire la causa del problema e non sapremo trovarne la soluzione.
x
Le directory, cartelle, sono anch'esse considerate files, con all'interno altri files. Ed anche ad esse si applicano le regole dei permessi.
Intanto, cosa sono i permessi e a cosa servono?
Il controllo dei permessi è un fondamento della sicurezza del sistema: il proprietario del file o della directory decide chi può scrivere, leggere ed eseguire il file o la parte del sistema.
Guardiamo questo esempio:
il primo carattere - indica un ;
i successivi nove caratteri sono i permessi, in tre terne: rw- r-- r--;
il successivo numero, 1, indica i collegamenti al file;
il primo nome indica il proprietario;
il secondo nome indica il gruppo;
il successivo numero indica la dimensione del file in byte;
data ed ora si riferiscono all'ultima moditica del file;
infine, il nome del file.
x
Tipi di files:
- : file normale;
b : file speciale a blocchi; ( es. ls -l /dev/sda )
c : file speciale a carattere; ( es. ls -l /dev/null )
d : directory; ( es. /home )
l : collegamento simbolico; ( es. ls -l /dev/core ) in questo caso dopo il nome del file, con -> viene indicato il file linkato.
p : named pipe o pseudo-terminali.
Nel file, r vuol dire read (leggere); nelle cartelle r indica il permesso di visualizzazione del contenuto.
Nel file, w equivale a write (scrittura); mentre nella directory consente la creazione o l'eliminazione di file.
Nel file, x sta per eXecute (eseguire); mentre per le directory consente l'accesso ad esse.
Ci sono 3 terne (gruppi di 3 bit) con ognuno 3 valori di permessi:
Il primo gruppo ( tolto il primo bit - ) è rw- e si riferisce all' utente ( u );
Il secondo gruppo r-- riguarda il gruppo ( g );
Il terzo gruppo r-- riguarda gli altri/others ( o );
Riprendendo l'esempio di sopra, i permessi del file sono:
Lettura+Scrittura per il proprietario del file (u): -rw-r--r--
Solo Lettura per gli appartenenti al gruppo (g): -rw-r--r--
Solo Lettura per tutti gli altri (o): rw-r--r--
r (Read) = lettura = valore num. 4
w (Write) = scrittura = valore num. 2
x (eXecute) = esecuzione = valore num. 1
- = assenza di permesso = valore num. 0
Attenzione: r-x non ha il valore r meno x , ma di trattino ( valore numerico 0 ). Significa leggibile, non scrivibile, eseguibile.
Nell'assegnazione dei permessi con valore simbolico, che affronteremo dopo, il simbolo - ha un valore meno, ma solo in quel caso .
Così, sempre nell'esempio di prima:
u utente rw- ha un valore di 4+2+0=6
g gruppo r-- ha un valore di 4+0+0=4
0 altri rw- ha un valore di 4+0+0=4
Questo è il valore ottale di default dei nuovi files creati: 644 (rw-r--r--)
Il valore di default dei permessi delle nuove directory è, invece, 755 (rwxr-xr-x):
- leggibile, scrivibile ed eseguibile dal proprietario;
- leggibile ed eseguibile dagli appartenenti al gruppo;
- leggibile ed eseguibile anche da tutti gli altri.
Per fare modifiche ai permessi dei files e delle directory si usa il comando chmod.
Chmod può essere usato col metodo Numerico, oppure con il metodo Simbolico.
Il metodo Numerico è quello col valore ottale:
chmod ### indirizzo_del_file
dove # rappresenta il livello di accesso numerico ai permessi.
Ci sono 3 livelli di accesso ai permessi: utente, gruppo, altri.
Per esempio:
chmod 754 nani_informatici
mi restituisce -rwx (u = 07) r-x (g = 5) r-- (o = 4)
- utente: permessi di lettura, scrittura ed esecuzione del file;
- gruppo: permesso di lettura ed esecuzione;
- altri: permesso di sola lettura.
Per cambiare permessi ad una cartella e a tutti i files in essa contenuti, si ricorre all'opzione Ricorsiva:
chmod -R 755 /home/giubbe
Se invece vogliamo che la cartella abbia alcuni permessi e i files dentro di essa permessi diversi, faremo uso del carattere jolly *:
chmod 755 /home/giubbe
chmod 644 /home/giubbe/*
Il metodo Simbolico usa la sintassi chi, che cosa , quale. In inglese rende meglio :
- who indica le identità: u = utente; g = gruppo; o = altri; a = tutti (all)
- what indica l'azione: + = aggiungi; - = sottrai; = imposta esattamente
- which indica il livello di accesso: r = lettura; w = scrittura; x = esecuzione
Riprendendo sempre l'esempio di prima, se vogliamo rimettere i permessi come erano originariamente nel file nani_informatici, dobbiamo togliere il permesso di esecuzione al proprietario ed al gruppo:
chmod ug-x nani_informatici
In questo caso, ug-x ha il valore ug meno x.
Permessi speciali: set user ID, set group ID, sticky bit.
I permessi speciali creano un quarto livello di accesso ai file oltre a quelli visti precedentemente: utente, gruppo e altri.
Perciò, nel valore ottale, oltre ai 3 numeri rappresentanti i permessi di utente, gruppo ed altri, avremmo un
,
x
Stavolta le combinazioni sono:
0=nessun permesso (---------)
1=sticky bit (--------t)
2=sgid (-----s---)
3=2+1=sgid+sticky bit (-----s--t)
4=suid (--s------)
5=4+1=suid+sticky bit (--s-----t)
6=4+2=suid+sgid (--s--s---)
7=4+2+1=suid+sgid+sticky bit (--s--s--t)
anteposto alla terna (ad esempio: 4755)
Si chiamano speciali appunto, perchè creano privilegi addizionali a quelli tradizionali.
- Setuid (set user id), suid.
Il file eseguibile viene eseguito con i permessi del proprietario, a prescindere dai permessi dell'utente, diverso dal proprietario, che lo esegue.
Al posto della lettera x, viene usata la lettera s, per indicare il permesso suid.
Se il proprietario non ha il permesso di eseguire il file, allora si usa S (s maiuscola).
Per esempio digitando :
find / -perm /4000
troveremo (find) vari files con il suid impostato; scegliamo /usr/bin/su
stat /usr/bin/su
L'utente ha i permessi r (lettura), w (scrittura) ed s (esecuzione speciale) ed il file ha valore ottale di 4755.
- Setgid (set group id), sgid.
Questo permesso speciale ha due funzioni:
1) se posto in un file, il gruppo può eseguire il file con i permessi del gruppo proprietario.
2) se posto in una directory, qualsiasi file creato nella cartella acquisisce il gruppo non del creatore, ma del gruppo del proprietario della cartella.
Facciamo un esempio :
find / -perm /2000
stat /usr/bin/chage
In questo caso, il gruppo ha permesso r (lettura), - (scrittura non permessa) ed s (esecuzione speciale) ed il file ha valore ottale 2755.
Come nel caso di suid, se il gruppo proprietario non ha i permessi di esecuzione, dobbiamo usare S (s maiuscola).
- Sticky bit .
Questo permesso speciale, con simbolo t , riguarda solo le cartelle (ed i files contenuti in essa): soltanto il proprietario del file può cancellare o rinominare il file.
Senza lo sticky bit, qualsiasi utente con permessi di scrittura ed esecuzione nella cartella potrebbe cancellare il file.
Terzo esempio :
find / -perm /1000
stat /run/lock
In questo caso, la regola del permesso speciale è esplicitata con la lettera t , ove prima stava il carattere x . Ed il valore ottale del file risulta 1777.
- Impostazione dei permessi speciali .
Per impostare i permessi speciali, possiamo utilizzare il metodo simbolico oppure quello numerico.
Per esempio, vogliamo applicare sgid sulla directory nuova_cartella.
Creo la nuova cartella con il comando mkdir e , in seguito, listo i permessi di detta cartella:
mkdir nuova_cartella
ls -ld nuova_cartella/
In questo caso, il gruppo ha i permessi r - x
Per inserire il permesso speciale sgid, digitiamo:
chmod g+s nuova_cartella
Listiamo nuovamente la cartella:
ls -ld nuova_cartella/
e vediamo che il permesso speciale sgid è stato applicato al gruppo: r - s
Per togliere il permesso: g - (meno) s
chmod g-s nuova_cartella
ls -ld nuova_cartella/
La directory nuova_cartella è ritornata ad i permessi originari del gruppo (r - x).
Con il metodo numerico, dobbiamo semplicemente inserire un quarto numero ottale. Per rifare l'esempio sopracitato:
chmod 2755 nuova_cartella
ls -ld nuova_cartella/
Anche col metodo numerico, il permesso speciale sgid è stato applicato.
ACL / Liste di Controllo Accessi
Le ACL sono liste di controllo accessi a files e directory.
Permettono un controllo più capillare dei permessi visti finora, assegnati con chmod a utente, gruppo, altri.
Le ACL consentono l'assegnazione di permessi a singoli utenti o ad un gruppo di utenti.
Ad esempio, con un server di files Samba, a cui possono accedere tanti utenti, poter regolamentare chi ha il permesso di fare cosa e su quali files, è fondamentale per la salvaguardia dei files contenuti nel server stesso. In questo caso, l'amministratore decide chi può scrivere e modificare i files e chi può soltanto leggerli. Può anche decidere chi non deve assolutamente nè modificare e neanche leggere i files.
Su Debian 12, con filesystem ext4, le Acl sono abilitate per impostazione di base.
Per poterle settare, abbiamo bisogno del pacchetto acl con i suoi tools: Setfacl e Getfacl.
Setfacl (set file access control lists) è l'utilità per impostare i permessi nei files o nelle directory.
Getfacl (get file access control lists) mostra il nome del file, il proprietario, il gruppo di appartenenza e le ACL.
Getfacl mostra anche le eventuali ACL predefinite (default) delle directory. I files non possono avere ACL predefinite.
Installeremo il pacchetto necessario alla creazione delle ACL.
Creeremo altri utenti, oltre all'utente primario e a root già presenti, per affollare il sistema.
Faremo una cartella condivisa e metteremo in pratica questi permessi.
Creiamo un utente di nome testina:
sudo adduser testina
Un altro utente di nome testona
sudo adduser testona
Adesso creiamo una cartella da condividere. La posizioniamo nella directory /home, con proprietario root, gruppo root, e permessi settati a 700, ovvero: lettura, scrittura, esecuzione per l'utente root; nessun permesso per il gruppo e per gli altri.
sudo mkdir /home/cose_condivise
sudo chmod -R 700 /home/cose_condivise
Listiamo la directory /home per avere conferma dei permessi settati nella cartella condivisa:
ls -lH /home
Ci dice che la cartella condivisa cose_condivise appartiene a root, con gruppo root: che è appunto una directory (la prima d), root ha permessi 7, gruppo 0, altri 0, come previsto.
Notiamo anche che in Debian le cartelle home dei singoli utenti hanno anche loro di default i permessi 0700, il che significa che l'utente può leggere, scrivere ed eseguire i files e directory all'interno della sua cartella home, mentre gli altri utenti del sistema non possono accedere alla cartella home di quell'utente.
Adesso andremo a dare vari permessi ai vari utenti sulla cartella condivisa:
permetteremo a testina e testona soltanto di leggere i files;
invece, all'utente giubbe permetteremo la lettura, ma anche la modifica dei files.
Le opzioni di setfacl sono:
-m per modificare i permessi di files o directory;
-x per rimuovere i permessi di un dato utente;
-b per rimuovere tutte le ACL di quel file o directory;
-d per impostare ACL predefinite su una cartella;
-k per rimuovere le ACL predefinite, perciò solo alle directory;
-R per applicare le ACL a tutti i files e le cartelle posti nella cartella ricorsivamente.
Rilistiamo la directory /home :
ls -lH /home
E vediamo che accanto all'elenco dei permessi della cartella cose_condivise e spuntato un segno + .
Quel + indica che tra i permessi, ci sono anche ACL.
Adesso con getfacl vediamo come sono i permessi normali e quelli con acl nella cartella condivisa
getfacl /home/cose_condivise
Utente root crea un file con del testo da porre nella cartella condivisa:
echo "Testo inserito da utente root" > /home/cose_condivise/filediprova.txt
Da utente root diventiamo utente testina e proviamo a leggere il file creato da root.
su testina
cat /home/cose_condivise/filediprova.txt
Grazie ai permessi ACL, l'utente testina può leggere il file.
Proviamo a vedere se riesce anche a modificare il file:
nano /home/cose_condivise/filediprova.txt
Stavolta nano apre il file, permettendo all'utente testina di leggerne il contenuto, ma, nella riga di messaggio, indica che il file non è scrivibile, il che è giusto, visto il settaggio delle ACL.
Diventiamo l'utente giubbe per accertarsi se può modificare il file:
su giubbe
nano /home/cose_condivise/filediprova.txt
Giubbe, come previsto dai suoi permessi ACL, può modificare il file.
ACL Predefinite (default).
Impostando una ACL predefinita, questa si propagherà a files e sottodirectory creati all'interno della directory ove è settata l'ACL.
Usando le ACL predefinite, evitiamo di dover settare i permessi ogni volta che viene creato un nuovo elemento figlio nella directory genitrice.
Appunto perchè riguarda soltanto le cartelle genitrici, questa opzione si applica solo alle directory.
Per settare l'ereditarietà dei permessi finora creati, prendiamo i permessi di root ed usiamo l'opzione -d :
Attenzione: il settaggio delle ACL predefinite non è alternativo al settaggio delle acl imposte prima.
setfacl -m u:utente:permessi file_da_condividere (permesso acl utente)
setfacl -d -m u:utente:permessi file_da_condividere (permesso acl ereditario cartella genitrice)
Invece, per settare i permessi su files e cartelle già esistenti nella cartella, l'opzione da usare è la -R
setfacl -R -m u:utente:permessi file_da_condividere
Listiamo con getfacl i permessi della cartella
getfacl /home/cose_condivise
Si sono aggiunte le ACL default.
Altri esempi di applicazione di ACL:
setfacl -m g:revisori:5 /home/cose_condivise
Permettiamo ai membri del gruppo revisori ad accedere in lettura ai files.
setfacl -m u:testina:0 /home/cose_condivise/fileprivato.txt
Impediamo all'utente testina di accedere ad un file.
Per togliere le ACL ad un singolo utente:
setfacl -x -m u:testona:5 /home/cose_condivise
Per togliere qualsiasi ACL al file:
setfacl -b /home/cose_condivise
Per togliere le ACL predefinite:
setfacl -k /home/cose_condivise
Per qualsiasi chiarimento sui permessi, consultate i relativi manuali: