Ceci est une ancienne révision du document !
Serveur LAMP - Créer un/des répertoires de travail
Elle ne reflète pas du tout l'installation standard d'un serveur Web et du plus peut corompre le fonctionnement de certains scriptes PHP.
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. FAUX !
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
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 et dans la section <Directory /var/www> on va modifier les accès :
Changez :
<Directory /var/www/> Options Indexes FollowSymLinks MultiViews AllowOverride None Order allow,deny Allow from all </Directory>
en :
<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 et surtout, sur une partition linux (pas NTFS ou FAT), mais pas sur une partition linux cryptée (/home/user/XXX) car cela renverra une erreur 403 (Access denied)
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 et ajoutez à la suite de <Directory /var/www>….</Directory> :
## 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 visible 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/public sudo ln -s /media/www-dev/private /var/www/private
Il vous faudra également effacer le fichier index.html pour que cela prenne effet :
sudo rm /var/www/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 si 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>
Finalisation
Voilà c'est fini. À présent il vous suffit de recharger la configuration d'apache pour rendre tout cela opérationnel.
sudo /etc/init.d/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>
Liens et ScreenCast
Reprise de l'ancienne doc : http://doc.ubuntu-fr.org/tutoriel/virtualhosts_avec_apache2_et_dyndns
Installation en vidéo (screencast) de ce tutoriel : http://doc.ubuntu-fr-secours.org/lamp/ Internal Server Error!!!
- 04-Environnement_de_travail.ogg - 21 Mo - 15 minutes 33 sec ( pourquoi une minute de plus ). Not Found !!!
- 04-Environnement_de_travail.avi - 39 Mo - 14 minutes 36 sec. Not Found !!!
— lamp_repertoires_de_travail Contributeur/Mainteneur : McPeter