Un sito è costituito da un certo numero di file presenti su un server, l'accesso ai quali è consentito solo agli utenti autorizzati, ed ogni file ha un proprietario specifico (un utente od un gruppo di utenti), cioè colui che carica il file nel server. Il proprietario assegna dei permessi al file o alla cartella creata, i quali permessi definiscono le operazioni che possono essere compiute dagli utenti che non sono proprietari del file.
I sistemi operativi Linux e Unix, in merito alla possibilità di operare con un file, fanno distinzione fra 3 tipi di soggetti: Proprietario (Owner), Gruppo del proprietario (Group) e altri Utenti (Others). Per ciascuno di questi utenti è necessario specificare i diversi permessi riguardanti la cartella (directory) o il file.
I permessi di scrittura dei file tipici dei sistemi operativi Linux e Unix sono, quindi, le istruzioni che vengono fornite al server su cosa si può e non si può fare ad una data cartella o ad un file. È possibile modificare (chmod) tali permessi con un programma FTP o direttamente dal pannello di controllo fornito da alcuni hosting.
I permessi sono indicati tramite alcuni numeri, ovvero:
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
Questi permessi devono essere regolati per ognuno dei 3 gruppi di utenti. Ad esempio chmod 755 non è altro che il tipo di permesso che si imposta su un file che serve a renderlo:
- leggibile-scrivibile-eseguibile al proprietario;
- leggibile-eseguibile al gruppo;
- leggibile-eseguibile agli altri utenti.
Il chmod 755 si ottiene in questo modo:
Affiancando i tre totali ottenuti si ha appunto 755.
Un altro esempio è dato dal chmod 666, tipico dei file di database:
Affiancando i tre totali ottenuti si ha 666.
I chmod riferiti ad una cartella cambiano leggermente di significato. Infatti:
Leggibile: significa possibilità di ottenere dall’esterno della directory l’elenco dei files;
Scrivibile: significa possibilità di creare nuovi files all’interno della directory;
Eseguibile: significa permesso di accesso all’interno della directory.
Un altro modo di descrivere i chmod è quello letterale. Dove:
- indica assenza di quell’elemento.
d - si tratta di una directory.
l - si tratta di un link simbolico.
r – “reading” cioè leggibile.
w - “writing” cioè scrivibile.
x - “executing” cioè eseguibile.
La struttura della riga in tale caso è la seguente:
|directory o meno (1 carattere)|diritti dell’amministratore (3 elementi) |diritti dei gruppi (3 elementi)|diritti degli utenti (3 elementi) |
Un esempio pratico di chmod 755 attribuito ad una cartella: drwxr-xr-x
Esempio di chmod 666 attribuito ad un file: -rw-rw-rw-
Una corretta gestione dei permessi in Joomla! è molto importante per la sicurezza del sito. Per questo motivo è essenziale preferire hosting con PHP eseguito in modalità suPHP/fastCGI che consente maggiore sicurezza e personalizzazione da parte degli utenti, e non invece in mod-php (apache 2.0 handler). In quest’ultimo caso, infatti, per consentire a Joomla! di funzionare correttamente, i permessi dovrebbero essere posti a 777, cosa che in ambiente condiviso è decisamente molto pericoloso.
Per verificare la configurazione dello spazio web è possibile controllare la pagina Informazioni di sistema nel menu Sito, dove la voce WebServer interfaccia PHP deve mostrare cgi-fcgi e non apache 2.0 handler.
Per comprendere meglio questa problematica della gestione dei permessi dei file, è importante tener presente che per il server l'utente che opera tramite Ftp è differente rispetto a quello che opera tramite applicazioni web (dal pannello di Joomla, per intenderci), per cui se l'uno carica dei file l'altro non potrà accedervi (in quanto non ne è proprietario), a meno di non modificare i permessi. Il problema è che spesso il medesimo utente opera sia tramite Ftp (ad esempio quando carica il pacchetto Joomla per installarlo), sia tramite il pannello di controllo di Joomla, il back end (quindi tramite protocollo http), ma per il server si tratta sempre di due utenti del tutto distinti.
Quindi, nel primo caso l’utente proprietario dei file caricati è l’utente Ftp (1111 1112), mentre nel secondo caso il proprietario è l’utente Apache (99 99) perché usa il browser.
In una gestione senza suPHP è importante caricare ogni file del sito tramite FTP, rendendo l’utente Ftp effettivamente il proprietario del file, altrimenti il proprietario viene assegnato all’utente Apache, rendendo impossibile l’uso dei file, a meno di non voler riassegnare per ogni singolo file o cartella, i permessi.
Una possibile soluzione è attivare l’account Ftp di Joomla! (FTP system layer), in modo che le operazioni risultino sempre compiute dall’utente Ftp, anche se compiute dall’interno del pannello di controllo di Joomla!. In realtà conviene comunque abilitare l’Ftp nel pannello di Configurazione globale di Joomla!, che farà in modo che la maggior parte degli script di cracking, che necessitano di PHP per modificare arbitrariamente i file, falliscano nel loro intento.
Il modulo suPHP ovvia al problema dei permessi, permessi assegnandoli sempre all'utente Ftp e non all'utente Apache, rendendo così i file modificabili da Ftp anche se caricati via web e viceversa, cioè il proprietario dei file e l'utente Apache sono la stessa cosa. Per questo è importante utilizzare un hosting con suPHP.
Però non è un modulo Joomla, bensì un modulo da installare lato server, cioè se esso non è presente non è possibile installarlo da noi, ma dobbiamo chiederlo al gestore del server. Se il servizio di hosting non utilizza suPHP e non consente di installarlo, è necessario curare personalmente i permessi per poter operare con Joomla, con ovvie difficoltà nella gestione del cms. Una alternativa al suPHP e suEXEC, modulo con caratteristiche simili.
L'uso del modulo suPHP rende anche più facilmente tracciabile l'utente che in ambiente di hosting condiviso ha pasticciato col proprio sito, proprio perché nei log del server risulta l'utente Ftp e non il generico utente Apache.
Ricordiamo che i chmod, lavorando con Joomla, devono essere settati a 755 per le cartelle e 644 per i file. Se per qualche motivo un hosting pretende che i permessi siano settati a 777 per far funzionare Joomla, allora conviene cambiare hosting, oppure prepararsi a vedere hackerato il sito.