Serveur LAMP - Créer un/des répertoires de travail
Présentation
L'erreur de beaucoup de personnes arrivant sur Ubuntu et/ou GNU/Linux est de créer des pages internet avec des droits d'administration ou d'affecter le répertoire /var/www à un utilisateur. En contrepartie, beaucoup d'utilisateurs trouvent également peu pratique de devoir travailler dans un répertoire qu'ils n'ont pas choisi.
/var/www est un répertoire sous droits root. Il est donc contre indiqué de travailler dans ce répertoire.
Ici nous allons exposer comment créer ses propres répertoires de travail avec des droits spécifiques à une utilisation à la fois 'publique' (serveur web personnel) et 'privée' (serveur de développement).
Nous allons aussi faire en sorte de rendre /var/www inaccessible de l'extérieur ou du moins accessible de façon ponctuelle.
Mise en place
Attention ! Pour la version Ubuntu 14.04, apache2 est en version 2.4.7. Le nouveau répertoire racine pour le serveur est: /var/www/html et non /var/www. Voir la remarque en fin du 4. Problèmes.
Protection de /var/www
Dans un premier temps nous allons donc rendre le dossier /var/www inaccessible. Pour cela, on édite en super utilisateur le fichier : /etc/apache2/sites-available/default (ou à partir de Ubuntu 14.04, le fichier : /etc/apache2/sites-available/000-default.conf) et dans la section <Directory /var/www> on va modifier les accès . Depuis la version 2.4 d'apache le fichier 000-default.conf n'a plus de section <Directory /var/www>, il faut la rajouter en dessous de la ligne DocumentRoot /var/www.
Changez :
<Directory /var/www/> Options Indexes FollowSymLinks MultiViews AllowOverride None Order allow,deny Allow from all </Directory>
en :
A partir de ubuntu 13.10 et apache 2.4
<Directory /var/www/> Options Indexes FollowSymLinks MultiViews AllowOverride None <RequireAny> Require ip 127.0.0.1 Require ip 192.168.1.0 </RequireAny> </Directory>
Pour les versions précédentes à ubuntu 13.10 et apache 2.4
<Directory /var/www/> Options Indexes FollowSymLinks MultiViews AllowOverride None Order Deny,Allow Deny from all Allow from 127.0.0.1 # local Allow from 192.168.1.0/24 # reseau </Directory>
Cette modification va faire en sorte que seule votre machine (127.0.0.1) et celles de votre réseau local (à condition que celui-ci utilise l'adresse 192.168.1.0) auront accès aux pages web situées dans le dossier /var/www/.
Création des répertoires de travail
Ici nous allons placer nos répertoires dans la zone /media (en prévision d'une installation sur une clé usb, un disque externe, une partition séparée, etc. Libre à vous de choisir le lieu … qu'il reste cohérent quand même
sudo mkdir /media/www-dev sudo mkdir /media/www-dev/public sudo mkdir /media/www-dev/private
Donner les droits utilisateur aux répertoires de travail
Le 'users' par contre est un nom de group (normalement déjà présent sur votre installation). Soit vous utilisez nom_user:nom_user, soit nom_user:users.
'users' étant souvent le group utilisé sur de l'hébergement mutualisé, ce qui vous permet de simuler votre hébergeur au plus près.
sudo chown -R $USER:users /media/www-dev
- Vous ne pouvez pas utiliser des partitions NTFS et FAT, car elles ne gèrent pas les droits utilisateurs. il faut donc impérativement que votre dossier figure sur une partition Linux.
- Si votre dossier figure sur un autre disque dur (clef USB, etc…), toutes les permissions doivent être favorables, sur chacun des dossiers, depuis le disque lui même.
Exemple : votre site se situe sous /media/votre_disque/vos_sites/votre_site, il vous faut exécuter :
sudo chown $USER:users /media/votre_disque
sudo chown $USER:users /media/votre_disque/vos_sites
sudo chown -R $USER:users /media/votre_disque/vos_sites/votre_site
Configuration d'alias dans apache
Pour pouvoir accéder à ces répertoires, apache a besoin d'une *redirection*.
Cette *redirection* se présente sous la forme : http://nom_de_domaine.tld/nom_de_redirection
Ces *redirections* s'appellent des Alias.
Il nous faut donc ajouter deux alias, un pour public et un pour private.
Éditez en super utilisateur le fichier : /etc/apache2/sites-available/default (ou /etc/apache2/sites-available/000-default.conf pour Ubuntu 14.04 et plus) et ajoutez à la suite de <Directory /var/www>….</Directory> :
A partir de ubuntu 13.10 et apache 2.4
## ZONE PUBLIQUE Alias /public /media/www-dev/public <Directory /media/www-dev/public> Options Indexes FollowSymLinks MultiViews AllowOverride All Require all granted </Directory> ## ZONE PRIVEE Alias /private /media/www-dev/private <Directory /media/www-dev/private> Options Indexes FollowSymLinks MultiViews AllowOverride All <RequireAny> Require ip 127.0.0.1 Require ip 192.168.1 Require host .w3.org Require host sandbox.paypal.com </RequireAny> </Directory>
Pour les versions précédentes à ubuntu 13.10 et apache 2.4
## ZONE PUBLIQUE Alias /public /media/www-dev/public <Directory /media/www-dev/public> Options Indexes FollowSymLinks MultiViews AllowOverride All Order allow,deny Allow from all </Directory> ## ZONE PRIVEE Alias /private /media/www-dev/private <Directory /media/www-dev/private> Options Indexes FollowSymLinks MultiViews AllowOverride All Order deny,allow Deny from all Allow from 127.0.0.1 # Local Allow from 192.168.1.0/24 # Réseau Allow from .w3.org # W3C Allow from sandbox.paypal.com # Paypal </Directory>
Ajout de liens symboliques
A présent les espaces sont valides, mais non visibles depuis la racine de votre serveur (c.f.: http://localhost). Il serait donc judicieux et pratique d'y avoir accès directement, plutôt que de devoir taper manuellement 'http://localhost/public' ou 'http://localhost/private'.
Il suffit tout simplement de créer un lien symbolique dans /var/www
les liens symboliques dans /var/www se font via 'sudo' et donc sont en root:root. Ne changez pas ces droits !
sudo ln -s /media/www-dev/public /var/www/html/public sudo ln -s /media/www-dev/private /var/www/html/private
Il vous faudra également effacer le fichier index.html pour que cela prenne effet :
sudo rm /var/www/html/index.html
Éviter le 403
Les répertoires /var/www et /media/www-dev/private (/var/www/private) étant interdit de l'extérieur, un visiteur tapant votre adresse (ip / no-ip , DynDNS / nom de domaine) directement sans préciser le dossier 'public', se verra accueilli par une belle page en 403 (ou s'il tente d'accéder *par miracle* ←- faut le savoir à votre répertoire 'private')
Si vous n'avez pas de domaine (domain.tld est un exemple générique), il faudra utiliser votre IP réelle (ex : http://checkip.dyndns.org/ ).
On va donc remédier à cela en redirigeant les visiteurs automatiquement vers le répertoire 'public' en cas d'erreur 403.
Il suffit d'ajouter la ligne :
ErrorDocument 403 "http://domain.tld/public"
à la suite de :
<Directory /var/www>
et :
<Directory /media/www-dev/private>
Dans certains cas une erreur 403 peut également se produire lorsque vous demandez l'affichage de localhost alors que 127.0.0.1 fonctionne (et que vous avez d'ores et déjà réglé les problèmes de ServerName dans /etc/hosts et /etc/apache2/apache2.conf).
Avant Ubuntu 14.04, dans le fichier : /etc/apache2/sites-available/default, ajouter à la suite de <Directory /var/www> la ligne :
Allow from localhost # Local
après
Allow from 127.0.0.1 # Local
A partir de Ubuntu 14.04, il faut ajouter
Require host localhost
après
<RequireAny> Require ip 127.0.0.1
Finalisation
Voilà c'est fini. À présent il vous suffit de recharger la configuration d'apache pour rendre tout cela opérationnel.
sudo service apache2 force-reload
Problèmes
* Cas d'une erreur sur ServerName au rechargement d'apache
Erreur ServerName
* Renvoi vers votre 'livebox/neufbox/ClubInternet Box' avec un nom de domaine.
Éditez en super utilisateur le fichier : /etc/hosts et ajouter une ligne avec :
127.0.0.1 domain.dnsalias.net
* Erreur sur le localhost
Éditez en super utilisateur le fichier : /etc/hosts et remplacer les lignes :
127.0.0.1 localhost 127.0.1.1 <hostname>
par :
127.0.0.1 localhost <hostname>
* Apache2 + Ubuntu 14.04 (et systèmes suivants) nouveau répertoire racine:
Attention pour la nouvelle version 14.04, la version apache2 qui a été publié lors de la Ubuntu 14.04 est en 2.4.7 il semble que, pour des raisons de sécurité, le nouveau répertoire racine pour le serveur est: /var/www/html
Donc, à partir de maintenant, vous devez placer les fichiers de votre site Web dans le dossier /var/www/html. Et comme cela, vous ne devriez pas avoir à nouveau ce problème avec les mises à jour futures.
Quoi qu'il en soit, si vous voulez changer ce répertoire racine pour un autre, vous devez modifier (en tant que root) le fichier 000-default.conf situé dans /etc/apache2/sites-available
sudo nano /etc/apache2/sites-available/000-default.conf
C'est la ligne suivante: DocumentRoot /var/www/html
qu'il faut modifier à: DocumentRoot /var/www/chemin-vers-son-autre-répertoire
— lamp_repertoires_de_travail Contributeur/Mainteneur : McPeter