Jérôme Cutrona

Version statique de l'intranet de Jérôme Cutrona - Rejoindre la version dynamique 🔒

Les exemples et corrections sont potentiellement non fonctionnels.

B.U.T. Informatique - IUT de Reims - Université de Reims

Installation et configuration d'un serveur Web, PHP, MySQL sur Linux - Ubuntu

Navigation

Objectifs de la séance

  • Installer et configurer un serveur Web complet sur une distribution Linux Ubuntu
  • Installer et configurer un serveur Web Apache
  • Installer et configurer PHP
  • Installer et configurer MySQL
  • Installer et configurer phpMyAdmin
  • Gérer des services sur un système Linux
  • Obtenir une configuration locale similaire au serveur Web utilisé à l'IUT

Gestion des services : systemd

Un service est un programme qui tourne en continu sur une machine afin de répondre à des besoins : fonctionnement du réseau, affichage graphique, serveur Web, ...)

Vous trouverez un article très intéressant expliquant le rôle du PID 1 et le but de systemd.

Bien que ces services soient prévus pour être gérés automatiquement par Linux, il peut être nécessaire d’intervenir manuellement pour arrêter un service qui n’a plus besoin de fonctionner, pour redémarrer un service après la modification de sa configuration, pour démarrer un service nouvellement installé ou bien encore vérifier l’état d’un service.

Différentes commandes permettent de gérer les services dont systemctl et service.

Travail à réaliser
  • Consultez le manuel des commandes systemctl et service dont les syntaxes générales sont :
    systemctl action cible [option(s)]
    et
    service cible action
  • Affichez la liste des services démarrés avec la commande
    systemctl
  • Installez le paquet sshd avec la commande suivante :
    apt-get install openssh-server
  • Vérifiez que le service sshd est démarré en faisant une connexion ssh sur votre propre machine
    ssh localhost
  • Déconnectez-vous en tapant exit ou CTRL+D
  • Stoppez le service sshd puis tentez de vous reconnecter.
  • Redémarrez le service sshd

Serveur Web apache2

Procédons à l'installation du serveur Web httpd standard dont le nom de paquet est apache2 sous la distribution Linux Ubuntu

Travail à réaliser
  • Installez le paquet apache2
  • Démarrez le service apache2
    service apache2 start
  • Vérifiez le bon fonctionnement de votre serveur Web en accédant à http://localhost/ à partir d’un navigateur
  • Explorez le contenu du répertoire /etc/apache2
  • Lire le fonctionnement de la configuration au début du fichier apache2.conf.
    Comprendre le mécanisme des liens symboliques dans les répertoires xxx-enabled
  • Activez les pages d'accueil des utilisateurs à l'aide du module userdir en utilisant la commande suivante (man a2enmod pour comprendre la commande) :
    a2enmod userdir
  • Rechargez la configuration du serveur Web en redémarrant le service apache2
    service apache2 restart
  • Créez le répertoire public_html dans votre répertoire d’accueil
  • Donnez les droits d’accès à l’utilisateur du serveur Web www-data pour lui permettre l'accès à votre répertoire d’accueil ainsi qu'au répertoire public_html
  • Affectez les droits par défaut correspondant au répertoire public_html
  • Vérifiez le bon fonctionnement de votre serveur en accédant à la page http://localhost/~votre_login
  • Le listage des répertoires amenant une faiblesse de sécurité, désactivez ce mécanisme en supprimant l'option Indexes du fichier userdir.conf
  • Vérifiez que le listage n'est plus possible en rechargeant la page http://localhost/~votre_login (rechargez le cache si nécessaire)
  • Créez un fichier bienvenue.html dans ce répertoire, contenant la phrase "bienvenue sur votre site perso"
  • Vérifiez le bon fonctionnement de votre serveur en accédant à la page http://localhost/~votre_login/bienvenue.html
    Remarque importante

    Notez la syntaxe d’accès aux pages personnelles des utilisateurs :

    http://localhost/~votre_login

    Cette syntaxe, issue du fonctionnement historique des serveurs Web, n’est plus tout à fait d’actualité car peu élégante et sécurisée (le ~login donnant des informations sur les utilisateurs existant sur le système, il ne reste plus qu’à trouver leur mot de passe).

    Vous aurez surement remarqué (ou vous regarderez plus tard) que l’accès à votre site Web personnel au département informatique ne correspond pas à cette syntaxe mais plutôt à une URL de type :

    http://login.iut-rcc-info.urca

    Cette syntaxe est possible grâce aux mécanismes de serveur virtuel (vhost), qui nous permet de définir un serveur virtuel par utilisateur.

    Le serveur Web créé par défaut est géré par le fichier sites-enabled/000-default.conf. Comme vous pouvez le constater en regardant le contenu de ce fichier, (ligne DocumentRoot) les pages Web de ce serveur se trouvent dans l’arborescence /var/www/html.

  • Vous allez créer un deuxième serveur Web qui répondra à l’adresse : http://votre_login.fr
  • Vérifiez que l'accès à l'url http://votre_login.fr/ ne fonctionne pas
  • Ajoutez la ligne 127.0.0.1 votre_login.fr au fichier /etc/hosts
  • Les données des serveurs Web sont généralement dans l'arborescence /var/www mais pour des raisons pratiques et de sécurité, vous allez créer un répertoire de travail dans votre compte qui sera lié à un répertoire serveur dans l'arborescence classique
  • Créez un répertoire de travail mon_serveur dans votre répertoire d'accueil
  • Donnez les droits d'accès à ce répertoire pour l'utilisateur www-data
  • Créez un lien symbolique de votre répertoire vers l'arborescence /var/www avec la commande suivante :
    ln -s $HOME/mon_serveur /var/www
  • Créez un fichier index.html avec une phrase simple dans le répertoire mon_serveur
  • Déplacez vous dans le répertoire /etc/apache2/sites-available
  • Copiez le fichier 000-default.conf en votre_login.conf
  • Éditez ce fichier et modifiez les lignes suivantes pour configurer votre serveur
            <VirtualHost *:80>
                ...
                ServerName votre_login.fr
                DocumentRoot /var/www/mon_serveur
                ErrorLog /var/log/http-mon_serveur.error
                LogLevel warn
    
                <Directory /var/www/mon_serveur>
                    Options FollowSymLinks MultiViews
                    AllowOverride None
                    Order allow,deny
                    allow from all
                </Directory>
                ...
            </VirtualHost>
            
  • Activez votre site votre_login avec la commande
    a2ensite votre_login
  • Rechargez la configuration d'apache :
    service apache2 reload
  • Vérifiez l'accès à votre serveur en accédant à l'URL http://votre_login.fr

Serveur Web sécurisé https

Vous allez configurer un serveur virtuel sécurisé en utilisant le module ssl.

Il est normalement nécessaire d'utiliser un organisme de certification capable de certifié votre authenticité.
Ce type de certificat sont cependant couteux et pas utile en phase de développement.

Nous utiliserons un certificat auto-signé pour cet exercice, qui permet de chiffrer les accès à un site mais sans réelle valeur sécuritaire pour les utilisateurs (et les navigateurs) car sans preuve possible de l'authenticité du site

Remarque importante

Des membres de la communauté du libre ont mis en place un projet collaboratif proposant des certificats sans passer par un organisme de certification : Let’s Encrypt

Travail à réaliser
  • Vérifiez la présence des paquets nécessaires : libssl, openssl et ssl-cert
    dpkg -l | grep ssl
  • Installez si nécessaire les paquets manquants
  • Créez le certificat correspondant à votre site et stocker le dans le répertoire /etc/apache2/ssl
    mkdir /etc/apache2/ssl
    /usr/sbin/make-ssl-cert /usr/share/ssl-cert/ssleay.cnf /etc/apache2/ssl/apache.pem
    Répondez à la question demandant le nom principal et les noms secondaires de votre serveur : localhost, DNS:votre_login.fr
  • Le port d'écoute par défaut en ssl 443 est configuré dans le fichier /etc/apache2/ports.conf.
  • Créez le fichier de configuration du VirtualHost de votre serveur ssl en faisant une copie du fichier default-ssl.conf du répertoire /etc/apache2/sites-available
    cp default-ssl.conf mon-serveur-ssl.conf
  • Éditez ce fichier pour ajouter ou modifier les lignes suivantes
     <IfModule mod_ssl.c>
        <VirtualHost *:443>
        ServerAdmin Webmaster@localhost
        ServerName votre_login.fr
        
        DocumentRoot /var/www/mon_serveur
        <Directory />
                Options FollowSymLinks
                AllowOverride None
        </Directory>
        <Directory /var/www/>
                Options Indexes FollowSymLinks MultiViews
                AllowOverride None
                Order allow,deny
                allow from all
        </Directory>
    
        ErrorLog /var/log/apache2/error-ssl.log
    
        # Possible values include: debug, info, notice, warn, error, crit,
        # alert, emerg.
        LogLevel warn
    
        CustomLog /var/log/apache2/ssl_access.log combined
    
        #   SSL Engine Switch:
        #   Enable/Disable SSL for this virtual host.
        SSLEngine on
        SSLCertificateFile /etc/apache2/ssl/apache.pem
        </VirtualHost>
    </IfModule>
  • Activez le module ssl d'apache :
    a2enmod ssl
  • Activez votre site
    a2ensite mon-serveur-ssl.conf
  • Redémarrez le service apache
    service apache2 restart
  • Testez l'accès aux pages avec l'URL : https://votre_login.fr

Langage de programmation PHP

Travail à réaliser
  • Installez les paquets php et libapache2-mod-php
  • Éditez le fichier /etc/apache2/mods-enabled/php7.4.conf et commenter les 5 dernières lignes (ces lignes interdisent l’exécution de php pour les pages Web des utilisateurs)
  • Redémarrez le service apache2
  • Créez un fichier index.php dans votre répertoire public_html contenant la ligne suivante : <?php phpinfo();
  • Vérifiez le résultat en affichant la page correspondante dans votre navigateur

Serveur de base de données MySQL

Travail à réaliser
  • Installez le paquet mysql-server
  • Configurez la sécurité avec la commande suivante :
    sudo mysql_secure_installation
    Répondez "Non" à la première question, puis saisissez un mot de passe simple pour l'exercice dont vous vous souviendrez. Répondez "oui" à toutes les questions suivantes.

    Nous allons maintenant créer un utilisateur qui aura les privilèges nécessaires à la gestion des bases de données en suivant les étapes suivantes :

  • Se connectez en tant que root
    sudo mysql
  • créez un utilisateur en mettant un mot de passe simple pour l'exercice mais compliqué dans la réalité
    CREATE USER 'admin'@'localhost' IDENTIFIED BY 'simple_mot_de_passe';
  • Donnez les privilèges à cet utilisateurs
    GRANT ALL PRIVILEGES ON *.* TO 'admin'@'localhost' WITH GRANT OPTION;
  • Quittez mysql avec la commande
    exit
  • Redémarrez le service mysql
  • Testez le serveur avec la commande suivante :
    mysqlshow -u admin -p

Outil d'administration de bases de données phpMyAdmin

Travail à réaliser
  • Installez le paquet phpmyadmin et répondez attentivement aux différentes questions
    Remarque importante

    la souris ne fonctionne pas sur les formulaires en mode texte. Le changement de champ s'effectue avec la touche "tabulation" et la validation se fait avec la touche "espace".

    • Sélectionnez apache2 (appuyez bien sur "espace" avant de passer à l'écran suivant).
    • Sélectionnez "oui" pour l'utilisation de dbconfig-common.
    • Sélectionnez un mot de passe simple pour l'exercice dont vous vous souviendrez. Ce mot de passe concerne l'utilisateur phpmyadmin qui se connectera à votre base de données.

    Un fichier de configuration pour apache a été ajouté dans le répertoire /etc/apache2/conf-enabled. Cette configuration sera donc automatiquement activée au redémarrage du serveur Web.

  • Activez le module de gestion des chaînes de caractères multi-octets de php
    sudo phpenmod mbstring
  • Redémarrez le service apache2
  • Testez l'outil en vous connectant à l'adresse http://localhost/phpmyadmin. Utilisez l'utilisateur admin créé à la suite de l'installation de mysql pour vous connecter.
    Cette utilisateur ayant tous les droits d'administration de la base de données mysql, pourra créer d'autres utilisateurs ou base de données si nécessaire.
  • Créez un utilisateur mysqltest en cochant l'option "Créer une base portant son nom" et donnez à cet utilisateur tous les privilèges sur cette base
  • Testez la connexion à phpMyMdmin avec cet utilisateur.
    Remarque importante

    En cas de besoin (ce qui extrêmement rare), le site réel de phpmyadmin se trouve dans le répertoire /usr/share/phpmyadmin. Vous pouvez retrouver toutes les informations correspondantes dans le fichier /etc/apache2/conf-enabled/phpmyadmin.conf.