Administrer un serveur dédié - part 5 : Serveur Web

Vincent Dauce • February 10, 2014

admin

Dans cet article nous allons voir comment déployer un serveur web, pour cela nous avons besoin de plusieurs briques :

Voilà bien sur on aurait pu prendre Nginx à la place d’Apache, MariaDB à la plase de MySQL, vsFTPd à la place de sftp … mais il faut faire un choix et on pourra toujours revenir dessus dans un prochain article.

Je vous conseil de rien n’installer sur le host pour le laisser le plus propre possible et d’utiliser un container. Nous souhaitons héberger nos sites sur CT101 que nous venons de créer donc c’est partit.

Serveur Web – Apache

Installer Apache:

aptitude install apache2

Il va installer plusieurs packages car apache2 est un metapaquet.

A la fin de l’installation le serveur web est lancé et fonctionnel. On peut le voir rapidement en saisissant dans votre navigateur l’adresse IP Failover de votre container qui affichera une page web. Avant on avait connexion refusée.

Il y a aussi après le lancement un petit warning que nous allons corriger : « apache2: Could not reliably determine the server’s fully qualified domain name, using 127.0.0.1 for ServerName »

C’est très simple pour ne plus avoir les erreurs vous devez modifier le fichier suivant et ajouter cette ligne à la fin du fichier :

vi /etc/apache2/apache2.conf:

ServerName localhost

Vérifions aussi quelques configurations d’Apache pour voir si tout est en ordre :

Vérifier que la configuration d’Apache (normalement c’est celle par défaut) écoute bien sur le port 80. Et aussi sur le port 443 un peu plus bas dans le cas ou on voudrait déployer du SSL ce que nous ferons bientôt pour notre cloud.

vi /etc/apache2/ports.conf:

NameVirtualHost *:80
Listen 80

Modifier en décommentant la ligne (supprimer le #) pour passer Apache2 en UTF-8 c’est la norme sur le web depuis quelques années maintenant et vous ne rencontrerez aucun problème en encodant tous les fichiers en UTF-8.

vi /etc/apache2/conf.d/charset:

AddDefaultCharset UTF-8

Pour personnaliser un peu apache je vous conseil 2 modules qui sont presque indispensable pour moi :

Pour activer les 2 modules ci-dessus nous utilisons :

Activer les modules principaux sur Apache:

a2enmod rewrite
a2enmod userdir

Comme vu plus haut nous allons sécuriser le module userdir avec la configuration suivante (ajouter les lignes à la fin du fichier après ServerName) :

vi /etc/apache2/apache2.conf:

# Configuration du module UserDir
UserDir disabled
UserDir /home/*/www

Le module userdir est ainsi désactivé et sera activé au cas par cas selon nos besoins. Et nous définissons que les pages web seront dans le répertoire /home/*/www avec * le login du compte.

Pour vous donner une idée, si je veux héberger le site « toto.com » je vais créer un compte toto qui aura donc un répertoire personnel dans /home/toto. Si j’active pour ce compte l’espace web il pourra déposer des fichiers dans /home/toto/www et consultable via le lien CT101_IP_PUBLIC/~toto.

Justement pour éviter d’avoir à créer à chaque fois le dossier www nous allons automatiser la création et créer un dossier logs pour stocker les fichier log d’Apache par compte.

Automatiser la création du dossier www:

mkdir /etc/skel/www
mkdir /etc/skel/logs
echo " <strong>Nouvel espace web</strong> " > /etc/skel/www/index.html

Puis recharger la configuration et admirer que vous n’avez plus le message d’erreur :

Recharger apache2:

service apache2 reload

Serveur SQL – MySQL

Pour installer MySQL c’est très simple voir trop simple 🙂

Installer MySQL:

aptitude install mysql-server

On est encore dans le cas d’un metapaquet, on valide et c’est tout.

Je vous conseil de choisir un mot de passe complexe pour le root de MySQL, moi j’utilise 50 caractères avec majuscules, minuscules et chiffres (Pas de caractères spéciaux car j’ai souvent eu des problèmes après pour me connecter avec).

Il existe plein de générateur de mot de passe en ligne, je vous laisse choisir votre préféré moi j’ai pas trouvé. Surement une idée d’application à faire 🙂

Voilà le mien : a4HBSwpwdlF3LafNsPswKM6uZQWGIqrjnUGXkNcoYX3XGE5lZV

à conserver précieusement car c’est le compte root.

Serveur App – PHP

Pour PHP aussi pas beaucoup de chose à faire (PHP 5.4) :

Installer PHP:

aptitude install php5

Après comme pour Apache il y a des modules plus ou moins importants, voici les principaux :

Prestashop la boutique en ligne et open source que je vous conseil a besoin de php5-curl pour activer Paypal, php5-gd pour retailler les images, php5-mcrypt pour crypter les données sensibles et bien évidemment php5-mysql.

WordPress le blog open source qui fait aussi CMS a besoin de libssh2-php pour pouvoir faire les mise à jour en automatique

Pour les installer tous il suffit de lancer :

Installer les modules PHP:

aptitude install php5-mysql php5-gd php5-mcrypt php5-curl libssh2-php

Juste après ca vous n’avez rien à faire tout est déjà fonctionnel.

Serveur Fichier – SFTP

Pour le serveur de fichier j’utilisais il y a très longtemps des serveurs FTP plus ou moins sécurisés jusqu’au jour ou j’ai découvert que SSH le faisait déjà très bien. Alors pourquoi installer un nouveau service alors qu’on en a déjà un installé et qui tourne ? en plus il y avait la gestion des comptes qui était complexe là c’est le même login et mot de passe.

Vous allez me dire mais j’ai pas envie de donner un accès SSH à mes utilisateurs et bien non on leur donne uniquement le SFTP ils peuvent rien faire de plus c’est donc totalement sécurisé.

Pour celà il faut juste configurer SSH pour permettre de rendre le service que l’on veut c’est à dire offrir aux utilisateurs un accès aux fichiers via un client FTP comme filezilla ou un partage de fichiers.

Il faut donc changer la ligne « Subsystem … » (avant on avait « Subsystem sftp /usr/lib/openssh/sftp-server ») : On indique autoriser le faux shell « internal-sftp » qui va permettre d’interdire l’accès au shell pour les utilisateurs.

Et rajouter quelques lignes après « UserPAM yes ». Pour autoriser le groupe www-data qui est celui d’Apache donc de nos sites.

vi /etc/ssh/sshd_config:

Subsystem sftp internal-sftp

# Set this to 'yes' to enable PAM authentication, account processing,
# and session processing. If this is enabled, PAM authentication will
# be allowed through the ChallengeResponseAuthentication and
# PasswordAuthentication. Depending on your PAM configuration,
# PAM authentication via ChallengeResponseAuthentication may bypass
# the setting of "PermitRootLogin without-password".
# If you just want the PAM account and session checks to run without
# PAM authentication, then enable this but set PasswordAuthentication
# and ChallengeResponseAuthentication to 'no'.
UsePAM yes
    AllowGroups www-data
    Match Group www-data
            ChrootDirectory /home/%u
            X11Forwarding no
            AllowTcpForwarding no
            ForceCommand internal-sftp

Reste à recharger la configuration de notre service :

Recharger SSH:

service ssh reload

Et voilà nous avons un SFTP sécurisé accessible uniquement aux utilisateurs appartenant au groupe www-data. Pour rappel le fichier de conf a déjà été modifié pour interdire au root de pouvoir se connecter et nous avons déjà changé le port par défaut qui était à 22 pour plus de sécurité.

Reste à rajouter des droits car sinon le SFTP interdira de se connecter.

Droits pour SFTP:

chown -R root:www-data /home/
chmod -R 750 /home/