Comment installer et sécuriser phpMyAdmin sur Ubuntu 18.04

Une version antérieure de ce didacticiel a été écrite parBrennan Bearnes.

introduction

Alors que de nombreux utilisateurs ont 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 d'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 expliquerons 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 18.04.

Conditions préalables

Avant de commencer à utiliser ce guide, vous devez suivre certaines étapes élémentaires.

Tout d'abord, nous supposerons que votre serveur a un utilisateur non -root avec les privilègessudo, ainsi qu'un pare-feu configuré avecufw, comme décrit dans lesinitial server setup guide for Ubuntu 18.04.

Nous allons également supposer que vous avez terminé l’installation de LAMP (Linux, Apache, MySQL et PHP) sur votre serveur Ubuntu 18.04. Si ce n'est pas encore terminé, vous pouvez suivre ce guide surinstalling a LAMP stack on Ubuntu 18.04.

Enfin, il existe des considérations de sécurité importantes lors de l’utilisation de logiciels tels que phpMyAdmin, dans la mesure où:

  • Communique directement avec votre installation MySQL

  • Gère l'authentification à l'aide des informations d'identification MySQL

  • Exécute et renvoie les résultats pour 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 attaquée, 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 sursecuring Apache with Let’s Encrypt on Ubuntu 18.04. Cela vous obligera àregister a domain name,create DNS records for your server etset up an Apache Virtual Host.

Une fois ces étapes terminées, vous êtes prêt à utiliser ce guide.

[[step-1 -—- Installing-phpmyadmin]] == Étape 1 - Installation de phpMyAdmin

Pour commencer, nous allons installer phpMyAdmin à partir des référentiels Ubuntu par défaut.

Pour ce faire, mettez à jour l’index des packages de votre serveur, puis utilisez le système d’empaquetageapt pour extraire les fichiers et les installer sur votre système:

sudo apt update
sudo apt install phpmyadmin php-mbstring php-gettext

Cela vous posera quelques questions afin de configurer votre installation correctement.

[.warning] #Warning: Lorsque l'invite apparaît, «apache2» est mis en surbrillance, maisnotest sélectionné. Si vous n'appuyez pas surSPACE pour sélectionner Apache, le programme d'installation déplaceranot les fichiers nécessaires pendant l'installation. Appuyez surSPACE,TAB, puis surENTER pour sélectionner Apache.
#

  • Pour la sélection du serveur, choisissezapache2

  • SélectionnezYes lorsqu'on vous demande si vous souhaitez utiliserdbconfig-common pour configurer la base de données

  • On vous demandera ensuite de choisir et de confirmer un mot de passe d'application MySQL pour phpMyAdmin.

Le processus d'installation ajoute le fichier de configuration Apache phpMyAdmin dans le répertoire/etc/apache2/conf-enabled/, où il est lu automatiquement. La seule chose que vous devez faire est d'activer explicitement l'extension PHPmbstring, 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é. Cependant, avant de pouvoir vous connecter et commencer à interagir avec vos bases de données MySQL, vous devez vous assurer que vos utilisateurs MySQL disposent des privilèges nécessaires pour interagir avec le programme.

[[step-2 -—- Adjusting-user-authentication-and-privileges]] == Étape 2 - Ajuster l'authentification et les privilèges des utilisateurs

Lorsque vous avez installé phpMyAdmin sur votre serveur, il a automatiquement créé un utilisateur de base de données appeléphpmyadmin qui exécute certains processus sous-jacents pour le programme. Plutôt que de vous connecter en tant que cet utilisateur avec le mot de passe administratif que vous avez défini lors de l'installation, il est recommandé de vous connecter en tant qu'utilisateur MySQL deroot ou 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 MySQL deroot est configuré pour s'authentifier en utilisant le pluginauth_socket par défaut plutôt qu'avec un mot de passe. Cela permet une plus grande sécurité et convivialité dans de nombreux cas, mais cela peut également compliquer les choses lorsque vous devez autoriser un programme externe - comme phpMyAdmin - à accéder à l'utilisateur.

Pour vous connecter à phpMyAdmin en tant qu'utilisateur MySQL deroot, vous devrez changer sa méthode d'authentification deauth_socket àmysql_native_password 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 d’utilisateur MySQL avec 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 | mysql_native_password | localhost |
| mysql.sys        | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE | mysql_native_password | localhost |
| debian-sys-maint | *8486437DE5F65ADC4A4B001CA591363B64746D4C | mysql_native_password | localhost |
| phpmyadmin       | *5FD2B7524254B7F81B32873B1EA6D681503A5CA9 | mysql_native_password | localhost |
+------------------+-------------------------------------------+-----------------------+-----------+
5 rows in set (0.00 sec)

Dans cet exemple, vous pouvez voir que l'utilisateurroot s'authentifie en fait en utilisant le pluginauth_socket. Pour configurer le compteroot afin qu'il s'authentifie avec un mot de passe, exécutez la commandeALTER USER suivante. Assurez-vous de remplacerpassword par un mot de passe fort de votre choix:

ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'password';

Ensuite, exécutezFLUSH PRIVILEGES qui dit au serveur de recharger les tables d'octroi et de mettre vos nouvelles modifications en vigueur:

FLUSH PRIVILEGES;

Vérifiez à nouveau les méthodes d'authentification employées par chacun de vos utilisateurs pour confirmer queroot ne s'authentifie plus à l'aide du pluginauth_socket:

SELECT user,authentication_string,plugin,host FROM mysql.user;
Output+------------------+-------------------------------------------+-----------------------+-----------+
| user             | authentication_string                     | plugin                | host      |
+------------------+-------------------------------------------+-----------------------+-----------+
| root             | *DE06E242B88EFB1FE4B5083587C260BACB2A6158 | mysql_native_password | localhost |
| mysql.session    | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE | mysql_native_password | localhost |
| mysql.sys        | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE | mysql_native_password | localhost |
| debian-sys-maint | *8486437DE5F65ADC4A4B001CA591363B64746D4C | mysql_native_password | localhost |
| phpmyadmin       | *5FD2B7524254B7F81B32873B1EA6D681503A5CA9 | mysql_native_password | localhost |
+------------------+-------------------------------------------+-----------------------+-----------+
5 rows in set (0.00 sec)

Vous pouvez voir à partir de cette sortie que l'utilisateur deroot s'authentifiera à l'aide d'un mot de passe. Vous pouvez maintenant vous connecter à l’interface phpMyAdmin en tant qu’utilisateur derootavec 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é

Certains peuvent également trouver plus utile de se connecter à phpMyAdmin avec un utilisateur dédié, ce qui convient mieux à leur flux de travail. Pour cela, ouvrez à nouveau le shell MySQL:

sudo mysql

[.Remarque]##

Note: Si vous avez activé l'authentification par mot de passe, comme décrit dans la section précédente, vous devrez utiliser une commande différente pour accéder au shell MySQL. Les éléments suivants exécuteront votre client MySQL avec des privilèges d'utilisateur réguliers et vous n'obtiendrez des privilèges d'administrateur dans la base de données qu'en vous authentifiant:

mysql -u root -p

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

CREATE USER 'sammy'@'localhost' IDENTIFIED 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, à l'aide de la commande suivante:

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:

http://your_domain_or_IP/phpmyadmin

phpMyAdmin login screen

Connectez-vous à l'interface, soit en tant queroot, soit avec le nouveau nom d'utilisateur et mot de passe que vous venez de configurer.

Lorsque vous vous connectez, vous verrez l'interface utilisateur, qui ressemblera à ceci:

phpMyAdmin user interface

Maintenant que vous pouvez vous connecter et interagir avec phpMyAdmin, il ne reste plus qu’à renforcer la sécurité de vos systèmes pour le protéger des attaques.

[[step-3 -—- secururing-your-phpmyadmin-instance]] == Étape 3 - Sécurisation de votre instance phpMyAdmin

En raison de son omniprésence, phpMyAdmin est une cible populaire pour les attaquants, et vous devez également prendre des précautions supplémentaires pour empêcher les accès non autorisés. L’une des méthodes les plus simples 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 éditant votre fichier de configuration Apache.

Editez le fichier lié qui a été placé dans votre répertoire de configuration Apache:

sudo nano /etc/apache2/conf-available/phpmyadmin.conf

Ajoutez une directiveAllowOverride All dans la section<Directory /usr/share/phpmyadmin> du fichier de configuration, comme ceci:

/etc/apache2/conf-available/phpmyadmin.conf


    Options FollowSymLinks
    DirectoryIndex index.php
    AllowOverride All
    . . .

Lorsque vous avez ajouté cette ligne, enregistrez et fermez le fichier.

Pour implémenter les modifications que vous avez apportées, redémarrez Apache:

sudo systemctl restart apache2

Maintenant que vous avez activé l'utilisation de.htaccess pour votre application, vous devez en créer une pour implémenter une 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, entrez les informations suivantes:

/usr/share/phpmyadmin/.htaccess

AuthType Basic
AuthName "Restricted Files"
AuthUserFile /etc/phpmyadmin/.htpasswd
Require valid-user

Voici ce que chacune de ces lignes signifie:

  • 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 générique afin que les utilisateurs non autorisés ne reçoivent 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 devrait être en dehors des répertoires qui sont servis. Nous allons créer ce fichier sous peu.

  • Require valid-user: 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 lui transmettre un utilisateur initial avec l'utilitairehtpasswd:

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 fairewithout le drapeau-c, comme ceci:

sudo htpasswd /etc/phpmyadmin/.htpasswd additionaluser

Maintenant, lorsque vous accédez à votre sous-répertoire phpMyAdmin, vous serez invité à indiquer le nom de compte et le mot de passe supplémentaires que vous venez de configurer:

https://domain_name_or_IP/phpmyadmin

phpMyAdmin apache password

Après avoir entré l'authentification Apache, vous serez redirigé vers la page d'authentification phpMyAdmin habituelle pour entrer vos informations d'identification MySQL. Cette configuration ajoute une couche de sécurité supplémentaire, ce qui est souhaitable depuis que phpMyAdmin a souffert de vulnérabilités dans le passé.

Conclusion

Vous devriez maintenant avoir configuré et prêt à utiliser phpMyAdmin sur votre serveur Ubuntu 18.04. En utilisant cette interface, vous pouvez facilement créer des bases de données, des utilisateurs, des tables, etc., et effectuer les opérations habituelles telles que la suppression et la modification de structures et de données.