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 24/04/2018, 00:14] 154.72.167.167 [Protection de /var/www] |
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 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.0 | + | |
- | </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 # local | + | |
- | Allow from 192.168.1.0/24 # reseau | + | |
- | </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/**. | + | |
+ | 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]]. | ||
- | ==== Création des répertoires de travail ==== | + | ===== Prérequis ===== |
- | 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\\ | + | Afin de suivre ce tutoriel, il vous faut une pile [[:LAMP]] ou au moins [[:apache2|Apache]] installé sur une version récente d'Ubuntu. |
- | sudo mkdir /media/www-dev | + | Vous pouvez donc au choix : |
- | sudo mkdir /media/www-dev/public | + | * 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) |
- | sudo mkdir /media/www-dev/private | + | * ou dans le cas contraire simplement installer le paquet [[apt>apache2]] (voir la [[:apache2#installation|documentation à ce sujet]]) |
+ | 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''.\\ | ||
+ | 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.\\ | ||
+ | Vous pouvez également consulter la documentation concernant la commande [[:utilisateurs:roschan:sudo|sudo]] si elle ne vous est pas familière. | ||
- | ==== Donner les droits utilisateur aux répertoires de travail ==== | + | ===== Mise en place d'un espace public ===== |
- | <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.\\ | + | ==== Création du répertoire 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.</note> | + | |
- | sudo chown -R $USER:users /media/www-dev | + | 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''. |
+ | 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]]) : | ||
+ | <code>sudo mkdir /var/www/public</code> | ||
+ | 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 : | ||
- | <note important>Si vous n'utilisez pas /media/www/ mais un dossier personnalisé, attention : | + | <code>sudo chown $USER:www-data /var/www/public |
- | * 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. | + | chmod 750 /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 | + | Pour l'exemple nous allons y créer un fichier ''index.html'' contenant le minimum nécessaire à l'affichage d'un message d'accueil : |
- | sudo chown $USER:users /media/votre_disque/vos_sites | + | <code>nano /var/www/public/index.html</code> |
- | sudo chown -R $USER:users /media/votre_disque/vos_sites/votre_site | + | Ce qui ouvre l'éditeur [[:nano]] dans lequel nous allons coller : |
- | </note> | + | |
- | ==== Configuration d'alias dans apache ==== | + | |
- | Pour pouvoir accéder à ces répertoires, apache a besoin d'une *//redirection//*.\\ | + | <file - index.html><html lang="fr"> |
- | Cette *//redirection//* se présente sous la forme : http://nom_de_domaine.tld/nom_de_redirection\\ | + | <head> |
- | Ces *//redirections//* s'appellent des **Alias**.\\ | + | <meta charset="UTF-8"> |
- | Il nous faut donc ajouter deux alias, un pour **public** et un pour **private**. | + | <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> | ||
- | [[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> :\\ | + | Puis //Ctrl//+//O// pour sauvegarder et //Ctrl//+//X// pour quitter. |
- | <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> | + | ==== Création de l'hôte virtuel ==== |
- | A partir de 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 | + | |
- | Require all granted | + | |
- | </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 | + | |
- | <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 | + | Ce qui ouvre l'éditeur [[:nano]] dans lequel nous allons coller : |
- | <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 | + | <file - public.conf><VirtualHost *:80> |
- | Alias /private /media/www-dev/private | + | DocumentRoot "/var/www/public" |
- | <Directory /media/www-dev/private> | + | <Directory "/var/www/public"> |
- | Options Indexes FollowSymLinks MultiViews | + | Options +FollowSymLinks |
- | AllowOverride All | + | AllowOverride all |
- | Order deny,allow | + | Require all granted |
- | Deny from all | + | </Directory> |
- | Allow from 127.0.0.1 # Local | + | ErrorLog /var/log/apache2/error.public.log |
- | Allow from 192.168.1.0/24 # Réseau | + | CustomLog /var/log/apache2/access.public.log combined |
- | Allow from .w3.org # W3C | + | </VirtualHost></file> |
- | Allow from sandbox.paypal.com # Paypal | + | |
- | </Directory> | + | |
- | </file> | + | |
- | ==== Ajout de liens symboliques ==== | + | Puis //Ctrl//+//O// pour sauvegarder et //Ctrl//+//X// pour quitter. |
- | 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 faut ensuite activer cet hôte : |
- | Il suffit tout simplement de créer un lien symbolique dans **/var/www** | + | <code>sudo a2ensite public</code> |
- | <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.\\ | + | 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 : |
- | les liens symboliques dans **/var/www** se font via 'sudo' et donc sont en //root:root//. **Ne changez pas ces droits !**</note> | + | <code>sudo a2dissite 000-default</code> |
- | sudo ln -s /media/www-dev/public /var/www/html/public | + | Puis nous pouvons redémarrer Apache afin qu'il prenne en compte notre nouvelle configuration : |
- | sudo ln -s /media/www-dev/private /var/www/html/private | + | <code>sudo systemctl restart apache2</code> |
- | Il vous faudra également effacer le fichier index.html pour que cela prenne effet : | + | 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. |
- | sudo rm /var/www/html/index.html | + | ===== Mise en place d'un espace privé ===== |
- | ==== Éviter le 403 ==== | + | ==== Création du répertoire de travail ==== |
- | 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 s'il tente d'accéder *par miracle* <-- faut le savoir :-P à votre répertoire '//private//') | + | De la même manière nous allons créer un répertoire ''/var/www/private'' : |
+ | <code>sudo mkdir /var/www/private</code> | ||
- | 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/ ). | + | Puis modifier pareillement les [[:apache2#permissions]] : |
+ | <code>sudo chown $USER:www-data /var/www/private | ||
+ | chmod 750 /var/www/private</code> | ||
- | On va donc remédier à cela en redirigeant les visiteurs automatiquement vers le répertoire '//public//' en cas d'erreur 403.\\ | + | Pour cet exemple nous n'allons pas créer de fichier index, mais seulement un fichier ''test.txt'' : |
- | Il suffit d'ajouter la ligne : | + | <code>touch /var/www/private/test.txt</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). | + | ==== Création de l'hôte virtuel ==== |
- | Avant Ubuntu 14.04, dans le fichier : /etc/apache2/sites-available/default, ajouter à la suite de <Directory /var/www> la ligne : | + | Notre [[:apache2#creation_d_hotes_virtuels|hôte virtuel]] sera cette fois configuré dans le fichier ''/etc/apache2/sites-available/private.conf'' : |
- | 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. | + | <code>sudo nano /etc/apache2/sites-available/private.conf</code> |
- | sudo /etc/init.d/apache2 force-reload | + | |
- | ===== Problèmes ===== | + | Ce qui ouvre l'éditeur [[:nano]] dans lequel nous allons coller : |
- | * Cas d'une erreur sur ServerName au rechargement d'apache\\ | + | <file - private.conf><VirtualHost *:80> |
- | [[:apache2|Erreur ServerName]] | + | ServerName private.localhost |
+ | DocumentRoot "/var/www/private" | ||
+ | <Directory "/var/www/private"> | ||
+ | Options +FollowSymLinks +Indexes | ||
+ | AllowOverride all | ||
+ | Require ip ::1 127.0.0.1 192.168 | ||
+ | </Directory> | ||
+ | ErrorLog /var/log/apache2/error.private.log | ||
+ | CustomLog /var/log/apache2/access.private.log combined | ||
+ | </VirtualHost></file> | ||
- | * Renvoi vers votre 'livebox/neufbox/ClubInternet Box' avec un nom de domaine.\\ | + | Puis //Ctrl//+//O// pour sauvegarder et //Ctrl//+//X// pour quitter. |
- | [[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 \\ | + | Il faut ensuite activer cet hôte et redémarrer Apache : |
- | [[tutoriel:comment_editer_un_fichier|Éditez]] en [[:sudo|super utilisateur]] le fichier : **/etc/hosts** et remplacer les lignes : | + | <code>sudo a2ensite private.conf |
- | 127.0.0.1 localhost | + | sudo systemctl restart apache2</code> |
- | 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. | + | * 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''. | ||
- | 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** | + | 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''. |
- | <code>sudo nano /etc/apache2/sites-available/000-default.conf</code> | + | |
- | C'est la ligne suivante: //DocumentRoot /var/www/html//\\ | + | |
- | qu'il faut modifier à: //DocumentRoot /var/www/chemin-vers-son-autre-répertoire// | + | |
---- | ---- | ||
- | --- //[[|]] Contributeur/Mainteneur : [[utilisateurs:McPeter]]// | + | //Contributeurs : [[:utilisateurs:krodelabestiole]]// |