Comment installer et sécuriser phpMyAdmin avec Nginx sur un serveur Debian 9

introduction

Alors que de nombreux utilisateurs ont besoin des fonctionnalités d’un système de base de données tel que MySQL, l’interaction avec le système uniquement à partir du client en ligne de commande MySQL requiert une bonne connaissance du langage SQL. Il est donc possible que ce ne soit pas l’interface privilégiée pour certains.

phpMyAdmin a été créé pour permettre aux utilisateurs d’interagir avec MySQL via une interface Web intuitive fonctionnant en parallèle avec un environnement de développement PHP. Dans ce guide, nous expliquerons comment installer phpMyAdmin sur un serveur Nginx et comment le configurer pour une sécurité accrue.

Conditions préalables

Avant de commencer à utiliser ce guide, vous devez disposer des éléments suivants:

Etant donné que phpMyAdmin gère l’authentification à l’aide des informations d’identification MySQL, il est vivement conseillé d’installer un certificat SSL / TLS pour permettre le trafic chiffré entre le serveur et le client. Si vous n’avez pas de domaine existant configuré avec un certificat valide, vous pouvez suivre le guide sur https://www.digitalocean.com/community/tutorials/how-to-secure-nginx-with-let-s-encrypt -on-debian-9 [Comment sécuriser Nginx avec Let’s Encrypt sur Debian 9].

Une fois que vous avez satisfait à ces conditions préalables, vous pouvez poursuivre avec le reste du guide.

Étape 1 - Installer phpMyAdmin

La première chose à faire est d’installer phpMyAdmin sur le serveur LEMP. Nous allons utiliser les dépôts par défaut de Debian pour atteindre cet objectif.

Commençons par mettre à jour l’index des paquets du serveur avec:

sudo apt update

Maintenant, vous pouvez installer phpMyAdmin avec:

sudo apt install phpmyadmin

Au cours du processus d’installation, vous serez invité à choisir le serveur Web (Apache ou Lighthttp) à configurer. Parce que nous utilisons Nginx en tant que serveur Web, nous ne devrions pas choisir ici. Appuyez sur + tab puis sur '+ OK` pour passer à l’étape suivante.

Ensuite, vous serez invité à utiliser ou non + dbconfig-common + pour configurer la base de données de l’application. Sélectionnez + Oui +. Ceci configurera la base de données interne et l’utilisateur administratif pour phpMyAdmin. Il vous sera demandé de définir un nouveau mot de passe pour l’utilisateur * phpmyadmin * MySQL. Vous pouvez également laisser ce champ vide et laisser phpMyAdmin créer un mot de passe de manière aléatoire.

L’installation va maintenant se terminer. Pour que le serveur Web Nginx trouve et serve correctement les fichiers phpMyAdmin, nous devons créer un lien symbolique à partir des fichiers d’installation dans le répertoire racine du document de Nginx:

sudo ln -s /usr/share/phpmyadmin /var/www/html/phpmyadmin

Votre installation de phpMyAdmin est maintenant opérationnelle. Pour accéder à l’interface, accédez au nom de domaine ou à l’adresse IP publique de votre serveur, suivi de + / phpmyadmin + dans votre navigateur Web:

https:///phpmyadmin

image: https: //assets.digitalocean.com/articles/phpmyadmin_lemp_1404/login.png [écran de connexion phpMyAdmin]

Comme mentionné précédemment, phpMyAdmin gère l’authentification à l’aide des informations d’identification MySQL, ce qui signifie que vous devez utiliser le même nom d’utilisateur et le même mot de passe que ceux que vous utiliseriez normalement pour vous connecter à la base de données via la console ou via une API. Si vous avez besoin d’aide pour créer des utilisateurs MySQL, consultez ce guide à l’adresse Comment gérer un Base de données SQL.

Votre installation de phpMyAdmin devrait être complètement fonctionnelle à ce stade. Cependant, en installant une interface Web, nous avons exposé notre serveur de base de données MySQL au monde extérieur. En raison de la popularité de phpMyAdmin et des grandes quantités de données auxquelles il peut donner accès, de telles installations sont des cibles courantes des attaques. Dans les sections suivantes de ce guide, nous verrons différentes manières de rendre notre installation phpMyAdmin plus sécurisée.

Étape 2 - Changer l’emplacement par défaut de phpMyAdmin

L’un des moyens les plus élémentaires de protéger votre installation de phpMyAdmin est de le rendre plus difficile à trouver. Les robots vont rechercher les chemins communs, comme + / phpmyadmin,` + / pma`, + / admin,` + / mysql` et autres. Si vous modifiez l’URL de l’interface + / phpmyadmin + par un numéro non standard, les scripts automatisés auront beaucoup plus de difficulté à trouver votre installation phpMyAdmin et à tenter des attaques brutales.

Avec notre installation phpMyAdmin, nous avons créé un lien symbolique pointant vers + / usr / share / phpmyadmin, où se trouvent les fichiers de l’application. Pour changer l’URL de l’interface de phpMyAdmin, nous renommerons ce lien symbolique.

Commençons par naviguer dans le répertoire racine du document Nginx et répertorions les fichiers qu’il contient pour avoir une meilleure idée du changement que nous allons effectuer:

cd /var/www/html/
ls -l

Vous recevrez le résultat suivant:

Outputtotal 8
-rw-r--r-- 1 root root 612 Apr  8 13:30 index.nginx-debian.html
lrwxrwxrwx 1 root root  21 Apr  8 15:36  -> /usr/share/phpmyadmin

La sortie montre que nous avons un lien symbolique appelé + phpmyadmin + dans ce répertoire. Nous pouvons changer ce nom de lien en ce que nous voudrions. Cela changera à son tour l’URL d’accès de phpMyAdmin, ce qui peut aider à masquer le point de terminaison des bots codés en dur pour rechercher des noms de points de terminaison courants.

Choisissez un nom qui masque l’objectif du noeud final. Dans ce guide, nous nommerons notre point de terminaison + / +, mais vous * devriez choisir un autre nom *. Pour ce faire, nous renommerons le lien:

sudo mv phpmyadmin
ls -l

Après avoir exécuté les commandes ci-dessus, vous recevrez cette sortie:

Outputtotal 8
-rw-r--r-- 1 root root 612 Apr  8 13:30 index.nginx-debian.html
lrwxrwxrwx 1 root root  21 Apr  8 15:36  -> /usr/share/phpmyadmin

Maintenant, si vous allez à l’ancienne URL, vous obtiendrez une erreur 404:

https:///phpmyadmin

image: https: //assets.digitalocean.com/articles/phpmyadmin_lemp_1604/nginx_notfound.png [erreur phpMyAdmin 404]

Votre interface phpMyAdmin sera maintenant disponible à la nouvelle URL que nous venons de configurer:

https:///

image: https: //assets.digitalocean.com/articles/phpmyadmin_lemp_1404/login.png [écran de connexion phpMyAdmin]

En masquant l’emplacement réel de phpMyAdmin sur le serveur, vous protégez son interface contre les analyses automatisées et les tentatives manuelles de force brute.

Étape 3 - Désactivation de la connexion racine

Sur MySQL ainsi que sur les systèmes Linux classiques, le compte * root * est un compte administratif spécial avec un accès illimité au système. En plus d’être un compte privilégié, il s’agit d’un nom de connexion connu, ce qui en fait une cible évidente des attaques par force brute. Pour minimiser les risques, nous allons configurer phpMyAdmin pour qu’il refuse toute tentative de connexion provenant de l’utilisateur * root *. Ainsi, même si vous fournissez des informations d’identification valides pour l’utilisateur * root *, vous obtiendrez toujours une erreur «accès refusé» et vous ne serez pas autorisé à vous connecter.

Puisque nous avons choisi d’utiliser + dbconfig-common + pour configurer et stocker les paramètres de phpMyAdmin, la configuration par défaut est actuellement stockée dans la base de données. Nous devrons créer un nouveau fichier + config.inc.php pour définir vos paramètres personnalisés.

Même si les fichiers PHP pour phpMyAdmin sont situés dans + / usr / share / phpmyadmin +, l’application utilise les fichiers de configuration situés dans + / etc / phpmyadmin +. Nous allons créer un nouveau fichier de paramètres personnalisé dans + / etc / phpmyadmin / conf.d +, et nommez-le + pma_secure.php +:

sudo nano /etc/phpmyadmin/conf.d/pma_secure.php

Le fichier de configuration suivant contient les paramètres nécessaires à la désactivation des connexions sans mot de passe (+ AllowNoPassword + défini sur + false +) et de la connexion racine (+ AllowRoot + défini sur + false +):

/etc/phpmyadmin/conf.d/pma_secure.php

<?php

# PhpMyAdmin Settings
# This should be set to a random string of at least 32 chars
$cfg['blowfish_secret'] = '';

$i=0;
$i++;

$cfg['Servers'][$i]['auth_type'] = 'cookie';
$cfg['Servers'][$i]['AllowNoPassword'] = false;
$cfg['Servers'][$i]['AllowRoot'] = false;

?>

Enregistrez le fichier lorsque vous avez terminé vos modifications en appuyant sur les touches + CTRL + + + + X + puis + y + pour confirmer les modifications et + ENTER + `. Les modifications s’appliqueront automatiquement. Si vous rechargez la page de connexion maintenant et essayez de vous connecter en tant que root, vous obtiendrez une erreur * Access Denied *:

image: https: //assets.digitalocean.com/articles/phpmyadmin_nginx_1804/pma_access_denied_root_error.png [accès refusé]

La connexion racine est maintenant interdite sur votre installation de phpMyAdmin. Cette mesure de sécurité empêchera les scripts brute-force d’essayer de deviner le mot de passe de la base de données root sur votre serveur. De plus, il imposera l’utilisation de comptes MySQL moins privilégiés pour accéder à l’interface Web de phpMyAdmin, ce qui en soi est une pratique de sécurité importante.

Étape 4 - Création d’une passerelle d’authentification

Cacher votre installation de phpMyAdmin à un emplacement inhabituel peut éviter certains robots automatisés analysant le réseau, mais il est inutile contre les attaques ciblées. Pour mieux protéger une application Web à accès restreint, il est généralement plus efficace d’arrêter les attaquants avant même qu’ils n’atteignent l’application. Ainsi, ils ne pourront pas utiliser les exploits génériques ni les attaques par force brute pour deviner les informations d’accès.

Dans le cas spécifique de phpMyAdmin, il est encore plus important de garder l’interface de connexion verrouillée. En restant ouvert au monde, vous offrez une plate-forme de force brute permettant aux attaquants de deviner vos informations d’identification de base de données.

Ajouter une couche supplémentaire d’authentification à votre installation phpMyAdmin vous permet d’accroître la sécurité. Les utilisateurs devront passer par une invite d’authentification HTTP avant de voir l’écran de connexion phpMyAdmin. La plupart des serveurs Web, y compris Nginx, fournissent cette fonctionnalité de manière native.

Pour le configurer, nous devons d’abord créer un fichier de mots de passe pour stocker les informations d’authentification. Nginx exige que les mots de passe soient chiffrés à l’aide de la fonction + crypt () +. La suite OpenSSL, qui devrait déjà être installée sur votre serveur, inclut cette fonctionnalité.

Pour créer un mot de passe crypté, tapez:

openssl passwd

Vous serez invité à entrer et à confirmer le mot de passe que vous souhaitez utiliser. L’utilitaire affichera ensuite une version chiffrée du mot de passe qui ressemblera à ceci:

Output

Copiez cette valeur, car vous devrez la coller dans le fichier d’authentification que nous allons créer.

Maintenant, créez un fichier d’authentification. Nous allons appeler ce fichier + pma_pass + et le placer dans le répertoire de configuration de Nginx:

sudo nano /etc/nginx/pma_pass

Dans ce fichier, vous préciserez le nom d’utilisateur que vous souhaitez utiliser, suivi de deux points (+: +), suivi de la version chiffrée du mot de passe que vous avez reçu de l’utilitaire + openssl passwd +.

Nous allons nommer notre utilisateur + sammy +, mais vous devez choisir un nom d’utilisateur différent. Le fichier devrait ressembler à ceci:

/ etc / nginx / pma_pass

:

Enregistrez et fermez le fichier lorsque vous avez terminé.

Nous sommes maintenant prêts à modifier le fichier de configuration Nginx. Pour ce guide, nous allons utiliser le fichier de configuration situé dans + / etc / nginx / sites-available / +. Vous devez utiliser le fichier de configuration Nginx approprié pour l’emplacement Web où phpMyAdmin est actuellement hébergé. Ouvrez ce fichier dans votre éditeur de texte pour commencer:

sudo nano /etc/nginx/sites-available/

Localisez le bloc + serveur + et la section + location / + qu’il contient. Nous devons créer une section * new * + location n dans ce bloc pour faire correspondre le chemin actuel de phpMyAdmin sur le serveur. Dans ce guide, la localisation de phpMyAdmin par rapport à la racine du Web est + / Nothingtosee +:

/ etc / nginx / sites-available / default

server {
   . . .

       location / {
               try_files $uri $uri/ =404;
       }

       location / {
               # Settings for phpMyAdmin will go here
       }

   . . .
}

Dans ce bloc, nous devrons définir deux directives différentes: + auth_basic +, qui définit le message qui sera affiché sur l’invite d’authentification, et + auth_basic_user_file +, pointant vers le fichier que nous venons de créer. Voici à quoi devrait ressembler votre fichier de configuration lorsque vous aurez terminé:

/ etc / nginx / sites-available / default

server {
   . . .

       location / {
               auth_basic "";
               auth_basic_user_file ;
       }


   . . .
}

Enregistrez et fermez le fichier lorsque vous avez terminé. Pour vérifier si le fichier de configuration est valide, vous pouvez exécuter:

sudo nginx -t

La sortie suivante est attendue:

Outputnginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful

Pour activer le nouveau portail d’authentification, vous devez recharger le serveur Web:

sudo systemctl reload nginx

Maintenant, si vous visitez l’URL phpMyAdmin dans votre navigateur Web, le nom d’utilisateur et le mot de passe que vous avez ajoutés au fichier + pma_pass + devraient s’afficher:

https:///

image: https: //assets.digitalocean.com/articles/phpmyadmin_lemp_1404/auth_gate.png [Page d’authentification Nginx]

Une fois que vous avez entré vos identifiants, vous serez redirigé vers la page de connexion standard de phpMyAdmin.

En plus de fournir une couche de sécurité supplémentaire, cette passerelle aidera à garder vos journaux MySQL à l’abri des tentatives d’authentification spammeuses.

Étape 5 - Configuration de l’accès via des tunnels cryptés (facultatif)

Pour plus de sécurité, il est possible de verrouiller votre installation phpMyAdmin sur des hôtes autorisés uniquement. Vous pouvez whitelist hôtes autorisés dans votre fichier de configuration Nginx, de sorte que toute demande provenant d’une adresse IP ne figurant pas sur la liste soit refusée.

Même si cette fonctionnalité seule peut suffire dans certains cas d’utilisation, ce n’est pas toujours la meilleure solution à long terme, principalement en raison du fait que la plupart des gens n’accèdent pas à Internet à partir d’adresses IP statiques. Dès que vous obtenez une nouvelle adresse IP auprès de votre fournisseur Internet, vous ne pourrez plus accéder à l’interface phpMyAdmin tant que vous n’aurez pas mis à jour le fichier de configuration de Nginx avec votre nouvelle adresse IP.

Pour une solution à long terme plus robuste, vous pouvez utiliser le contrôle d’accès basé sur IP pour créer une configuration dans laquelle les utilisateurs n’auront accès à votre interface phpMyAdmin que s’ils accèdent à partir d’une * adresse IP autorisée * ou * localhost via SSH. tunneling *. Nous verrons comment le configurer dans les sections ci-dessous.

La combinaison du contrôle d’accès basé sur IP avec le tunneling SSH augmente considérablement la sécurité car elle bloque totalement les accès provenant de l’internet public (à l’exception des IP autorisées), en plus de fournir un canal sécurisé entre l’utilisateur et le serveur via l’utilisation de tunnels chiffrés.

Configuration du contrôle d’accès basé sur IP sur Nginx

Sur Nginx, le contrôle d’accès basé sur IP peut être défini dans le bloc + emplacement + correspondant d’un site donné, à l’aide des directives + allow + et '+ deny + . Par exemple, si nous voulons n’autoriser que les demandes provenant d’un hôte donné, nous devons inclure les deux lignes suivantes, dans cet ordre, à l’intérieur du bloc `+ emplacement + correspondant au site que nous souhaitons protéger:

allow ;
deny all;

Vous pouvez autoriser autant d’hôtes que vous le souhaitez. Il vous suffit d’inclure une ligne + allow + pour chaque hôte / IP autorisé à l’intérieur du bloc + emplacement + correspondant pour le site que vous protégez. Les directives seront évaluées dans le même ordre où elles sont répertoriées jusqu’à ce qu’une correspondance soit trouvée ou que la demande soit finalement refusée en raison de la directive + deny all +.

Nous allons maintenant configurer Nginx pour n’autoriser que les requêtes provenant de localhost ou de votre adresse IP actuelle. Tout d’abord, vous devez connaître l’adresse IP publique actuelle que votre ordinateur local utilise pour se connecter à Internet. Il y a plusieurs façons d’obtenir cette information. Pour des raisons de simplicité, nous allons utiliser le service fourni par https://ipinfo.io [ipinfo.io]. Vous pouvez soit ouvrir l’URL https://ipinfo.io/ip dans votre navigateur, soit exécuter la commande suivante à partir de votre * ordinateur local *:

curl https://ipinfo.io/ip

Vous devriez obtenir une adresse IP simple en sortie, comme ceci:

Output

C’est votre adresse IP actuelle public. Nous allons configurer le bloc d’emplacement de phpMyAdmin pour n’autoriser que les requêtes provenant de cette adresse IP, en plus de localhost. Nous devrons éditer une nouvelle fois le bloc de configuration de phpMyAdmin dans + / etc / nginx / sites-available / +.

Ouvrez le fichier de configuration Nginx à l’aide de l’éditeur de ligne de commande de votre choix:

sudo nano /etc/nginx/sites-available/

Comme nous avons déjà une règle d’accès dans notre configuration actuelle, nous devons la combiner avec un contrôle d’accès basé sur IP à l’aide de la directive + satisfaire tout +. De cette façon, nous pouvons conserver l’invite d’authentification HTTP actuelle pour une sécurité accrue.

Voici à quoi devrait ressembler votre configuration phpMyAdmin Nginx une fois l’édition terminée:

/etc/nginx/sites-available/example.com

server {
   . . .

   location / {
       satisfy all; #requires both conditions

       allow ; #allow your IP
       allow 127.0.0.1; #allow localhost via SSH tunnels
       deny all; #deny all other sources

       auth_basic "Admin Login";
       auth_basic_user_file /etc/nginx/pma_pass;
   }

   . . .
}

N’oubliez pas de remplacer par le chemin d’accès réel où se trouve phpMyAdmin et l’adresse IP en surbrillance avec votre adresse IP publique actuelle.

Enregistrez et fermez le fichier lorsque vous avez terminé. Pour vérifier si le fichier de configuration est valide, vous pouvez exécuter:

sudo nginx -t

La sortie suivante est attendue:

Outputnginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful

Rechargez maintenant le serveur Web pour que les modifications prennent effet:

sudo systemctl reload nginx

Votre adresse IP étant explicitement répertoriée en tant qu’hôte autorisé, votre accès ne doit pas être perturbé. Toute personne essayant d’accéder à votre installation phpMyAdmin recevra maintenant une erreur 403 (interdite):

https:///

image: https: //assets.digitalocean.com/articles/phpmyadmin_nginx_1804/403_error.png [erreur 403]

Dans la section suivante, nous verrons comment utiliser le tunneling SSH pour accéder au serveur Web par le biais de requêtes locales. De cette façon, vous pourrez toujours accéder à l’interface de phpMyAdmin même si votre adresse IP change.

Accéder à phpMyAdmin via un tunnel crypté

Le tunneling SSH fonctionne comme un moyen de rediriger le trafic réseau via des canaux cryptés. En exécutant une commande + ssh + similaire à celle que vous utiliseriez pour vous connecter à un serveur, vous pouvez créer un «tunnel» sécurisé entre votre ordinateur local et ce serveur. Tout le trafic entrant sur un port local donné peut désormais être redirigé via le tunnel crypté et utiliser le serveur distant en tant que proxy, avant de recourir à Internet. C’est similaire à ce qui se produit lorsque vous utilisez un VPN (Réseau privé virtuel), mais la tunnelisation SSH est beaucoup plus simple à configurer.

Nous allons utiliser le tunneling SSH pour envoyer par proxy nos demandes au serveur Web distant exécutant phpMyAdmin. En créant un tunnel entre votre machine locale et le serveur sur lequel phpMyAdmin est installé, vous pouvez rediriger les requêtes locales vers le serveur Web distant. De plus, le trafic est crypté et les demandes parviennent à Nginx comme si elles venaient de localhost. Ainsi, quelle que soit l’adresse IP à laquelle vous vous connectez, vous pourrez accéder en toute sécurité à l’interface de phpMyAdmin.

Le trafic entre votre ordinateur local et le serveur Web distant étant chiffré, il s’agit d’une alternative sûre dans les situations où vous ne pouvez pas installer de certificat SSL / TLS sur le serveur Web exécutant phpMyAdmin.

  • Depuis votre ordinateur local *, lancez cette commande chaque fois que vous avez besoin d’accéder à phpMyAdmin:

ssh user@ -L 8000:localhost:80 -L 8443:localhost:443 -N

Examinons chaque partie de la commande:

  • * utilisateur *: utilisateur SSH pour se connecter au serveur sur lequel phpMyAdmin est en cours d’exécution

  • * hostname_or_IP *: hôte SSH où phpMyAdmin est en cours d’exécution

  • * -L 8000: localhost: 80 * redirige le trafic HTTP sur le port 8000

  • * -L 8443: localhost: 443 * redirige le trafic HTTPS sur le port 8443

  • * -N *: n’exécute pas de commandes à distance

Maintenant, allez dans votre navigateur et remplacez par + localhost: PORT, lorsque` + PORT` est soit + 8000 + pour HTTP ou + 8443 + pour HTTPS:

http://localhost:/
http://localhost:/

image: https: //assets.digitalocean.com/articles/phpmyadmin_lemp_1404/login.png [écran de connexion phpMyAdmin]

Toutes les demandes sur + localhost: 8000 + (HTTP) et + localhost: 8443 + (HTTPS) sont maintenant redirigées via un tunnel sécurisé vers votre application phpMyAdmin distante. Non seulement vous avez renforcé la sécurité en désactivant l’accès public à votre phpMyAdmin, mais vous avez également protégé tout le trafic entre votre ordinateur local et le serveur distant en utilisant un tunnel crypté pour envoyer et recevoir des données.

Si vous souhaitez imposer l’utilisation du tunnel SSH à toute personne souhaitant accéder à votre interface phpMyAdmin (vous inclus), vous pouvez le faire en supprimant toute autre adresse IP autorisée du fichier de configuration de Nginx, en laissant «+ 127.0.0.1 +». en tant que seul hôte autorisé à accéder à cet emplacement. Étant donné que personne ne sera en mesure de faire des demandes directes à phpMyAdmin, il est prudent de supprimer l’authentification HTTP afin de simplifier votre configuration. Voici à quoi ressemblerait votre fichier de configuration dans un tel scénario:

/etc/nginx/sites-available/example.com

server {
   . . .

   location / {
       allow 127.0.0.1; #allow localhost only
       deny all; #deny all other sources
   }

   . . .
}

Une fois que vous aurez rechargé la configuration de Nginx avec + sudo systemctl reload nginx +, votre installation de phpMyAdmin sera verrouillée et les utilisateurs seront * obligés * d’utiliser * les tunnels SSH afin d’accéder à l’interface de phpMyAdmin via des requêtes redirigées.

Conclusion

Dans ce tutoriel, nous avons vu comment installer phpMyAdmin sur Ubuntu 18.04 exécutant Nginx en tant que serveur Web. Nous avons également abordé les méthodes avancées pour sécuriser une installation phpMyAdmin sur Ubuntu, telles que la désactivation de la connexion root, la création d’une couche supplémentaire d’authentification et l’utilisation du tunneling SSH pour accéder à une installation phpMyAdmin via des requêtes locales uniquement.

Après avoir terminé ce didacticiel, vous devriez être capable de gérer vos bases de données MySQL à partir d’une interface Web raisonnablement sécurisée. Cette interface utilisateur expose la plupart des fonctionnalités disponibles via la ligne de commande MySQL. Vous pouvez parcourir les bases de données et les schémas, exécuter des requêtes et créer de nouveaux ensembles de données et structures.