{{tag>serveur tutoriel}} ---- ====== 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. le fichier index.html "it's works" installé par défaut (apache2 version 2.4.7) stipule: "Le répertoire root par défaut sous Ubuntu est /var/www/html. Vous pouvez définir votre propre "virtual hosts" dans /var/www. C'est différent des précédentes versions qui préconisaient de se placer en dehors de ce répertoire pour des raisons de sécurité." 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 [[tutoriel:comment_editer_un_fichier|édite]] en [[:sudo|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 on va modifier les accès . //Depuis la version 2.4 d'apache le fichier 000-default.conf n'a plus de section , il faut la rajouter en dessous de la ligne DocumentRoot /var/www//. \\ Changez :\\ Options Indexes FollowSymLinks MultiViews AllowOverride None Order allow,deny Allow from all en :\\ A partir de ubuntu 13.10 et apache 2.4 Options Indexes FollowSymLinks MultiViews AllowOverride None Require ip 127.0.0.1 Require ip 192.168.1 Pour les versions précédentes à ubuntu 13.10 et apache 2.4 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 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 :-P\\ 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 ==== __Attention__ : la variable '**$USER**' est une variable pour l'utilisateur en cours. si vous voulez affecter ces répertoires à un autre utilisateur, donnez le nom réel de l'utilisateur.\\ 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 Si vous n'utilisez pas /media/www/ mais un dossier personnalisé, attention : * 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**. [[tutoriel:comment_editer_un_fichier|Éditez]] en [[:sudo|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 .... :\\ Dans le cas ci-dessous on accorde un accès au W3C (validateur html) et à l'espace dédié aux développeurs d'application utilisant Paypal A partir de ubuntu 13.10 et apache 2.4 ## ZONE PUBLIQUE Alias /public /media/www-dev/public Options Indexes FollowSymLinks MultiViews AllowOverride All Require all granted ## ZONE PRIVEE Alias /private /media/www-dev/private Options Indexes FollowSymLinks MultiViews AllowOverride All Require ip 127.0.0.1 Require ip 192.168.1 Require host .w3.org Require host sandbox.paypal.com Pour les versions précédentes à ubuntu 13.10 et apache 2.4 ## ZONE PUBLIQUE Alias /public /media/www-dev/public Options Indexes FollowSymLinks MultiViews AllowOverride All Order allow,deny Allow from all ## ZONE PRIVEE Alias /private /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 ==== 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** __Attention:__ Ne jamais faire un '//rm -rf//' sur un lien symbolique ... cette commande aura pour effet de supprimer le contenu réel de destination du lien symbolique. Utilisez juste '//rm /dossier/nom_symbolique//' comme s'il s'agissait d'un simple fichier.\\ 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 / [[:dns_dynamique|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 :-P à 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 : et : 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 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 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 /etc/init.d/apache2 force-reload ===== Problèmes ===== * Cas d'une erreur sur ServerName au rechargement d'apache\\ [[:apache2|Erreur ServerName]] * Renvoi vers votre 'livebox/neufbox/ClubInternet Box' avec un nom de domaine.\\ [[tutoriel:comment_editer_un_fichier|Éditez]] en [[:sudo|super utilisateur]] le fichier : **/etc/hosts** et ajouter une ligne avec : 127.0.0.1 domain.dnsalias.net * Erreur sur le localhost \\ [[tutoriel:comment_editer_un_fichier|Éditez]] en [[:sudo|super utilisateur]] le fichier : **/etc/hosts** et remplacer les lignes : 127.0.0.1 localhost 127.0.1.1 par : 127.0.0.1 localhost * 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// ===== Liens et ScreenCast ===== Reprise de l'ancienne doc : http://doc.ubuntu-fr.org/tutoriel/virtualhosts_avec_apache2_et_dyndns Attention actuellement, les ScreenCasts ci-dessous ne sont plus disponibles sur le Web pour le moment mais vous pouvez aller sur le serveur pour voir ce qui est disponible [[http://doc.ubuntu-fr-secours.org|Serveur Doc Ubuntu FR Secours]]\\ Installation en vidéo (screencast) de ce tutoriel : http://doc.ubuntu-fr-secours.org/lamp/ Internal Server Error!!! \\ - [[http://screencast.ubuntu-fr-secours.org/screencast/lamp/04-Environnement_de_travail.ogg|04-Environnement_de_travail.ogg]] - 21 Mo - 15 minutes 33 sec ( pourquoi une minute de plus 8-o ). Not Found !!! \\ - [[http://screencast.ubuntu-fr-secours.org/screencast/lamp/04-Environnement_de_travail.avi|04-Environnement_de_travail.avi]] - 39 Mo - 14 minutes 36 sec. Not Found !!! \\ ---- --- //[[|]] Contributeur/Mainteneur : [[utilisateurs:McPeter]]//