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
.
- Consultez le manuel des commandes
systemctl
etservice
dont les syntaxes générales sont :systemctl action cible [option(s)]
etservice 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 machinessh localhost
- Déconnectez-vous en tapant
exit
ouCTRL+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
- 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épertoiresxxx-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épertoirepublic_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 fichieruserdir.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 importanteNotez 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, (ligneDocumentRoot
) 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épertoiremon_serveur
- Déplacez vous dans le répertoire
/etc/apache2/sites-available
- Copiez le fichier
000-default.conf
envotre_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 commandea2ensite 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
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
- Vérifiez la présence des paquets nécessaires :
libssl
,openssl
etssl-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
¶
- Installez les paquets
php
etlibapache2-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épertoirepublic_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
¶
- 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
¶
- 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. - Sélectionnez
- 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'utilisateuradmin
créé à la suite de l'installation demysql
pour vous connecter.
Cette utilisateur ayant tous les droits d'administration de la base de donnéesmysql
, 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 importanteEn 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
.