Clusit-Associazione Italiana per la Sicurezza Informatica
Il mio profilo su Linkedin
Il mio spazio su YouTube
Joomla Italia
Il mio profilo su vololibero.net
 
Album Picasa
 
La gestione dei permessi in sistemi *nix PDF Stampa E-mail
Non solo Joomla
Lunedì 31 Maggio 2010 15:03
permessi linuxNei sistemi Unix like per ogni cartella e per i files in essa contenuti vengono assegnati dei permessi che appunto hanno il compito di permettere o impedire operazioni su di essi a seconda di determinate "appartenenze".
Infatti ogni file ha tre parametri su cui imposare dei permessi e sono:

- l'owner, ovvero il proprietario (owner)
- il gruppo del proprietario (group)
- gli altri utenti (users)

Per ognuno di questi tre parametri bisogna impostare dei permessi, quindi definire cosa potrà fare l'owner, l'appartenente al gruppo dell'owner e l'utente con quella cartella o con i files in essa contenuti.
I permessi sono gerarchici, quindi quelli di un file contenuto in una cartella ne ereditano anche le limitazioni e possono introdurne di nuove.
Se un file si trova in una cartella non scrivibile dall'utente anche i files in essa contenuti saranno non scrivibili, ma possono essere ulteriormente ristretti a non eseguibili o leggibili.

I valori da assegnare a ognuno dei parametri per definirne i permessi sono:
0 -> nessun permesso -> -
1 -> esecuzione -> x
2 -> scrittura -> w
3 -> esecuzione e scrittura -> xw
4 -> lettura -> r
5 -> lettura ed esecuzione -> rx
6 -> lettura e scrittura -> rw
7 -> lettura, scrittura ed esecuzione -> rwx

A questo punto è semplice capire chi può fare cosa:
un file con permessi 777 vorrà dire che per tutti e tre i parametri sono stati applicati i permessi di scrittura, lettura ed esecuzione e quindi sia l'owner, sia il group, sia l'utente potranno leggere, scrivere ed eseguire quel file.

Ci troviamo spesso a confrontarci con queste problematiche quando abbiamo a che fare con "l'ambiente web", ovvero quando abbiamo la necessità di trasferire su un server web dei contenuti che vorremmo venissero condivisi e per i quali dobbiamo ovviamente stabilire delle "politiche" d'uso.

Ricordate che quando trasferite dei files con un software ftp su di uno spazio web assegnatovi, questi verranno sempre installati con un owner e un group di appartenenza stabiliti dall'amministratore del sistema; a seconda voi siate il proprietario o un membro del gruppo del proprietario dovete pensare di poter avere ampi permessi per lavorare sui files.

Dove si genera la confusione? Direi che leggendo si potrebbe credere di stare attribuendo delle autorizzazioni a delle "identità" che avranno accesso al nostro sito web: non è così, o meglio non precisamente.
Un conto sono le autorizzazioni attraverso i nostri script e un conto sono i permessi, ma devono comunque collaborare.
Attraverso l'autorizzazione dei nostri script (login) riusciremo a "raggiungere" files (es. admin) che con il loro codice potranno modificare (o no) parti o contenuti a seconda che:
- il file target appartiene allo stesso proprietario/gruppo
- il file target abbia i permessi per essere letto, scritto ed eseguito (7) dall'owner/group.

Molti hanno l'illusione che assegnando un permesso basso all'utente questo non abbia possibilità di manipolare nulla, nulla di più sbagliato, altrimenti perchè si generano vulnerabilità nel codice?.
Quando ci si "inserisce" nel flusso di uno script alla "vista" del server, si assume l'identità del file contenete lo script o che lo ha generato.

Come si agisce sui permessi?
Diciamo che qualunque software di ftp ha il suo tool per il cambio dei permessi. Su un server che non vi appartiene non potete modificare owner e group ma se il server è vostro nulla vi impedisce di aprire un terminale e digitare da root:
chown nome_file owner:group

Però prima ancora sarebbe meglio ricordare che per sapere tutti gli attributi del mio file devo digitare:
ls -l
prendo come esempio il mio file locale htaccess di Joomla:
-rwxrwxrwx  1 ts ts    4068 2010-03-19 18:27 htaccess.txt

Partendo da sinistra verso destra ho:
1) un trattino: è un file, se fosse stata una directory al posto del '-' c'era 'd'
2) tre gruppi (owner-group-users) di tre lettere (read-write-execute)
3) saltiamo il numerino che nn ci interessa
4) owner e group del file
5) la dimensione
6) la data dell'ultima modifica
7) l'ora dell'ultima modifica
8) il nome del file

Riassumendo, sono l'owner di quel file (il server è mio) sono anche membro del gruppo dell'owner e quindi posso lavorare con i suoi stessi privilegi.
L'owner può scrivere leggere ed eseguire quel file così come lo possono fare gli appartenenti al gruppo o gli users.
Per cambiare i permessi useremo questa forma:
chmod nnn nome_file_o_cartella
dove al posto di n andrà la somma dei singoli valori di ogni tipo di permesso che gli vogliamo attribuire (vedi la prima tabella); supponendo di voler arrivare ad avere un file con i permessi come il mio htaccess sopra:
owner->rwx group->rwx users->rwx

dovremmo sommare i singoli permessi:
r (read)->4 + w (write)->2 + x (execute)->1 = 7 (owner)
r (read)->4 + w (write)->2 + x (execute)->1 = 7 (group)
r (read)->4 + w (write)->2 + x (execute)->1 = 7 (users)

Quindi usando la sintassi vista prima:
(root) chmod 777 htaccess.txt

Se si trattasse invece di una cartella la sintassi non cambia ma abbiamo la possibilità di applicare ricorsivamente gli stessi permessi anche ai files in essa contenuti aggiungendo il recursive:

(root) chmod 777 -R nome_cartella

E windows? Scusate ma mi rifiuto di cercare di capire una cosa che mi viene nascosta alla base e che posso solo usare, per cui come sempre, non mi occupo di windows, non lo spiego e mi limito ad usarlo nei limiti delle mie conoscenze, lasciando questo infelice compito ad altri che ne sanno di più.
 
 
Questo sito è dedicato alla mia ed altrui curiosità, come primordiale bisogno di conoscere, capire nella sua complessità ogni cosa. Questo sito è basato sul framework Joomla1.5.xx!. Ogni contenuto o script pubblicato è di libera consultazione e duplicazione purchè se ne citi la fonte. Clicca qui per votare