Home giubbe.org


×

Attenzione!

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.

Denied

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:

ls permessi

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.

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--

I permessi hanno anche un valore numerico :

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

chmod 754

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

chmod ug-x

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 , 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

suid

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

sgid

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

sticky bit

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/

sticky bit

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/

sticky bit

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/

sticky bit

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/

sticky bit

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

adduser

Un altro utente di nome testona
sudo adduser testona

adduser

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

mkdir

Listiamo la directory /home per avere conferma dei permessi settati nella cartella condivisa:
ls -lH /home

ls cartella condivisa

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.

setfacl -m u:testina:r-x /home/cose_condivise
setfacl -m u:testona:5 /home/cose_condivise
setfacl -m u:giubbe:7 /home/cose_condivise

acl utenti

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

ls cartella condivisa

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

getfacl cartella condivisa

Utente root crea un file con del testo da porre nella cartella condivisa:
echo "Testo inserito da utente root" > /home/cose_condivise/filediprova.txt

ls cartella condivisa

Da utente root diventiamo utente testina e proviamo a leggere il file creato da root.
su testina
cat /home/cose_condivise/filediprova.txt

cat /home

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

nano testina

nano testina

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

nano giubbe

nano giubbe

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 :

sudo setfacl -d -m u:giubbe:7 /home/cose_condivise
sudo setfacl -d -m u:testina:5 /home/cose_condivise
sudo setfacl -d -m u:testona:r-x /home/cose_condivise

setfacl -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

getfacl -d

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:

man chmod
man setfacl
man getfacl