Création d'hébergements mutualisés


Introduction

Suite aux articles décrivant l'installation et la configuration d'un serveur Web avec la technologie LAMP, nous allons maintenant configurer un hébergement de type mutualisé. Un hébergement mutualisé est caractérisé par le fait de partager une même machine entre plusieurs utilisateurs, qui disposent chacun de ressources individuelles (accès, sites, base de données, etc.)

Nous allons voir comment installer et configurer un serveur FTP qui permettra aux utilisateurs d'envoyer leurs pages web et leurs sites sur le serveur, en limitant leur accès à leur seul espace individuel. Nous allons également voir comment créer ces utilisateurs pour leur permettre d'utiliser le système de manière limitée au strict nécessaire. Nous terminerons en configurant apache pour qu'il publie plusieurs site différent en fonction de l'adresse qui a été utilisée dans le navigateur

Préparation

Pour illustrer ce qui suit, nous allons imaginer un utilisateur "fabien", dont le site sera accessible à l'adresse http://fabien.bureau.maison/. Pour que cela fonctionne, il faut, comme sur Internet, que cette URL pointe sur l'adresse IP du serveur. Normalement, cela se fait via l'achat et la configuration d'un nom de domaine. Nous allons procéder autrement pour tester notre serveur en réseau local, depuis une machine Windows7 vers notre serveur dont l'adresse IP est 192.168.1.21. La solution consiste à modifier, sur la machine Windows, le fichiers hosts, qui se trouve dans le répertoire "C:\Windows\System32\drivers\etc\".
Pour éditer ce fichier qui se trouve dans un répertoire protégé de Windows, il faut au préalable le copier dans un endroit non protégé, par exemple le bureau.
Ensuite il faut l'éditer et ajouter la dernière ligne ci-dessous qui fait pointer l'adresse fabien.bureau.maison/ sur l'adressse IP 192.168.1.21
On termine en recopiant le fichier modifié à son emplacement d'origine après l'avoir enregistré...
# Copyright (c) 1993-2009 Microsoft Corp.
#
# This is a sample HOSTS file used by Microsoft TCP/IP for Windows.
#
# This file contains the mappings of IP addresses to host names. Each
# entry should be kept on an individual line. The IP address should
# be placed in the first column followed by the corresponding host name.
# The IP address and the host name should be separated by at least one
# space.
#
# Additionally, comments (such as these) may be inserted on individual
# lines or following the machine name denoted by a '#' symbol.
#
# For example:
#
#      102.54.94.97     rhino.acme.com          # source server
#       38.25.63.10     x.acme.com              # x client host

# localhost name resolution is handled within DNS itself.
# 127.0.0.1       localhost
# ::1             localhost

192.168.1.21 fabien.bureau.maison
À partir de ce moment, Windows fera systématiquement la traduction, quel que soit le programme que l'on utilise (navigateur, explorateur, client FTP, etc.)

Installation et Configuration de VsFTPd

VsFTPd (Very Secure FTP daemon = service FTP très sécurisé) est un programme qui, comme son nom l'indique, est très orienté sécurité. Il permet notamment de cloisonner les utilisateurs du programme à leur seul espace. Il s'installe très simplement avec la commande :
yum -y install vsftpd
Ensuite, il faut le paramétrer en éditant son fichier de configuration
# vim /etc/vsftpd/vsftpd.conf
# modifier les lignes existantes suivantes :
anonymous_enable=NO
chroot_local_user=YES
local_umask=007
# ajouter en fin du fichier
allow_writeable_chroot=YES
  • La première modification empêche les accès anonymes au serveur FTP.
  • La seconde spécifie l'utilisation des utilisateurs du système et les cloisonne dans leur répertoire "Home" lors de la connexion au serveur. Ce répertoire devient leur racine individuelle.
  • La troisième option concerne les droits sur les fichiers et dossiers copiés sur le serveur. Il permettra de donner les même privilèges (lecture et écriture) à l'utilisateur et au groupe propriétaire du dossier de téléchargement.
  • L'ajout de la dernière option est nécessaire pour permettre l'écriture dans le dossier racine.
Une fois ces modifications effectuée, il nous faut à présent configurer le firewall :
firewall-cmd --permanent --zone=public --add-service=ftp
firewall-cmd --reload
Puis démarrer et installer le service :
systemctl start vsftpd.service
systemctl enable vsftpd.service

Création des utilisateurs et organisation des droits

Lorsque les utilisateurs se serviront de leur accès pour placer des fichiers et des dossiers sur leur hébergement, ceux-ci ne seront donc en théorie modifiables que par eux.Or, dans certaines situations, il sera important que le serveur Web lui-même (Apache) puisse modifier ou supprimer ceux-ci. Ce  sera par exemple le cas lors de l'installation de CMS : l'installation de ces derniers nécessite en général la création de fichiers de configuration et la suppression de dossiers ne servant que lors de la phase initiale d'installation.
  1. Lorsqu'un utilisateur est créé, un groupe portant son nom est également créé, et l'utilisateur est le seul membre de ce groupe. Nous allons ajouter l'utilisateur système "apache" à ce groupe. 
  2. Nous allons aussi créer un dossier "public_html" dans le dossier personnel de l'utilisateur, et donner sur ce dossier les mêmes droits au groupe qu'à l'utilisateur. 
  3. Apache faisant partie du groupe de l'utilisateur, il héritera des droits en lecture et écriture de ce dernier.
  4. Nous avons déjà configuré les droits lors du transfert FTP pour que les fichiers et dossiers copiés soient eux aussi lisibles et modifiables par leur groupe
# création de l'utilisateur fabien, sans shell (-s /sbin/nologin)
adduser -s /sbin/nologin fabien
# création du mot de passe
passwd fabien
# modification des droits sur le répertoire personnel :
# propriétaire : lecture et écriture
# groupe : lecture
# autre : aucun droit
chmod 750 /home/fabien
# création du dossier de publication du site
mkdir /home/fabien/public_html
# définition des utilisateur et groupe propriétaires
chown fabien:fabien /home/fabien/public_html/
# modification des droits sur ce répertoire
# propriétaire et groupe : lecture et écriture
# autre : aucun
chmod 770 /home/fabien/public_html
# faire entrer l'utilisateur apache dans le groupe fabien
usermod -a -G fabien apache

Premiers tests

Pour commencer, créons un simple fichier index.html sur la machine Windows:
Ensuite, connectons nous au serveur à l'aide d'un client FTP (FileZilla par exemple)
Il suffit de télécharger le fichier sur le serveur, dans le sous-dossier "public_html"

Création du VirtualHost Apache

Si l'on teste le site dans un navigateur, la page qui est affichée n'est pas encore celle que l'on vient d'envoyer. C'est parce que, par défaut, apache va chercher ses pages dans un chemin par défaut, /var/www/html. C'est d'ailleurs dans ce chemin que nous avons créé une page "index.php" lors de l'installation d'Apache et PHP.
En fait, il faut signaler à Apache que si un navigateur lui fait une demande en se servant d'un nom de domaine précis (fabien.bureau.maison dans ce cas), alors, le site à afficher se trouve dans un dossier différent. C'est ce qu'on appelle un VirtualHost (Hôte virtuel). Pour configurer ce dernier, nous allons créer un fichier "fabien.bureau.maison.conf" dans le dossier dédicacé /etc/httpd/conf.d, et qui contiendra :
# vim /etc/httpd/conf.d/fabien.bureau.maison.conf
<VirtualHost *:80>
    ServerAdmin webmaster@bureau.maison
    ServerName fabien.bureau.maison
    ErrorLog logs/bureau.maison-error_log
    CustomLog logs/bureau.maison-access_log common
    DocumentRoot /home/fabien/public_html

    <Directory  "/home/fabien/public_html">
        AllowOverride All
        Options Indexes FollowSymLinks
        AllowOverride None
        Require all granted
    </Directory>

</VirtualHost>
Les points notables sont
  • ServerName : qui signale à Apache quelle sera l'adresse demandée pour ce VirtualHost
  • DocumentRoot : qui spécifie quel dossier constituera la racine de ce VirtualHost
Le reste des paramètres définit notamment où placer les entrées de journal, l'adresse mail du webmaster et les propriétés du dossier racine dans le cadre de son utilisation par Apache.
Après redémarrage du serveur, c'est le site personnel de l'utilisateur "fabien" qui est correctement affiché.
Pour ajouter d'autres utilisateurs, il suffit de refaire cette procédure avec d'autre données (nom, adresse, etc.). Ceci termine la mise en place de l'hébergement mutualisé, et nous verrons dans un prochain article comment l'utiliser pour héberger un site créé avec un CMS, Joomla en l'occurrence.