Capita spesso di aver necessità di creare una directory “parallela” a quella di default per immagazzinare i siti web serviti dal nostro Apache.
L’idea che più di frequente viene in mente è quella di creare un link simbolico che colleghi la directory alla radice di default.
Questo, per non impazzire ad eseguire mount, per pigrizia, o semplicemente perchè non si userà sempre il solito percorso.
Il problema a questo punto sarà che Apache, nell’incontrare un symbolic link, restituirà istantaneamente un errore 403.
Apache, link simbolici e qualche esempio
Se prendiamo come esempio una distribuzione Ubuntu, di norma la directory pubblica che Apache si aspetta di utilizzare è la: /var/www/html/
.
Il caso tipico, giusto per fare un esempio, è quello in cui si ha poco spazio a disposizione nella partizione in cui risiede quella cartella.
Ipotizzando di avere una seconda partizione (partizione2) con molto più spazio; inoltre, di voler posizionare un sito web nella sua directory demo
.
La via più semplice sembrerebbe quella di creare un link simbolico di quella cartella demo dentro la html letta da apache.
Ricordo che – di default – Ubuntu e derivate montano le partizioni all’interno di media, sotto la directory dell’utente loggato.
Nell’esempio sopracitato, avremmo quindi:
cd /var/www/html
sudo ln -s /media/nomeutente/partizione2/demo/ ./demo
Con il primo comando ci si sposta nella public di Apache (html) e con il secondo creiamo al suo interno un link simbolico alla directory demo proveniente da partizione2.
Ebbene, tentando di accedere alla url del sito con http://localhost/demo
(come ci si aspetterebbe funzionasse), Apache restituirà un errore 403.
Forbidden – You don’t have permission to access /demo on this server.
Come risolvere
Bisogna capire che Apache attraverserà il link simbolico e si renderà conto di non avere i permessi di esecuzione.
Sarà inutile modificare il solo file di configurazione di Apache stesso /etc/apache2/apache2.conf con l’apposita sezione Directoy.
Prima devono essere sistemati i permessi di ogni singola directory facente parte del percorso che Apache deve attraversare.
Nel nostro caso, quindi, a partire da /media/nomeutente/partizione2/demo/
, è necessario eseguire:
sudo chmod o+x /media/
sudo chmod o+x /media/nomeutente/
sudo chmod o+x /media/nomeutente/partizione2/
sudo chmod o+x /media/nomeutente/partizione2/demo/
Una chiamata tramite browser a http://localhost/demo
restituirà finalmente il sito web.
Ovviamente ragionare sempre su cosa si fa esattamente assegnando quei permessi: mentre in ambiente di sviluppo quanto scritto sino ad ora può essere di sicura utilità, in produzione potremmo creare falle di sicurezza. Ribadisco, ragionare bene prima.
Segui @andymnc (Andrea Manconi) su Twitter per essere sempre aggiornato su guide ed articoli