Différences
Ci-dessous, les différences entre deux révisions de la page.
Les deux révisions précédentes Révision précédente Prochaine révision | Révision précédente | ||
tutoriel:lamp_repertoires_de_travail [Le 07/07/2015, 20:49] 82.224.146.64 [Configuration d'alias dans apache] |
tutoriel:lamp_repertoires_de_travail [Le 19/05/2023, 06:34] (Version actuelle) krodelabestiole ancienne révision (Le 07/10/2021, 18:37) restaurée (nope il ne manque rien) |
||
---|---|---|---|
Ligne 1: | Ligne 1: | ||
- | {{tag>serveur tutoriel}} | + | {{tag>serveur tutoriel bionic}} |
- | + | ||
- | ---- | + | |
+ | {{ :logo:apache-logo.png?80nolink| Logo du logiciel Apache 2}} | ||
====== Serveur LAMP - Créer un/des répertoires de travail ====== | ====== Serveur LAMP - Créer un/des répertoires de travail ====== | ||
- | ===== Présentation ===== | + | Ce tutoriel décrit comment mettre en place un espace de travail pour le [[:web]], avec la mise en pratique de deux cas de figures : un espace public, consultable en [[:web#http_et_navigation|HTTP]] par les internautes et affichant une page web, et un espace privé, seulement visible depuis la machine ou le réseau local et listant les fichiers qui y sont présents. |
- | + | ||
- | 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. | + | |
- | <note important>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é." </note> | + | |
- | 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 <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 :\\ | + | |
- | <file> | + | |
- | <Directory /var/www/> | + | |
- | Options Indexes FollowSymLinks MultiViews | + | |
- | AllowOverride None | + | |
- | Order allow,deny | + | |
- | Allow from all | + | |
- | </Directory> | + | |
- | </file> | + | |
- | en :\\ | + | |
- | A partir de ubuntu 13.10 et apache 2.4 | + | |
- | <file> | + | |
- | <Directory /var/www/> | + | |
- | Options Indexes FollowSymLinks MultiViews | + | |
- | AllowOverride None | + | |
- | <RequireAny> | + | |
- | Require ip 127.0.0.1 | + | |
- | Require ip 192.168.1 | + | |
- | </RequireAny> | + | |
- | </Directory> | + | |
- | </file> | + | |
- | + | ||
- | Pour les versions précédentes à ubuntu 13.10 et apache 2.4 | + | |
- | + | ||
- | <file> | + | |
- | <Directory /var/www/> | + | |
- | Options Indexes FollowSymLinks MultiViews | + | |
- | AllowOverride None | + | |
- | Order Deny,Allow | + | |
- | Deny from all | + | |
- | Allow from 127.0.0.1 | + | |
- | Allow from 192.168.1.0/24 | + | |
- | </Directory> | + | |
- | </file> | + | |
- | + | ||
- | 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\\ | + | La mise en place de ces espaces de travail se fait grâce à la fonctionnalité d'[[:apache2#hotes_virtuels|hôte virtuel]] (//VirtualHost//) dont dispose le serveur HTTP [[:apache2|Apache]]. |
- | sudo mkdir /media/www-dev | + | ===== Prérequis ===== |
- | sudo mkdir /media/www-dev/public | + | |
- | sudo mkdir /media/www-dev/private | + | |
+ | Afin de suivre ce tutoriel, il vous faut une pile [[:LAMP]] ou au moins [[:apache2|Apache]] installé sur une version récente d'Ubuntu. | ||
- | ==== Donner les droits utilisateur aux répertoires de travail ==== | + | Vous pouvez donc au choix : |
+ | * suivre la [[:lamp#installation|méthode d'installation de LAMP]] (si vous avez besoin de [[:PHP]] et d'un serveur de bases de données) | ||
+ | * ou dans le cas contraire simplement installer le paquet [[apt>apache2]] (voir la [[:apache2#installation|documentation à ce sujet]]) | ||
- | <note important>__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.\\ | + | Il est aussi conseillé d'avoir quelques rudiments concernant la ligne de commande. Si ce n'est pas le cas mieux vaut commencer par essayer de vous former un minimum en consultant [[:tutoriel:console_ligne_de_commande|cette documentation]], en particulier les chapitres concernant les commandes ''ls'' ''cd'' ''mkdir'' ''mv'' ''cp'' et ''rm''.\\ |
- | 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.\\ | + | Il peut aussi être très utile de consulter la documentation de [[:nano]], qui est probablement l'éditeur de fichier en ligne de commande le plus simple à prendre en main. C'est celui que nous documenterons dans ce tutoriel.\\ |
- | '**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.</note> | + | Vous pouvez également consulter la documentation concernant la commande [[:utilisateurs:roschan:sudo|sudo]] si elle ne vous est pas familière. |
- | sudo chown -R $USER:users /media/www-dev | + | ===== Mise en place d'un espace public ===== |
+ | ==== Création du répertoire de travail ==== | ||
+ | Pour ce cas de figure nous voulons qu'Apache affiche le contenu des fichiers que nous créerons dans le répertoire ''/var/www/public''. | ||
- | <note important>Si vous n'utilisez pas /media/www/ mais un dossier personnalisé, attention : | + | Nous allons donc commencer par créer ce répertoire. Par défaut le répertoire ''/var/www'' appartient à l'utilisateur //root// et les autres utilisateurs n'y ont pas accès en écriture. Il nous faut donc créer ce répertoire avec les [[:sudo|permissions super utilisateur]] ([[:utilisateurs:roschan:sudo|sudo]]) : |
- | * 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. | + | <code>sudo mkdir /var/www/public</code> |
- | * 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 | + | Dans la foulée nous allons modifier les [[:permissions]] de ce répertoire en suivant [[:apache2#permissions|cette documentation]], afin qu'Apache soit en mesure d'accéder au répertoire et que nous soyons en mesure d'y apporter des modifications : |
- | sudo chown $USER:users /media/votre_disque/vos_sites | + | <code>sudo chown $USER:www-data /var/www/public |
+ | chmod 750 /var/www/public</code> | ||
- | sudo chown -R $USER:users /media/votre_disque/vos_sites/votre_site | + | Pour l'exemple nous allons y créer un fichier ''index.html'' contenant le minimum nécessaire à l'affichage d'un message d'accueil : |
- | </note> | + | |
- | ==== Configuration d'alias dans apache ==== | + | |
- | Pour pouvoir accéder à ces répertoires, apache a besoin d'une *//redirection//*.\\ | + | <code>nano /var/www/public/index.html</code> |
- | 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 <Directory /var/www>....</Directory> :\\ | + | Ce qui ouvre l'éditeur [[:nano]] dans lequel nous allons coller : |
- | <note tip>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</note> | + | <file - index.html><html lang="fr"> |
+ | <head> | ||
+ | <meta charset="UTF-8"> | ||
+ | <meta name="viewport" content="width=device-width, initial-scale=1.0"> | ||
+ | <title>Espace public</title> | ||
+ | </head> | ||
+ | <body> | ||
+ | <h1>Bienvenue sur notre espace public.</h1> | ||
+ | </body> | ||
+ | </html></file> | ||
- | A partir de ubuntu 13.10 et apache 2.4 | + | Puis //Ctrl//+//O// pour sauvegarder et //Ctrl//+//X// pour quitter. |
- | <file> | + | |
- | ## 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 | + | ==== Création de l'hôte virtuel ==== |
- | 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> | + | |
- | </file> | + | |
- | Pour les versions précédentes à ubuntu 13.10 et apache 2.4 | + | Nous allons [[:apache2#creation_d_hotes_virtuels|configurer notre hôte virtuel]] dans un fichier dédié ''/etc/apache2/sites-available/public.conf'' : |
- | <file> | + | |
- | ## 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 | + | <code>sudo nano /etc/apache2/sites-available/public.conf</code> |
- | 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 | + | |
- | Allow from 192.168.1.0/24 | + | |
- | Allow from .w3.org | + | |
- | Allow from sandbox.paypal.com | + | |
- | </Directory> | + | |
- | </file> | + | |
- | ==== Ajout de liens symboliques ==== | + | Ce qui ouvre l'éditeur [[:nano]] dans lequel nous allons coller : |
- | 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'.\\ | + | <file - public.conf><VirtualHost *:80> |
- | Il suffit tout simplement de créer un lien symbolique dans **/var/www** | + | DocumentRoot "/var/www/public" |
+ | <Directory "/var/www/public"> | ||
+ | Options +FollowSymLinks | ||
+ | AllowOverride all | ||
+ | Require all granted | ||
+ | </Directory> | ||
+ | ErrorLog /var/log/apache2/error.public.log | ||
+ | CustomLog /var/log/apache2/access.public.log combined | ||
+ | </VirtualHost></file> | ||
- | <note important>__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.\\ | + | Puis //Ctrl//+//O// pour sauvegarder et //Ctrl//+//X// pour quitter. |
- | les liens symboliques dans **/var/www** se font via 'sudo' et donc sont en //root:root//. **Ne changez pas ces droits !**</note> | + | |
- | sudo ln -s /media/www-dev/public /var/www/html/public | + | Il faut ensuite activer cet hôte : |
- | sudo ln -s /media/www-dev/private /var/www/html/private | + | <code>sudo a2ensite public</code> |
- | Il vous faudra également effacer le fichier index.html pour que cela prenne effet : | + | Ce //VirtualHost// ne possède pas de directive ''ServerName'' ou ''ServerAlias''. Il sera donc utilisé par défaut pour les requêtes sur le port 80 si aucun autre //VirtualHost// ne correspond exactement au nom de domaine appelé. Pour qu'il soit pris en compte il faut par contre désactiver l'hôte virtuel par défaut d'Apache, qui arrive en priorité en suivant l'alphabet : |
+ | <code>sudo a2dissite 000-default</code> | ||
- | sudo rm /var/www/html/index.html | + | Puis nous pouvons redémarrer Apache afin qu'il prenne en compte notre nouvelle configuration : |
+ | <code>sudo systemctl restart apache2</code> | ||
- | ==== Éviter le 403 ==== | + | La page d'accueil publique devrait alors être visible à l'adresse [[http://localhost/]] pour la machine locale, ou à l'adresse IP du serveur pour les autres machines. |
- | 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//') | + | ===== Mise en place d'un espace privé ===== |
- | 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/ ). | + | ==== Création du répertoire de travail ==== |
- | On va donc remédier à cela en redirigeant les visiteurs automatiquement vers le répertoire '//public//' en cas d'erreur 403.\\ | + | De la même manière nous allons créer un répertoire ''/var/www/private'' : |
- | Il suffit d'ajouter la ligne : | + | <code>sudo mkdir /var/www/private</code> |
- | 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). | + | Puis modifier pareillement les [[:apache2#permissions]] : |
+ | <code>sudo chown $USER:www-data /var/www/private | ||
+ | chmod 750 /var/www/private</code> | ||
- | Avant Ubuntu 14.04, dans le fichier : /etc/apache2/sites-available/default, ajouter à la suite de <Directory /var/www> la ligne : | + | Pour cet exemple nous n'allons pas créer de fichier index, mais seulement un fichier ''test.txt'' : |
- | Allow from localhost # Local | + | <code>touch /var/www/private/test.txt</code> |
- | 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. | + | ==== Création de l'hôte virtuel ==== |
- | sudo /etc/init.d/apache2 force-reload | + | |
- | ===== Problèmes ===== | + | Notre [[:apache2#creation_d_hotes_virtuels|hôte virtuel]] sera cette fois configuré dans le fichier ''/etc/apache2/sites-available/private.conf'' : |
- | * Cas d'une erreur sur ServerName au rechargement d'apache\\ | + | <code>sudo nano /etc/apache2/sites-available/private.conf</code> |
- | [[:apache2|Erreur ServerName]] | + | |
- | * Renvoi vers votre 'livebox/neufbox/ClubInternet Box' avec un nom de domaine.\\ | + | Ce qui ouvre l'éditeur [[:nano]] dans lequel nous allons coller : |
- | [[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 \\ | + | <file - private.conf><VirtualHost *:80> |
- | [[tutoriel:comment_editer_un_fichier|Éditez]] en [[:sudo|super utilisateur]] le fichier : **/etc/hosts** et remplacer les lignes : | + | ServerName private.localhost |
- | 127.0.0.1 localhost | + | DocumentRoot "/var/www/private" |
- | 127.0.1.1 <hostname> | + | <Directory "/var/www/private"> |
- | par : | + | Options +FollowSymLinks +Indexes |
- | 127.0.0.1 localhost <hostname> | + | AllowOverride all |
- | + | Require ip ::1 127.0.0.1 192.168 | |
- | * Apache2 + Ubuntu 14.04 (et systèmes suivants) nouveau répertoire racine: | + | </Directory> |
- | + | ErrorLog /var/log/apache2/error.private.log | |
- | 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: | + | CustomLog /var/log/apache2/access.private.log combined |
- | **/var/www/html** | + | </VirtualHost></file> |
- | 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. | + | Puis //Ctrl//+//O// pour sauvegarder et //Ctrl//+//X// pour quitter. |
- | 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** | + | Il faut ensuite activer cet hôte et redémarrer Apache : |
- | <code>sudo nano /etc/apache2/sites-available/000-default.conf</code> | + | <code>sudo a2ensite private.conf |
- | C'est la ligne suivante: //DocumentRoot /var/www/html//\\ | + | sudo systemctl restart apache2</code> |
- | 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 | + | * L'option ''+Indexes'' permet le [[:apache2#index|listing des fichiers]]. |
+ | * La directive //[[https://httpd.apache.org/docs/current/fr/mod/mod_authz_core.html#require|Require ip]]// ne permet l'utilisation de cet hôte que par les machines possédant l'adresse IP locale (''::1'' en [[wpfr>IPv6]] ou ''127.0.0.1'' en [[wpfr>IPv4]]) ou une IP du réseau local (commençant par ''192.168''). | ||
+ | * Cet hôte virtuel ne sera appelé que pour le nom de domaine ''private.localhost'', tel que défini par la directive ''ServerName''. | ||
- | 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]]\\ | + | L'espace privé sera alors accessible depuis cette machine à l'adresse [[http://private.localhost/]] et listera les fichiers présents dans le répertoire ''/var/www/private'', en l'occurrence notre fichier ''test.txt''. |
- | <del> | + | |
- | 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 !!! \\ | + | |
- | </del> | + | |
---- | ---- | ||
- | --- //[[|]] Contributeur/Mainteneur : [[utilisateurs:McPeter]]// | + | //Contributeurs : [[:utilisateurs:krodelabestiole]]// |