Settare i Permessi dei File su Linux? Una Guida Rapida
Dalle richieste di assistenza che spesso arrivano sul nostro sistema abbiano notato che spesso gli utenti fanno confusione nell’utilizzare i permessi sui server linux. Inoltre purtroppo, gli utenti, cercando su internet trovano risposte quali: “setta tutto a 777, 666, 755…” ottenendo risultati non funzionali e qualche volta addirittura disastrosi. Il nostro scopo quest’oggi è di offrire un po’ di chiarezza su questo aspetto e spiegare perchè queste risposte non hanno senso e spesso sono sbagliate.
Ecco un sunto della situazione…
Nei server Iinux i permessi sono un sottoinsieme degli attributi che un sistema operatori associa a ciascun file (importante: in linux le directory sono dei files che vengono gestiti in maniera particolare) e che indicano quali utenti possono agire su quel file e cosa quel file ha la possibilità di fare; nel nostro caso ci interessa principalmente quali utenti posso agire su quel file.
I permessi linux sono gestiti in ottale (quindi in base 8) con tre gruppi (triplette) di bits, nella forma r-w-x che indicano le seguenti opzioni:
r: read, leggibile
w: write, scrivibile o modificabile
x: eXecute, eseguibile; nel caso il file sia una directory il bit ‘x’ indica la possibilità di leggerne il contenuto. Nota importante: i file PHP non sono file eseguibili quindi non hanno bisogno di essere configurati a “X”.
Quella che abbiamo appena visto è la forma di ogni tripletta.
Tutte in fila le tre triplette vengono elencate consecutivamente e rappresentano i permessi che hanno su ciascun files tre entità diverse:
- il proprietario (owner, indicato con la lettera ‘u’ da ‘user’)
- chi, non essendo proprietario, appartiene comunque al gruppo del proprietario (group, indicato con la lettera ‘g’)
- il resto del mondo ;) , ovvero tutte le persone/ruoli/programmi che hanno accesso al sistema (others, indicato con la lettera ‘o’).
U : chi è il proprietario?
Il seguente testo è esemplificativo e va bene in linea generale. Non va preso in senso assoluto in quanto scendendo più in profondità nell’argomento esistono eccezioni e casi differenti.
In linux quando si aggiunge un nuovo utente a un file o directory, o si installa un nuovo programma (specialmente se deve girare come servizio) si crea un utente ed anche un gruppo esclusivo a cui l’utente/programma appartiene; nel caso altri utenti (o programmi) debbano accedere ai file del nuovo utente, si provvede ad aggiungere questi utenti al gruppo creato e a modificarne opportunamente i permessi.
Quindi abbiamo due aspetti complementari che non possono mai essere controllati in maniera disgiunta:
- la proprietà (indicata come proprietario:gruppo)
- i permessi associati.
Ignorare uno di questi due aspetti e tentare di agire sull’altro è inutile e pericoloso.
Verificare i permessi è un’operazione che può essere eseguita con qualsiasi client ftp, purtroppo invece non è sempre possibile per la proprietà; anzi, l’informazione, se presente, potrebbe non essere affidabile.
Nella maggior parte dei servizi di hosting, l’ftp è configurato per scrivere i files inviati con il ‘vostro nome’ ovvero usando il vostro nome utente (e lo uid); il risultato sarà l’assegnazione della proprietà del file a voi, mentre di norma il gruppo è quello di apache o in altri casi dell’ftp.
E i permessi :0777? Sono pericolosi?
Dipende molto dalle impostazioni del server, quindi non si può dare una risposta con valore assoluto; certo è che non è mai una buona idea. Per spiegare a dovere considerate questo parallelo: è come lasciare aperta la cassaforte di casa perché tanto ho chiuso la porta blindata. funziona? sì, finché non dimenticate la porta, od una finestra aperta.
Il sistema dei permessi è sempre un controllo in più; quale che sia la configurazione del server e deve essere impostato correttamente.
Cartelle diverse, permessi diversi
Una buona prassi per la sicurezza è quella di dare permessi differenti (generalmente più restrittivi) alle cartelle che non debbono essere scritte se non in occasioni sporadiche. E’ necessario però verificare prima che la funzione chmod() sia disabilitata, o comunque ignorata. Quest’ultima operazione è abbastanza difficile in caso di hosting condivisi, ma facilmente praticabile se potete accedere da shell (esempio negli hosting basati su vps). Infatti se riuscite a impedire al php di modificare i files php, rimuoverete così la stragrande maggioranza dei possibili Hack.