Supporto volontario e collaborativo per Joomla!® in italiano

I permessi Linux e l'hosting

Ho visto che vi è notevole confusione su ciò che sono i permessi nei server linux e che molto spesso vengono date risposte tipo "devi mettere i permessi a 777, 666, 755..." sparando numeri più o meno a casaccio. Vediamo se riusciamo a fare un poco di chiarezza su questo aspetto e spiegare perché risposte tipo quella citata non hanno senso. Vi avviso che l'articolo sarà necessariamente abbastanza tecnico e che probabilmente non sarà di facile comprensione :( .

Permettetemi un breve riepilogo...

Nota: d'ora in poi parlerò usando il termine linux, per non confondere, ma sappiate che ciò che dico vale praticamente per qualsiasi sistema operativo  di derivazione UNIX.

I permessi sono un sottoinsieme degli attributi che un os (sistema operativo) associa a ciascun file (nota: in linux le directories non sono altro che dei files un po' particolari) e che determinano chi possa agire su quel file o che cosa quel file possa fare (se è un programma); essendo noi interessati al mondo web tralasceremo gli aspetti relativi a ciò che un file può fare di suo.

i permessi linux sono indicati in ottale (base 8) con tre triplette di bits, nella forma r-w-x che indicano le seguenti possibilità:
  • r: read, leggibile
  • w: write, scrivibile (modificabile)
  • x: eXecute, eseguibile ; nel caso il file sia una directory il bit 'x' indica la possibilità di leggerne il contenuto. Una informazione, già che siamo in  argomento: i files  php non hanno bisogno di essere marcati come eseguibili dato che non sono files eseguibili.
Le tre triplette vengono elencate consecutivamente, e rappresentano i permessi che hanno su ciascun files tre entità diverse:
  1. il proprietario (owner, indicato con la lettera 'u' da 'user'),
  2. chi, non essendo proprietario, appartiene comunque al gruppo del proprietario (group, indicato con la lettera 'g')
  3. il resto del mondo ;) , ovvero tutte le persone/ruoli/programmi che hanno accesso al sistema (others, indicato con la lettera 'o').
e fin qui niente di nuovo, lo sapevate tutti.

Chi è il proprietario?

Il problema nasce quando si chiede chi è il proprietario del file: lo ho chiesto in ufficio e la risposta è stata "che domande, io!".
Ora se state ridendo come matti è probabile che siate dei sysadmin ;) ...

Se vi state dicendo "mi sarebbe sempre piaciuto saperlo" o "menomale che non lo ha chiesto a me" forse non siete dei sysadmin, ma siete delle persone, sicuramente in gamba, che non hanno mai avuto chi glielo spiegasse.

nota per i sysadmin: semplificherò molto ed eviterò l'uso della locuzione "generalmente" in ogni dove; diverse asserzioni non hanno valore assoluto, e so benissimo che non possono essere ritenute valide in senso assoluto; ma se sei un sysadmin perchè stai perdendo tempo qui? ;D

Se avete in mente il mondo win in cui si ha a che fare con gruppi ben definiti che hanno già autorizzazioni ben predefinite e sono ben classificati (guest, user, power user, et cetera) dimenticate tutto, benvenuti nel nuovo mondo!

In linux quando si aggiunge un utente 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; poi, qualora altri utenti (o programmi) debbano, accedere ai suoi files, si provvede ad aggiungere questi utenti al gruppo creato o a modificare opportunamente i permessi.

Abbiamo pertanto due aspetti complementari che non possono mai essere analizzati disgiuntamente: la proprietà (indicata come proprietario:gruppo) ed i permessi associati. Ignorare uno dei due aspetti e tentare di agire sull'altro è inutile e pericoloso.

Mentre i permessi sono facilmente visibili con qualsiasi client ftp, non sempre la stessa cosa è possibile per la proprietà; l'informazione, poi, se presente potrebbe non essere affidabile. Alcuni sistemi restituiscono l'informazione in modalità numerica, in questo caso il primo numero è l'identificativo dell'utente (uid), il secondo quello del gruppo (gid).

L'ftp è normalmente configurato per scrivere i files inviati a 'vostro nome' ovvero usando il vostro nome utente (e lo uid) e quindi assegnando la proprietà del file a voi, mentre di solito il gruppo è quello di apache, in altri casi dello ftp.

Solitamente?

Avete notato quanti "solitamente" ci sono in questo testo? Il motivo è che ogni provider configura il server come meglio crede e che quindi la  risposta "imposta i permessi a 0xxx" è sempre formalmente sbagliata, se data senza conoscere la configurazione del server in oggetto. La risposta corretta è sempre quella di impostare i permessi così come specificato dal provider. Ricordate che l'errore non sta quasi mai nell'impostazione dei permessi.

Una configurazione tipica

Una configurazione tipica dei provider è:

utenteSpecifico:gruppoApache  0755

Che cosa ci dice questo? che l'ftp scrive i files attribuendone la proprietà all'utente specifico (noi) e che php (che gira sotto apache) gira con lo stesso uid dell'utente; in altri termini l'accoppiata php/apache (application server/web server) agisce in qualità di proprietario dei files e può farci quello che vuole.

Se un qualcosa non funziona, difficilmente funzionerà modificando i permessi; nulla vieta di provare a mettere i permessi a 0777, ma se così funziona, e sarebbe strano, dovete riportarli al valore originario ed avvisare l'assistenza. Se non funziona è inutile che stiate a tentare improbabili configurazioni, il problema non è lì.

0777 è pericoloso?

Come sopra: dipende dalle impostazioni del server, quindi non si può dare una risposta con valore assoluto; certo è che non è mai una buona idea, considerate questo parallelo: lascio aperta la cassaforte di casa perché tanto ho chiuso la porta blindata. ok? 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, deve essere impostato correttamente.

Cartelle diverse, permessi diversi

Una buona idea è quella di dare permessi più restrittivi alle cartelle che non debbono essere scritte se non in occasioni sporadiche,  dovete però prima verificare 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). Se impedite a php di gestire i files php di joomla, eliminate il 98% degli hacks possibili.

ciao,
marco

marco maria leoni web consulting: siti in Joomla!

commentaCommenta questo articolo sul forum