Boh, ... sempre lo stesso problema :) ... dove lo metto? dove si incontra il problema! ...mmmhh no! meglio in articoli della community,.... però non viene visto subito e si continua a fare la domanda...
Vabbè per ora quì.
Nei 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ù.
Però una cosuccia ve la dico, così capite perchè vi impiantate con questo problema e Joomla (ma comunque succederebbe con qualunque altro cms) e impazzite a impostare a 777 permessi di cartelle, files:
chmod NON funziona nei file system NTFS (quindi Windows), dove tutti i file sono di norma leggibili ed eseguibili da tutti , quindi se emulate Apache in ambiente windows potreste avere degli errori cercando di accedere a risorse locali, fuori dall'ambiente virtuale creato, se siete su un server windows... buona fortuna!
M.