Serveur LAMP - Créer un/des répertoires de travail

2019/06/25 - Cette page est mise dans mon répertoire utilisateur d'ubuntu-fr. Elle n'a absolument pas la finalité donnée sur la page https://doc.ubuntu-fr.org/tutoriel/lamp_repertoires_de_travail. J'en ai été l'auteur original, mais les modifications apportées sortent complètement du cadre initial de ce tutoriel. Des utilisateurs cherchant encore cette base, pourront la trouver dans "MES" pages utilisateur (ci-dessous). Cette page est donc en quelque-sorte une archive "visible". Je tacherais de la maintenir à jour

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 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.

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 :-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.

É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> :

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
<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

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 / 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')

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 

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

* 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

  • utilisateurs/mcpeter/tuto_perso/lamp_repertoires_de_travail.txt
  • Dernière modification: Le 11/09/2022, 13:13
  • par moths-art