Recherche de site Web

Comment installer et sécuriser phpMyAdmin sur Ubuntu


Introduction

Bien que de nombreux utilisateurs aient besoin des fonctionnalités d'un système de gestion de base de données tel que 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 verrons 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.

Comment installer et sécuriser phpMyAdmin sur Ubuntu

  1. Installation de phpMyAdmin
  2. Ajustement de l'authentification et des privilèges des utilisateurs
  3. Sécuriser votre instance phpMyAdmin

Conditions préalables

Pour compléter ce guide, vous aurez besoin de :

  • Un serveur Ubuntu. Ce serveur doit avoir un utilisateur non root avec des privilèges administratifs et un pare-feu configuré avec ufw. Pour configurer cela, suivez notre guide de configuration initiale du serveur pour Ubuntu.
  • Une pile LAMP (Linux, Apache, MySQL et PHP) installée sur votre serveur Ubuntu. Si cela n'est pas encore terminé, vous pouvez suivre ce guide pour installer une pile LAMP sur Ubuntu.

De plus, il existe des considérations de sécurité importantes lors de l'utilisation d'un logiciel comme phpMyAdmin car :

  • Communique directement avec votre installation MySQL
  • Gère l'authentification à l'aide des informations d'identification MySQL
  • Exécute et renvoie les résultats des requêtes SQL arbitraires

Pour ces raisons, et parce qu'il s'agit d'une application PHP largement déployée et fréquemment ciblée par des attaques, vous ne devez 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. Cela vous obligera à enregistrer un nom de domaine, à créer des enregistrements DNS pour votre serveur et à configurer un hôte virtuel Apache.

Étape 1 — Installation de phpMyAdmin

Vous pouvez utiliser APT pour installer phpMyAdmin à partir des référentiels Ubuntu par défaut.

En tant qu'utilisateur sudo non root, mettez à jour l'index des packages de votre serveur si vous ne l'avez pas fait récemment :

sudo apt update

Ensuite, vous pouvez installer le package phpmyadmin. Parallèlement à ce package, la documentation officielle vous recommande également d'installer quelques extensions PHP sur votre serveur pour activer certaines fonctionnalités et améliorer les performances.

Si vous avez suivi le didacticiel prérequis de la pile LAMP, plusieurs de ces modules auront été installés avec le package php. Cependant, il est recommandé d’installer également ces packages :

  • php-mbstring : Un module pour gérer les chaînes non-ASCII et convertir les chaînes en différents encodages
  • php-zip : cette extension prend en charge le téléchargement de fichiers .zip vers phpMyAdmin
  • php-gd : Active la prise en charge de la bibliothèque graphique GD
  • php-json : fournit à PHP la prise en charge de la sérialisation JSON
  • php-curl : permet à PHP d'interagir avec différents types de serveurs en utilisant différents protocoles

Exécutez la commande suivante pour installer ces packages sur votre système. Veuillez noter cependant que le processus d'installation vous oblige à faire certains choix pour configurer correctement phpMyAdmin. Nous passerons en revue ces options sous peu :

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 :

  • Pour la sélection du serveur, choisissez apache2

Avertissement : Lorsque l'invite apparaît, « apache2 » est mis en surbrillance, mais pas sélectionné. Si vous n'appuyez pas sur ESPACE pour sélectionner Apache, le programme d'installation ne déplacera pas les fichiers nécessaires lors de l'installation. Appuyez sur ESPACE, TAB, puis ENTER pour sélectionner Apache.

  • Sélectionnez Oui lorsqu'on vous demande si vous souhaitez utiliser dbconfig-common pour configurer la base de données.
  • Il vous sera ensuite demandé de choisir et de confirmer un mot de passe d'application MySQL pour phpMyAdmin

Remarque : En supposant que vous ayez installé MySQL en suivant l'étape 2 du didacticiel préalable de la pile LAMP, vous avez peut-être décidé d'activer le plugin Validate Password. Au moment d'écrire ces lignes, 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 abort pour arrêter le processus d'installation. Ensuite, ouvrez votre invite MySQL :

sudo mysql

Ou, si vous avez activé l'authentification par mot de passe pour l'utilisateur root MySQL, exécutez cette commande, puis saisissez votre mot de passe lorsque vous y êtes invité :

mysql -u root -p

À partir de l'invite, exécutez la commande suivante pour désactiver le composant Valider le mot de passe. Notez que cela ne le désinstallera pas réellement, mais empêchera simplement le chargement du composant sur votre serveur MySQL :

UNINSTALL COMPONENT "file://component_validate_password";

Ensuite, vous pouvez fermer le client MySQL :

exit

Essayez ensuite d'installer à nouveau le package phpmyadmin et cela fonctionnera comme prévu :

sudo apt install phpmyadmin

Une fois phpMyAdmin installé, vous pouvez ouvrir à nouveau l'invite MySQL avec sudo mysql ou mysql -u root -p, puis exécuter la commande suivante pour réactiver la validation du mot de passe. composant:

INSTALL COMPONENT "file://component_validate_password";

Le processus d'installation ajoute le fichier de configuration phpMyAdmin Apache dans le répertoire /etc/apache2/conf-enabled/, où il est lu automatiquement. Pour terminer la configuration d'Apache et PHP pour fonctionner avec phpMyAdmin, la seule tâche restante dans cette section du didacticiel 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. Cependant, avant de pouvoir vous connecter et 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.

Étape 2 — Ajustement de l'authentification et des privilèges de l'utilisateur

Lorsque vous installez phpMyAdmin sur votre serveur, il crée automatiquement un utilisateur de base de données appelé phpmyadmin, qui exécute certains processus sous-jacents au 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 qu'utilisateur root MySQL, soit en tant qu'utilisateur dédié à la gestion des bases de données via l'interface phpMyAdmin.

Configuration de l'accès par mot de passe pour le compte racine MySQL

Dans les systèmes Ubuntu exécutant MySQL 5.7 (et versions ultérieures), l'utilisateur root MySQL est configuré pour s'authentifier à l'aide du plugin auth_socket par défaut plutôt qu'avec un mot de passe. Cela permet une sécurité et une convivialité accrues dans de nombreux cas, mais cela peut également compliquer les choses lorsque vous devez autoriser un programme externe, comme phpMyAdmin, à accéder à l'utilisateur.

Afin de vous connecter à phpMyAdmin en tant qu'utilisateur root MySQL, vous devrez changer sa méthode d'authentification de auth_socket à une méthode qui utilise un mot de passe, si vous l'avez fait. Je ne l'ai pas déjà fait. Pour ce faire, ouvrez l'invite MySQL depuis votre terminal :

sudo mysql

Ensuite, vérifiez quelle méthode d'authentification chacun de vos comptes utilisateur MySQL utilise avec la commande suivante :

SELECT user,authentication_string,plugin,host FROM mysql.user;

+------------------+------------------------------------------------------------------------+-----------------------+-----------+
| user             | authentication_string                                                  | plugin                | host      |
+------------------+------------------------------------------------------------------------+-----------------------+-----------+
| debian-sys-maint | $A$005$I:jOry?]Sy<|qhQRj3fBRQ43i4UJxrpm.IaT6lOHkgveJjmeIjJrRe6         | caching_sha2_password | localhost |
| mysql.infoschema | $A$005$THISISACOMBINATIONOFINVALIDSALTANDPASSWORDTHATMUSTNEVERBRBEUSED | caching_sha2_password | localhost |
| mysql.session    | $A$005$THISISACOMBINATIONOFINVALIDSALTANDPASSWORDTHATMUSTNEVERBRBEUSED | caching_sha2_password | localhost |
| mysql.sys        | $A$005$THISISACOMBINATIONOFINVALIDSALTANDPASSWORDTHATMUSTNEVERBRBEUSED | caching_sha2_password | localhost |
| phpmyadmin       | $A$005$?#{Z?`gN!c2az)}V-INCWXSuVdqB9zWteH1IkZfTe/rOLgVhSzEMM9R3G6K9    | caching_sha2_password | localhost |
| root             |                                                                        | auth_socket           | localhost |
+------------------+------------------------------------------------------------------------+-----------------------+-----------+
6 rows in set (0.00 sec)

Cet exemple de sortie indique que l'utilisateur root s'authentifie en fait à l'aide du plug-in auth_socket. Pour configurer le compte root pour qu'il s'authentifie avec un mot de passe, exécutez la commande ALTER USER suivante. Assurez-vous de remplacer le mot de passe 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 root MySQL pour qu'il s'authentifie 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écurisé que l'ancien, mais toujours 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é résolu à partir de PHP 7.4, mais si vous rencontrez une erreur lorsque vous essayez de vous connecter à phpMyAdmin ultérieurement, vous souhaiterez peut-être configurer 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 root ne s'authentifie plus à l'aide du plugin auth_socket :

SELECT user,authentication_string,plugin,host FROM mysql.user;

+------------------+------------------------------------------------------------------------+-----------------------+-----------+
| user             | authentication_string                                                  | plugin                | host      |
+------------------+------------------------------------------------------------------------+-----------------------+-----------+
| debian-sys-maint | $A$005$I:jOry?]Sy<|qhQRj3fBRQ43i4UJxrpm.IaT6lOHkgveJjmeIjJrRe6         | caching_sha2_password | localhost |
| mysql.infoschema | $A$005$THISISACOMBINATIONOFINVALIDSALTANDPASSWORDTHATMUSTNEVERBRBEUSED | caching_sha2_password | localhost |
| mysql.session    | $A$005$THISISACOMBINATIONOFINVALIDSALTANDPASSWORDTHATMUSTNEVERBRBEUSED | caching_sha2_password | localhost |
| mysql.sys        | $A$005$THISISACOMBINATIONOFINVALIDSALTANDPASSWORDTHATMUSTNEVERBRBEUSED | caching_sha2_password | localhost |
| phpmyadmin       | $A$005$?#{Z?`gN!c2az)}V-INCWXSuVdqB9zWteH1IkZfTe/rOLgVhSzEMM9R3G6K9    | caching_sha2_password | localhost |
| root             | $A$005$3y�y|Z?'_[} ZyVHuESVwNmjKWOH/ndETwS.Kty0IH7UfiXjOfVvyWroy4a.   | caching_sha2_password | localhost |
+------------------+------------------------------------------------------------------------+-----------------------+-----------+
6 rows in set (0.00 sec)

Ce résultat montre que l'utilisateur root s'authentifiera à l'aide d'un mot de passe. Vous pouvez maintenant vous connecter à l'interface phpMyAdmin en tant qu'utilisateur root avec le mot de passe que vous avez défini ici.

Configuration de l'accès par mot de passe pour un utilisateur MySQL dédié

Alternativement, certains peuvent trouver qu'il est plus adapté à leur flux de travail de se connecter à phpMyAdmin avec un utilisateur dédié. Pour ce faire, ouvrez à nouveau le shell MySQL :

sudo mysql

Si l'authentification par mot de passe est activée pour votre utilisateur root, 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 êtes invité afin de vous connecter :

mysql -u root -p

À partir de là, créez un nouvel utilisateur et donnez-lui un mot de passe fort :

CREATE USER 'sammy'@'localhost' IDENTIFIED WITH caching_sha2_password BY 'password';

Remarque : Encore une fois, selon la version de PHP que vous avez installée, vous souhaiterez peut-être configurer votre nouvel utilisateur pour qu'il s'authentifie avec mysql_native_password au lieu de 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 pouvez accorder des privilèges utilisateur à toutes les tables de la base de données, ainsi que le pouvoir d'ajouter, de modifier et de supprimer des privilèges utilisateur, avec cette commande :

GRANT ALL PRIVILEGES ON *.* TO 'sammy'@'localhost' WITH GRANT OPTION;

Ensuite, quittez le shell MySQL :

exit

Vous pouvez désormais 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 en tant que root, soit avec le nouveau nom d'utilisateur et le nouveau mot de passe que vous venez de configurer.

Lorsque vous vous connectez, vous serez redirigé vers l’interface utilisateur de phpMyAdmin :

Maintenant que vous pouvez vous connecter et interagir avec phpMyAdmin, il ne vous reste plus qu'à renforcer la sécurité de votre système pour le protéger des attaquants.

Étape 3 — Sécuriser votre instance phpMyAdmin

En raison de son omniprésence, phpMyAdmin est une cible populaire pour les attaquants, et vous devez faire très attention pour empêcher tout accès non autorisé. Une façon d’y parvenir consiste à placer une passerelle devant l’ensemble de l’application en utilisant les fonctionnalités d’authentification et d’autorisation .htaccess intégrées d’Apache.

Pour ce faire, vous devez d'abord activer l'utilisation des remplacements de fichiers .htaccess en modifiant le fichier de configuration Apache de votre installation phpMyAdmin.

Utilisez votre éditeur de texte préféré 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 du fichier de configuration, comme ceci :

<Directory /usr/share/phpmyadmin>
    Options SymLinksIfOwnerMatch
    DirectoryIndex index.php
    AllowOverride All
    . . .

Lorsque vous avez ajouté cette ligne, enregistrez et fermez le fichier. Si vous avez utilisé nano pour modifier le fichier, faites-le en appuyant sur CTRL + X, Y, puis sur ENTER. .

Pour mettre en œuvre les modifications que vous avez apportées, redémarrez Apache :

sudo systemctl restart apache2

Maintenant que vous avez activé l'utilisation des fichiers .htaccess pour votre application, vous devez en créer un pour réellement implémenter une certaine sécurité.

Pour que cela réussisse, 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, saisissez 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 spécifie le type d'authentification que vous implémentez. Ce type implémentera l'authentification par mot de passe à l'aide d'un fichier de mot de passe.
  • AuthName : Ceci définit le message pour la boîte de dialogue d'authentification. Vous devez conserver ce nom générique afin que les utilisateurs non autorisés n’obtiennent aucune information sur ce qui est protégé.
  • AuthUserFile : Ceci définit l'emplacement du fichier de mot de passe qui sera utilisé pour l'authentification. Cela doit être en dehors des répertoires qui sont servis. Nous créerons ce fichier prochainement.
  • Exiger un utilisateur valide : ceci spécifie que seuls les utilisateurs authentifiés doivent avoir accès à cette ressource. C’est ce qui empêche les utilisateurs non autorisés d’entrer.

Lorsque vous avez terminé, enregistrez et fermez le fichier.

L'emplacement que vous avez sélectionné 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 saisi.

Si vous souhaitez saisir un utilisateur supplémentaire, vous devez le faire sans l'indicateur -c, comme ceci :

sudo htpasswd /etc/phpmyadmin/.htpasswd additionaluser

Redémarrez ensuite Apache pour mettre en œuvre l'authentification .htaccess :

sudo systemctl restart apache2

Désormais, lorsque vous accédez à votre sous-répertoire phpMyAdmin, vous serez invité à saisir 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 redirigé vers la page d'authentification phpMyAdmin habituelle pour saisir vos informations d'identification MySQL. En ajoutant un ensemble supplémentaire d'informations d'identification non MySQL, vous fournissez à 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é dans le passé.

Conclusion

Vous devriez maintenant avoir phpMyAdmin configuré et prêt à être utilisé sur votre serveur Ubuntu. En utilisant cette interface, vous pouvez créer des bases de données, des utilisateurs et des tables, ainsi qu'effectuer les opérations habituelles comme supprimer et modifier des structures et des données.