Installation et configuration d’un serveur Web complet sous Debian 7
Publié le 7 janvier 2014 Par WOoOinux
Dans ce tutoriel, nous allons mettre en place un serveur Web (donc destiné à héberger des sites Internet) avec une configuration similaire à celle d’un hébergement mutualisé. Nous verrons donc comment installer LAMP ainsi qu’un serveur FTP. Attention ce tutoriel nécessite tout de même des connaissances de base en administration de système Linux.
LAMP c’est quoi ?
Un serveur LAMP est un serveur Web. Historiquement, l’acronyme « LAMP » fait référence aux quatre composantes d’un tel serveur Web :
-
Linux : le système d’exploitation constituant la base du système.
-
Apache : le serveur HTTP qui gère la communication avec le client.
-
MySQL : le système de gestion de base de données.
-
PHP : le langage de script utilisé pour générer les pages dynamiques.
1 – Installation d’Apache :
Dans un terminal (en tant qu’utilisateur root), entrez la commande suivante :
Afin de tester le bon fonctionnement d’Apache, lancez votre navigateur et saisissez l’une des adresses ci-dessous :
http://localhost (si vous êtes en local, donc si votre ordinateur fait office de serveur)
http://adresse_ip_de_votre_serveur (si votre serveur est à distance)
Si vous voyez le message “It works !” votre serveur Apache fonctionne :
Par défaut, Apache affiche certaines informations sur les pages par défaut (comme la page d’erreur par exemple)
On constate ici que le système d’exploitation, la version d’Apache et de PHP sont clairement affichés ce qui n’est pas appréciable dans la mesure où ces informations peuvent servir à un éventuel pirate. Nous allons donc demander à Apache de ne plus afficher ces informations :
Ajoutez-y la ligne suivante en fin de fichier :
Faites CTRL+O puis ENTRÉE pour sauvegarder
Faites CTRL+X puis ENTRÉE pour quitter
Et voilà :
Nous allons maintenant activer des modules supplémentaires d’Apache :
Le module Rewrite : Permet d’activer la réécriture d’URl (URL rewriting) et donc d’obtenir des URL plus propres.
Le module Userdir : Permet de créer un utilisateur système par site. Chaque site sera donc attribué à un utilisateur et se situera dans le répertoire /home/utilisateur/public_html de ce dernier.
On active les modules
On redémarre Apache pour que les modules soient pris en compte
2 – Installation de PHP
Notre serveur Web fonctionne mais, pour le moment, n’est pas capable de gérer des pages dynamiques ce qui peut très vite nous limiter (notamment si vous souhaitez héberger des CMS comme Joomla, Drupal ou Wordpress par exemple).
On va donc installer PHP ainsi que tous les modules qui vont bien :
On va aussi installer PHP-APC (Alternatice PHP Cache) qui va permettre d’accélérer PHP en générant un cache du code PHP.
On redémarre Apache pour valider les nouveaux réglages :
Configurons maintenant un peu notre serveur PHP :
Quelques valeurs à modifier :
On redémarre Apache pour valider les nouveaux réglages :
Nous allons maintenant tester le bon fonctionnement du serveur PHP. Pour cela, nous allons créer un utilisateur système et un mini site Internet.
Attribuez lui un mot de passe puis validez.
Nous allons maintenant créer le répertoire public_html de l’utilisateur phpinfo dans lequel on placera le mini site
Ensuite, créons le seul et unique fichier de notre mini site
Insérez-y le code PHP suivant :
Faites CTRL+O puis ENTRÉE pour sauvegarder
Faites CTRL+X puis ENTRÉE pour quitter
Maintenant donnons les bonnes permissions au répertoire public_html de l’utilisateur phpinfo ainsi qu’au fichier qu’il contient :
Dans votre navigateur, entrez l’une des adresse suivantes :
http://localhost/~phpinfo (si vous êtes en local)
http://adresss_ip_de_votre_serveur/~phpinfo (si votre serveur est à distance)
Vous devriez voir apparaître la configuration de votre serveur PHP
Si vous ne voyez pas cette page et que votre navigateur vous propose de télécharger un fichier PHP :
Ouvrez le fichier /etc/apache2/mods-enabled/php5.conf
Et commentez les lignes ci-dessous :
Faites CTRL+O puis ENTRÉE pour sauvegarder
Faites CTRL+X puis ENTRÉE pour quitter
Redémarrez le serveur Apache :
Entrez à nouveau l’adresse dans votre navigateur. La page devrait s’afficher normalement à présent.
3 – Installation de la base de données MySQL
La plupart des sites Internet utilisent une base de données pour stocker toutes sortes d’informations comme les articles ou les comptes utilisateurs par exemple. Il va donc falloir installer MySQL qui est un Système de Gestion de Bases de Données (SGBD). Il existe d’autres SGBD comme PostgreSQL et Oracle mais nous nous arrêterons sur MySQL ici.
Pendant l’installation, vous devrez choisir le mot de passe administrateur de MySQL. Choisissez un mot de passe suffisamment solide et notez-le bien !
Côté configuration de MySQL on va simplement lui demander d’encoder les bases de données en UTF-8 par défaut.
Éditez le fichier /etc/mysql/my.cnf
Puis modifiez les valeurs suivantes
Faites CTRL+O puis ENTRÉE pour sauvegarder
Faites CTRL+X puis ENTRÉE pour quitter
Redémarrez le serveur MySQL pour valider les modifications
Le serveur de base de données MySQL est prêt à l’emploi. Nous allons maintenant installer phpMyAdmin, une application qui va nous permettre de gérer nos bases de données via le navigateur et une interface graphique simple.
Installez phpMyAdmin
Pendant l’installation, phpMyAdmin va vous demander le mot de passe de l’administrateur de la base de données MySQL (que je vous ai demandé de bien noter tout à l’heure). Ce mot de passe lui permettra de se connecter aux bases de données. Saisissez ce mot de passe puis faites OK
phpMyAdmin va ensuite vous demander de choisir un mot de passe pour vous connecter à l’interface phpMyAdmin. Saisissez ce mot de passe (deux fois en tout) puis faites OK
Voilà ! L’installation de phpMyAdmin est terminé ! Vous pouvez y accéder en saisissant l’une des adresses ci-dessous dans votre navigateur :
http://localhost/phpmyadmin (si vous êtes en local)
http://adresse_ip_de_votre_serveur/phpmyadmin (si votre serveur est à distance)
Si tout s’est bien passé vous devriez arriver à l’écran de connexion de phpMyAdmin
Connectez-vous avec le mot de passe que vous avez choisi lors de l’installation pour vous connecter à l’interface phpMyAdmin
Et voila !
4 – Sécurisation du serveur Web avec Suexec et Suphp
Notre serveur est parfaitement fonctionnel cependant, le fait que chaque site soit la propriété d’un utilisateur peut poser des problèmes. Par exemple, vous hébergez un CMS (Joomla ou Wordpress). Tous les fichiers du site sont la propriété d’un utilisateur or lorsque vous utilisez ce site via votre navigateur c’est l’utilisateur Apache (www-data) qui exécute ces fichiers et donc n’aura pas les droits suffisants pour effectuer certaines actions comme les mises à jour du site où l’installation d’une extension par exemple. La solution de facilité serait de modifier les permissions des fichiers et dossiers du site pour qu’Apache ait le droit d’agir dessus mais cela entraînerait un défaut de sécurité. Pire encore, une autre solution de facilité serait de donner la propriété des fichiers et dossiers du site à l’utilisateur Apache (www-data) mais là aussi cela entraînerait un gros défaut de sécurité car si un hackeur arrive à prendre possession du site il se retrouve avec les droits d’Apache et peut causer des dégâts sur le serveur en plus du site. De plus, vous ne pourriez plus utiliser le site par FTP car vous n’auriez plus les droits adéquats.
Pour remédier à ces problèmes, nous allons installer Suexec et Suphp sur le serveur qui va permettre d’exécuter le site en tant que l’utilisateur propriétaire des fichiers et dossiers de ce dernier et non plus en tant qu’utilisateur Apache (www-data). Cette méthode à plusieurs avantages :
- Sécuriser le serveur : Si un hackeur prend possession du site, il ne pourra pas causer de dégâts sur le serveur puisqu’il n’aura pas les droits Apache.
- Régler les problèmes de permissions : Le masque de permissions appliqué lors du transfert des fichiers via FTP sera suffisant et l’utilisateur n’aura pas besoin de les rendre trop permissives. Il pourra effectuer les mises à jour de son site, installer une extension ou bien encore uploader une image via un gestionnaire de média sans aucun problème !
Commencez par installer Suexec :
Puis éditez le fichier /etc/apache2/suexec/www-data
Si vous avez suivi ce tutoriel depuis le début vous devez modifiez ce fichier comme ci-dessous :
Faites CTRL+O puis ENTRÉE pour sauvegarder
Faites CTRL+X puis ENTRÉE pour quitter
Installez ensuite Suphp
Ensuite, éditez le fichier /etc/suphp/suphp.conf
Et modifiez le comme ci-dessous :
À ce stade il faut maintenant désactiver le module PHP5 puis activer Suxec et Suphp pour qu’ils prennent le relais.
Redémarrez maintenant Apache pour valider le tout
Comme Suphp remplace PHP5 il faut aussi penser à copier la configuration que nous avons fait un peu plus haut dans le fichier /etc/php5/apache2/php.ini vers celui de PHP5-CGI (utilisé par Suphp).
Réalisez d’abord une sauvegarde du fichier de configuration de PHP-CGI
Puis copiez la configuration de PHP5 à la place de celle de PHP-CGI
Redémarrez maintenant Apache pour valider les modifications
Voilà ! Suexec et Suphp sont activés.
Pour spécifier le propriétaire d’un site à Apache il faudra ajouter la ligne ci-dessous dans le virtualhost de chaque site :
Le problème maintenant c’est que phpMyAdmin n’est plus accessible pour deux raisons :
- Les fichiers de phpMyAdmin appartiennent à Root
- Les fichiers de phpMyAdmin sont placés dans /usr/share et ce répertoire n’est pas pris en compte par défaut dans Suphp
Nous allons donc devoir remédier à ce problème en créant un utilisateur phpmyadmin à qui nous donnerons la propriété des fichiers de… phpMyAdmin !
Créez un utilisateur nommé phpmyadmin
Créez-lui ensuite son répertoire qui accueillera les fichiers de phpMyAdmin
Comme je l’expliquais un peu plus haut, Suphp ne prend pas en comptes les sites placés dans /usr/share pour des raisons de sécurité or, les fichiers de phpMyAdmin s’y trouvent donc nous allons copier ces fichiers dans le répertoire public_html de l’utilisateur phpmyadmin afin de résoudre ce problème.
Copiez les fichiers de phpMyAdmin dans le répertoire /home/phpmyadmin/public_html
Donnez la propriété des fichiers copiés à l’utilisateur phpmyadmin
Enfin, modifiez les permissions des fichiers copiés afin qu’elles correspondent au masque de permission autorisé par Suphp (si vous ne le faites pas Suphp vous renverra une “Internal server error” lorsque vous tenterez d’y accéder avec votre navigateur car il jugera les permissions trop… permissives et donc bloquera l’accès pour des raisons de sécurité)
Il ne nous reste plus qu’à modifier les virtualhosts afin qu’ils ne redirigent plus vers /usr/share/phpmyadmin mais vers /home/phpmyadmin/public_html. Il y a deux cas de figure possible en fonction de la manière dont vous accédez à votre phpmyadmin :
- Cas 1 : Vous y accédez en ajoutant /phpmyadmin après l’adresse IP de votre serveur ou bien un nom de domaine qui pointe vers votre serveur (http://adresse_ip_de_votre_serveur/phpmyadmin ou bien http://mondomaine.tld/phpmyadmin par exemple)
- Cas 2 : Vous y accédez par le biais d’un sous-domaine qui pointe vers votre serveur (http://phpmyadmin.mondomaine.tld par exemple)
Voyons le cas 1 :
Effectuez une copie préventive de la configuration par défaut
Éditez ensuite le fichier /etc/phpmyadmin/apache.conf
Et remplacez toutes les occurrences de /usr/share/phpmyadmin par /home/phpmyadmin/public_html
Faites CTRL+O puis ENTRÉE pour sauvegarder
Faites CTRL+X puis ENTRÉE pour quitter
Voyons maintenant le cas 2 :
Créez le fichier virtualhost nommé phpmyadmin dans /etc/apache2/sites-available/
Et copiez-y le contenu ci-dessous (prenez soin de modifier la ligne ServerName avec votre sous-domaine) :
Faites CTRL+O puis ENTRÉE pour sauvegarder
Faites CTRL+X puis ENTRÉE pour quitter
Le fichier virtualhost est crée mais n’est pas encore actif.
Activez le virtualhost phpmyadmin
Puis redémarrez Apache pour valider les modifications
Et voilà ! Votre phpMyAdmin est de nouveau accessible !
5 – Installation d’un serveur FTP
Votre serveur peut maintenant faire fonctionner des sites Internet cependant, si vous souhaitez créer un hébergement pour un ami ou un client par exemple, il va falloir lui donner un moyen de transférer les fichiers de son site sur l’espace de stockage que vous lui aurez créé. On installera pour cela un serveur FTP (File Transfert Protocol) qui, comme son nom l’indique, permet de transférer des fichiers. Il existe plusieurs serveurs FTP sous Linux mais nous verrons VSFTPD car il est très efficace et simple à utiliser.
Commencez par installer le serveur FTP :
Configurez ensuite le serveur FTP
Et modifiez les lignes suivantes :
Faites CTRL+O puis ENTRÉE pour sauvegarder
Faites CTRL+X puis ENTRÉE pour quitter
Redémarrez ensuite VSFTPD pour que la configuration soit prise en compte :
Et voilà, le serveur FTP est prêt à l’emploi !
Il se peut que vous obteniez le message d’erreur lors d’une tentative de connexion à l’un de vos comptes FTP :
500 OOPS: vsftpd: refusing to run with writable root inside chroot()
La solution à ce problème dépendra de votre version de VSFTPD (source : http://lindev.fr/index.php?post/2013/04/05/wheezy-vsftpd-et-chroot) :
Tout d’abord, entrez la commande ci-dessous pour connaître votre version de VSFTP :
Cas n°1 : La version de VSFTP est supérieure ou égale à 3.
Ouvrez le fichier vsftpd.conf :
Puis ajoutez la ligne ci-dessous :
Faites CTRL+O puis ENTRÉE pour sauvegarder
Faites CTRL+X puis ENTRÉE pour quitter
Redémarrez ensuite VSFTPD pour que la configuration soit prise en compte :
Cas n°2 : La version de VSFTPD est strictement inférieure à 3.
Ajoutez un nouveau dépôt dans le fichier sources.list :
Rechargez le liste des dépôts puis installez VFSTPD
Reconfigurez VFSTPD en suivant les instructions vues un peu plus haut puis redémarrez ensuite VSFTPD pour que la configuration soit prise en compte :
Et voilà ! Le problème est résolu !
Ce tutoriel est maintenant terminé ! Votre serveur Web est opérationnel !
Enjoy !