Une version antérieure de ce tutoriel a été écrite par Brennan Bearnes.
Si de nombreux utilisateurs ont besoin des fonctionnalités d’un système de gestion de base de données comme MySQL, ils peuvent ne pas se sentir à l’aise pour interagir avec le système uniquement à partir de l’invite MySQL.
phpMyAdmin a été créé pour que les utilisateurs puissent interagir avec MySQL via une interface web. Dans ce guide, nous allons voir comment installer et sécuriser phpMyAdmin afin que vous puissiez l’utiliser en toute sécurité pour gérer vos bases de données sur un système Ubuntu 20.04.
Afin de compléter ce guide, il vous faudra :
ufw
. Pour le mettre en place, suivez notre guide de configuration initiale du serveur pour Ubuntu 20.04.De plus, il y a des considérations de sécurité importantes lors de l’utilisation de logiciels comme phpMyAdmin, puisque celui-ci :
Pour ces raisons, et parce qu’il s’agit d’une application PHP largement déployée qui est fréquemment la cible d’attaques, vous ne devriez jamais exécuter phpMyAdmin sur des systèmes distants via une simple connexion HTTP.
Si vous n’avez pas de domaine existant configuré avec un certificat SSL/TLS, vous pouvez suivre ce guide sur la sécurisation d’Apache avec Let’s Encrypt sur Ubuntu 20.04. Pour cela, vous devrez enregistrer un nom de domaine, créer des enregistrements DNS pour votre serveur et mettre en place un hôte virtuel Apache.
Vous pouvez utiliser APT pour installer phpMyAdmin à partir des dépôts Ubuntu par défaut.
En tant qu’utilisateur non root sudo, mettez à jour l’index des paquets de votre serveur :
- sudo apt update
Ensuite, vous pouvez installer le paquet phpmyadmin
. Parallèlement à ce paquet, la documentation officielle recommande également d’installer quelques extensions PHP sur votre serveur afin d’activer certaines fonctionnalités et d’améliorer les performances.
Si vous avez suivi le tutoriel préalable sur la pile LAMP, plusieurs de ces modules auront été installés en même temps que le paquet php
. Toutefois, il est recommandé d’installer également ces paquets :
php-mbstring
: Un module pour gérer les chaînes non ASCII et convertir les chaînes en différents encodagesphp-zip
: Cette extension permet de télécharger des fichiers .zip
vers phpMyAdminphp-gd
: Permet de prendre en charge la bibliothèque graphique GDphp-json
: Fournit à PHP un support pour la sérialisation JSONphp-curl
: Permet à PHP d’interagir avec différents types de serveurs utilisant différents protocolesExécutez la commande suivante pour installer ces paquets sur votre système. Veuillez noter, cependant, que le processus d’installation nécessite que vous fassiez certains choix pour configurer correctement phpMyAdmin. Nous allons bientôt passer en revue ces options :
- sudo apt install phpmyadmin php-mbstring php-zip php-gd php-json php-curl
Voici les options que vous devez choisir lorsque vous y êtes invité afin de configurer correctement votre installation :
apache2
<$>[warning]
Warning: Lorsque l’invite apparaît, « apache2 » est mis en évidence, mais n’est pas sélectionné. Si vous ne tapez pas sur SPACE
pour sélectionner Apache, l’installateur ne déplacera* pas *les fichiers nécessaires pendant l’installation. Appuyez sur SPACE
, TAB
, puis ENTER
pour sélectionner Apache.
<$>Yes
quand il est demandé s’il faut utiliser dbconfig-common
pour créer la base de donnéesNote : En supposant que vous ayez installé MySQL en suivant l’étape 2 du tutoriel préalable sur la pile LAMP, vous avez peut-être décidé d’activer le plugin Validate Password plugin. A partir de ce moment, l’activation de ce composant déclenchera une erreur lorsque vous tenterez de définir un mot de passe pour l’utilisateur phpmyadmin :
Pour résoudre ce problème, sélectionnez l’option d’annulation pour arrêter le processus d’installation. Ensuite, ouvrez votre prompt MySQL :
- sudo mysql
Ou, si vous avez activé l’authentification par mot de passe pour l’utilisateur MySQL root, exécutez cette commande et entrez ensuite votre mot de passe lorsque vous y êtes invité :
- mysql -u root -p
À l’invite, exécutez la commande suivante pour désactiver le composant Validate Password. Notez que cela ne le désinstallera pas réellement, mais empêchera simplement le composant d’être lancé sur votre serveur MySQL :
- UNINSTALL COMPONENT "file://component_validate_password";
Ensuite, vous pouvez fermer le client MySQL :
- exit
Essayez ensuite d’installer le paquet phpmyadmin
et il fonctionnera comme prévu :
- sudo apt install phpmyadmin
Une fois que phpMyAdmin est installé, vous pouvez ouvrir l’invite MySQL une nouvelle fois avec sudo mysql
ou mysql -u root -p
et ensuite exécuter la commande suivante pour réactiver le composant Validate Password :
- INSTALL COMPONENT "file://component_validate_password";
Le processus d’installation ajoute le fichier de configuration Apache de phpMyAdmin dans le répertoire /etc/apache2/conf-enabled/
, où il est lu automatiquement. Pour finir de configurer Apache et PHP afin qu’ils fonctionnent avec phpMyAdmin, la seule tâche qui reste à accomplir dans cette section du tutoriel est d’activer explicitement l’extension PHP mbstring
, ce que vous pouvez faire en tapant :
- sudo phpenmod mbstring
Ensuite, redémarrez Apache pour que vos modifications soient reconnues :
- sudo systemctl restart apache2
phpMyAdmin est maintenant installé et configuré pour fonctionner avec Apache. Toutefois, avant de pouvoir vous connecter et de commencer à interagir avec vos bases de données MySQL, vous devrez vous assurer que vos utilisateurs MySQL disposent des privilèges requis pour interagir avec le programme.
Lorsque vous avez installé phpMyAdmin sur votre serveur, il a automatiquement créé un utilisateur de base de données appelé phpmyadmin qui effectue certains processus sous-jacents pour le programme. Plutôt que de vous connecter en tant qu’utilisateur avec le mot de passe administratif que vous avez défini lors de l’installation, il est recommandé de vous connecter soit en tant que root user MySQL, soit en tant qu’dedicated user à la gestion des bases de données via l’interface phpMyAdmin.
Dans les systèmes Ubuntu fonctionnant sous MySQL 5.7 (et versions ultérieures), l’utilisateur MySQL root est configuré pour s’authentifier en utilisant le plugin auth_socket
par défaut plutôt qu’avec un mot de passe. Cela permet une plus grande sécurité et facilité d’utilisation dans de nombreux cas, mais cela peut également compliquer les choses lorsque vous devez autoriser un programme externe - comme phpMyAdmin - pour accéder à l’utilisateur.
Afin de vous connecter à phpMyAdmin en tant qu’utilisateur MySQL root, vous devrez changer sa méthode d’authentification de auth_socket
à une méthode qui utilise un mot de passe, si vous ne l’avez pas déjà fait. Pour ce faire, ouvrez l’invite MySQL depuis votre terminal :
- sudo mysql
Ensuite, vérifiez la méthode d’authentification utilisée par chacun de vos comptes utilisateurs MySQL à l’aide de la commande suivante :
- SELECT user,authentication_string,plugin,host FROM mysql.user;
Output+------------------+-------------------------------------------+-----------------------+-----------+
| user | authentication_string | plugin | host |
+------------------+-------------------------------------------+-----------------------+-----------+
| root | | auth_socket | localhost |
| mysql.session | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE | caching_sha2_password | localhost |
| mysql.sys | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE | caching_sha2_password | localhost |
| debian-sys-maint | *8486437DE5F65ADC4A4B001CA591363B64746D4C | caching_sha2_password | localhost |
| phpmyadmin | *5FD2B7524254B7F81B32873B1EA6D681503A5CA9 | caching_sha2_password | localhost |
+------------------+-------------------------------------------+-----------------------+-----------+
5 rows in set (0.00 sec)
Dans cet exemple, vous pouvez voir que l’utilisateur root s’authentifie effectivement en utilisant le plugin auth_socket
. Pour configurer le compte root afin qu’il s’authentifie avec un mot de passe, exécutez la commande ALTER USER
suivante. Assurez-vous de changer password
par un mot de passe fort de votre choix :
- ALTER USER 'root'@'localhost' IDENTIFIED WITH caching_sha2_password BY 'password';
Remarque : L’instruction ALTER USER
précédente définit l’utilisateur MySQL root pour s’authentifier avec le plugin caching_sha2_password
. Selon la documentation officielle de MySQL, caching_sha2_password
est le plugin d’authentification préféré de MySQL, car il fournit un cryptage de mot de passe plus sûr que l’ancien, mais encore largement utilisé, mysql_native_password
.
Cependant, certaines versions de PHP ne fonctionnent pas de manière fiable avec caching_sha2_password
. PHP a signalé que ce problème a été corrigé à partir de PHP 7.4, mais si vous rencontrez une erreur en essayant de vous connecter à phpMyAdmin plus tard, vous pourriez vouloir définir root pour vous authentifier avec mysql_native_password
à la place :
- ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'password';
Ensuite, vérifiez à nouveau les méthodes d’authentification employées par chacun de vos utilisateurs pour confirmer que le root ne s’authentifie plus à l’aide du plugin auth_socket
:
- SELECT user,authentication_string,plugin,host FROM mysql.user;
Output+------------------+-------------------------------------------+-----------------------+-----------+
| user | authentication_string | plugin | host |
+------------------+-------------------------------------------+-----------------------+-----------+
| root | *DE06E242B88EFB1FE4B5083587C260BACB2A6158 | caching_sha2_password | localhost |
| mysql.session | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE | caching_sha2_password | localhost |
| mysql.sys | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE | caching_sha2_password | localhost |
| debian-sys-maint | *8486437DE5F65ADC4A4B001CA591363B64746D4C | caching_sha2_password | localhost |
| phpmyadmin | *5FD2B7524254B7F81B32873B1EA6D681503A5CA9 | caching_sha2_password | localhost |
+------------------+-------------------------------------------+-----------------------+-----------+
5 rows in set (0.00 sec)
Vous pouvez voir à partir de cette sortie que le root user s’authentifiera à l’aide d’un mot de passe. Vous pouvez maintenant vous connecter à l’interface phpMyAdmin en tant que root user avec le mot de passe que vous lui avez attribué ici.
Alternativement, certains peuvent trouver qu’il est plus adapté à leur travail de se connecter à phpMyAdmin avec un dedicated user. Pour ce faire, ouvrez à nouveau le shell MySQL :
- sudo mysql
Si vous avez activé l’authentification par mot de passe pour votre root user, comme décrit dans la section précédente, vous devrez exécuter la commande suivante et saisir votre mot de passe lorsque vous y serez invité afin de vous connecter :
- mysql -u root -p
De là, créez un nouvel utilisateur et attribuez-lui un mot de passe fort :
- CREATE USER 'sammy'@'localhost' IDENTIFIED WITH caching_sha2_password BY 'password';
Note : Encore une fois, selon la version de PHP que vous avez installée, vous voudrez peut-être configurer votre nouvel utilisateur pour qu’il s’authentifie avec le mot de passe mysql_native_password
au lieu du mot de passe caching_sha2_password
:
- ALTER USER 'sammy'@'localhost' IDENTIFIED WITH mysql_native_password BY 'password';
Ensuite, accordez à votre nouvel utilisateur les privilèges appropriés. Par exemple, vous pourriez accorder les privilèges d’utilisateur à toutes les tables de la base de données, ainsi que le pouvoir d’ajouter, de modifier et de supprimer des privilèges d’utilisateur, avec cette commande :
- GRANT ALL PRIVILEGES ON *.* TO 'sammy'@'localhost' WITH GRANT OPTION;
Ensuite, quittez le shell MySQL :
- exit
Vous pouvez maintenant accéder à l’interface web en visitant le nom de domaine ou l’adresse IP publique de votre serveur suivi de /phpmyadmin
:
https://your_domain_or_IP/phpmyadmin
Connectez-vous à l’interface, soit commeroot ou avec le nouveau nom d’utilisateur et le nouveau mot de passe que vous venez de configurer.
Lorsque vous vous connecterez, vous verrez l’interface utilisateur, qui ressemblera à ceci :
Maintenant que vous êtes capable de vous connecter et d’interagir avec phpMyAdmin, il ne vous reste plus qu’à renforcer la sécurité de votre système pour le protéger des attaques.
En raison de son ubiquité, phpMyAdmin est une cible populaire pour les attaquants, et vous devriez faire très attention à empêcher tout accès non autorisé. Une façon de procéder consiste à placer une passerelle devant l’ensemble de l’application en utilisant les fonctionnalités d’authentification et d’autorisation .htaccess
intégrées à Apache.
Pour ce faire, vous devez d’abord activer l’utilisation des fichiers .htaccess
en modifiant le fichier de configuration Apache de votre installation de phpMyAdmin.
Utilisez votre éditeur de texte favori pour modifier le fichier phpmyadmin.conf
qui a été placé dans votre répertoire de configuration Apache. Ici, nous utiliserons nano
:
- sudo nano /etc/apache2/conf-available/phpmyadmin.conf
Ajoutez une directive AllowOverride All
dans la section <Directory /usr/share/phpmyadmin>
du fichier de configuration, comme ceci :
<Directory /usr/share/phpmyadmin>
Options FollowSymLinks
DirectoryIndex index.php
AllowOverride All
. . .
Lorsque vous avez ajouté cette ligne, enregistrez et fermez le fichier. Si vous avez utilisé nano
pour éditer le fichier, faites-le en appuyant sur CTRL + X
, Y
, puis ENTER
Pour mettre en œuvre les modifications que vous avez apportées, redémarrez Apache :
- sudo systemctl restart apache2
Maintenant que vous avez autorisé l’utilisation de fichiers .htaccess
pour votre application, vous devez en créer un pour mettre en place une certaine sécurité.
Pour que cela soit possible, le fichier doit être créé dans le répertoire de l’application. Vous pouvez créer le fichier nécessaire et l’ouvrir dans votre éditeur de texte avec les privilèges root en tapant :
- sudo nano /usr/share/phpmyadmin/.htaccess
Dans ce fichier, entrez les informations suivantes :
AuthType Basic
AuthName "Restricted Files"
AuthUserFile /etc/phpmyadmin/.htpasswd
Require valid-user
Voici ce que signifie chacune de ces lignes :
AuthType Basic
: Cette ligne précise le type d’authentification que vous mettez en œuvre. Ce type mettra en œuvre l’authentification par mot de passe à l’aide d’un fichier de mots de passe.AuthName
: Définit le message pour la boîte de dialogue d’authentification. Vous devez conserver ce générique afin que les utilisateurs non autorisés n’obtiennent aucune information sur ce qui est protégé.AuthUserFile
: permet de définir l’emplacement du fichier de mots de passe qui sera utilisé pour l’authentification. Cela doit se faire en dehors des répertoires qui sont desservis. Nous allons créer ce dossier prochainement.Require valid-user
: Ceci spécifie que seuls les utilisateurs authentifiés doivent avoir accès à cette ressource. C’est ce qui empêche en fait les utilisateurs non autorisés d’entrer.Lorsque vous avez terminé, enregistrez et fermez le fichier.
L’emplacement que vous avez choisi pour votre fichier de mots de passe était /etc/phpmyadmin/.htpasswd
. Vous pouvez maintenant créer ce fichier et le transmettre à un utilisateur initial avec l’utilitaire htpasswd
:
- sudo htpasswd -c /etc/phpmyadmin/.htpasswd username
Vous serez invité à sélectionner et à confirmer un mot de passe pour l’utilisateur que vous créez. Ensuite, le fichier est créé avec le mot de passe haché que vous avez entré.
Si vous voulez entrer un utilisateur supplémentaire, vous devez le faire sans le drapeau -c
, comme ceci :
- sudo htpasswd /etc/phpmyadmin/.htpasswd additionaluser
Maintenant, lorsque vous accédez à votre sous-répertoire phpMyAdmin, il vous sera demandé le nom de compte et le mot de passe supplémentaires que vous venez de configurer :
https://domain_name_or_IP/phpmyadmin
Après avoir entré l’authentification Apache, vous serez dirigé vers la page d’authentification phpMyAdmin habituelle pour entrer vos identifiants MySQL. En ajoutant un ensemble supplémentaire d’identifiants non-MySQL, vous apportez à votre base de données une couche de sécurité supplémentaire. Ceci est souhaitable, puisque phpMyAdmin a été vulnérable aux menaces de sécurité par le passé.
Vous devriez maintenant avoir configuré phpMyAdmin et être prêt à l’utiliser sur votre serveur Ubuntu 20.04. Cette interface vous permet de créer des bases de données, des utilisateurs et des tableaux, ainsi que d’effectuer les opérations habituelles comme la suppression et la modification de structures et de données.
Thanks for learning with the DigitalOcean Community. Check out our offerings for compute, storage, networking, and managed databases.
This textbox defaults to using Markdown to format your answer.
You can type !ref in this text area to quickly search our full set of tutorials, documentation & marketplace offerings and insert the link!