Comment installer et sécuriser phpMyAdmin avec Apache sur un serveur CentOS 7

introduction

Les systèmes de gestion de base de données relationnelle tels que MySQL et MariaDB sont nécessaires pour une grande partie des sites Web et des applications. Cependant, tous les utilisateurs ne se sentent pas à l'aise pour administrer leurs données à partir de la ligne de commande.

Pour résoudre ce problème, un projet appelé phpMyAdmin a été créé afin de proposer une alternative sous la forme d'une interface de gestion basée sur le Web. Dans ce guide, nous montrerons comment installer et sécuriser une configuration phpMyAdmin sur un serveur CentOS 7. Nous allons construire cette configuration sur le serveur Web Apache, le serveur Web le plus populaire au monde.

Conditions préalables

Avant de commencer, il y a quelques exigences à régler.

Pour vous assurer que vous disposez d'une base solide sur laquelle construire ce système, vous devez parcourir nosinitial server setup guide for CentOS 7. Entre autres choses, cela vous guidera à travers la configuration d'un utilisateur non root avec un accèssudopour les commandes d'administration.

La deuxième condition préalable à remplir pour pouvoir commencer à utiliser ce guide consiste à installer une pile LAMP (Linux, Apache, MariaDB et PHP) sur votre serveur CentOS 7. C’est la plate-forme que nous utiliserons pour servir notre interface phpMyAdmin (MariaDB est également le logiciel de gestion de base de données que nous souhaitons gérer). Si vous n'avez pas encore d'installation LAMP sur votre serveur, suivez notre tutoriel surinstalling LAMP on CentOS 7.

Lorsque votre serveur fonctionne correctement après avoir suivi ces instructions, vous pouvez continuer avec le reste de cette page.

[[step-one -—- install-phpmyadmin]] == Première étape - Installer phpMyAdmin

Avec notre plateforme LAMP déjà en place, nous pouvons commencer immédiatement par installer le logiciel phpMyAdmin. Malheureusement, phpMyAdmin n’est pas disponible dans le référentiel par défaut de CentOS 7.

Pour obtenir les packages dont nous avons besoin, nous devrons ajouter un référentiel supplémentaire à notre système. Le repo EPEL (ExtraPackages forEnterpriseLinux) contient de nombreux packages supplémentaires, y compris le package phpMyAdmin que nous recherchons.

Le référentiel EPEL peut être mis à disposition de votre serveur en installant un package spécial appeléepel-release. Cela reconfigurera votre liste de référentiels et vous donnera accès aux packages EPEL.

Pour installer, tapez simplement:

sudo yum install epel-release

Maintenant que le dépôt EPEL est configuré, vous pouvez installer le package phpMyAdmin en utilisant le système de packagingyum en tapant:

sudo yum install phpmyadmin

L'installation va maintenant se terminer. L'installation comprenait un fichier de configuration Apache déjà mis en place. Nous devrons le modifier un peu pour que cela fonctionne correctement pour notre installation.

Ouvrez maintenant le fichier dans votre éditeur de texte afin que nous puissions apporter quelques modifications:

sudo nano /etc/httpd/conf.d/phpMyAdmin.conf

À l'intérieur, nous voyons des blocs d'annuaire avec une logique conditionnelle pour expliquer la stratégie d'accès de notre annuaire. Il existe deux répertoires distincts définis et, à l'intérieur de ceux-ci, des configurations valables pour Apache 2.2 et Apache 2.4 (que nous exécutons).

Actuellement, cette configuration est configurée pour refuser l’accès à toute connexion n’étant pas établie à partir du serveur lui-même. Puisque nous travaillons sur notre serveur à distance, nous devons modifier certaines lignes pour spécifier l'adresse IP de votre connexionhome.

Modifiez toutes les lignes qui lisentRequire ip 127.0.0.1 ouAllow from 127.0.0.1 pour faire référence à l'adresse IP de votre connexion domestique. Si vous avez besoin d’aide pour trouver l’adresse IP de votre connexion domestique, consultez la section suivante. Il doit y avoir quatre emplacements dans le fichier qui doivent être modifiés:

. . .
Require ip your_workstation_IP_address
. . .
Allow from your_workstation_IP_address
. . .
Require ip your_workstation_IP_address
. . .
Allow from your_workstation_IP_address
. . .

Lorsque vous avez terminé, redémarrez le serveur Web Apache pour mettre en œuvre vos modifications en tapant:

sudo systemctl restart httpd.service

Avec cela, notre 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:

http://server_domain_or_IP/phpMyAdmin

phpMyAdmin login screen

Pour vous connecter, utilisez une paire nom d'utilisateur / mot de passe d'un utilisateur MariaDB valide. L'utilisateurroot et le mot de passe administrateur MariaDB sont un bon choix pour commencer. Vous pourrez alors accéder à l'interface administrative:

phpMyAdmin admin interface

Trouvez votre adresse IP

Vous aurez besoin de connaître l'adresse IP de l'ordinateur que vous utilisez pour accéder à vos bases de données afin d'effectuer l'étape ci-dessus. Ceci est une précaution de sécurité afin que des personnes non autorisées ne puissent pas se connecter à votre serveur.

Remarque: il s'agit denot l'adresse IP de votre VPS, c'est l'adresse IP de votre ordinateur personnel ou professionnel.

Pour savoir comment le grand Web voit votre adresse IP, visitez l'un de ces sites dans votre navigateur Web:

Comparez plusieurs sites et assurez-vous qu'ils vous donnent tous la même valeur. Utilisez cette valeur dans le fichier de configuration ci-dessus.

[[step-two -—- secure-your-phpmyadmin-instance]] == Deuxième étape - Sécurisez votre instance phpMyAdmin

L'instance phpMyAdmin installée sur notre serveur devrait être complètement utilisable à ce stade. Cependant, en installant une interface Web, nous avons exposé notre système MySQL au monde extérieur.

Même avec l'écran d'authentification inclus, c'est tout un problème. En raison de la popularité de phpMyAdmin et de la grande quantité de données auxquelles il donne accès, de telles installations sont des cibles courantes pour les attaquants.

Nous allons mettre en œuvre deux stratégies simples pour réduire les chances que notre installation soit ciblée et compromise. Nous allons changer l'emplacement de l'interface de/phpMyAdmin à quelque chose d'autre pour éviter certaines des tentatives automatisées de force brute de bot. Nous allons également créer une passerelle d'authentification supplémentaire au niveau du serveur Web qui doit être transmise avant même d'accéder à l'écran de connexion de phpMyAdmin.

Modification de l’emplacement d’accès de l’application

Pour que notre serveur Web Apache fonctionne avec phpMyAdmin, notre fichier de configuration phpMyAdmin Apache utilise un alias pour pointer vers l'emplacement du répertoire des fichiers.

Pour changer l'URL où notre interface phpMyAdmin est accessible, il suffit de renommer l'alias. Ouvrez le fichier de configuration phpMyAdmin Apache maintenant:

sudo nano /etc/httpd/conf.d/phpMyAdmin.conf

Vers le haut du fichier, vous verrez deux lignes qui ressemblent à ceci:

Alias /phpMyAdmin /usr/share/phpMyAdmin
Alias /phpmyadmin /usr/share/phpMyAdmin

Ces deux lignes sont nos alias, ce qui signifie que si nous accédons au nom de domaine ou à l’adresse IP de notre site, suivi de/phpMyAdmin ou/phpmyadmin, nous recevrons le contenu à/usr/share/phpMyAdmin.

Nous voulons désactiver ces alias spécifiques car ils sont fortement ciblés par des robots et des utilisateurs malveillants. Au lieu de cela, nous devrions choisir notre propre alias. Ce devrait être facile à retenir, mais pas facile à deviner. Il ne devrait pas indiquer le but de l’emplacement de l’URL. Dans notre cas, nous allons utiliser/nothingtosee.

Pour appliquer les modifications souhaitées, nous devons supprimer ou commenter les lignes existantes et ajouter les nôtres:

# Alias /phpMyAdmin /usr/share/phpMyAdmin
# Alias /phpmyadmin /usr/share/phpMyAdmin
Alias /nothingtosee /usr/share/phpMyAdmin

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

Pour implémenter les modifications, redémarrez le service Web:

sudo systemctl restart httpd.service

Maintenant, si vous allez à l'emplacement précédent de votre installation phpMyAdmin, vous obtiendrez une erreur 404:

http://server_domain_or_IP/phpMyAdmin

phpMyAdmin 404 error

Cependant, votre interface phpMyAdmin sera disponible au nouvel emplacement que nous avons sélectionné:

http://server_domain_or_IP/nothingtosee

phpMyAdmin login screen

Configuration d'une passerelle d'authentification de serveur Web

La prochaine fonctionnalité que nous souhaitions pour notre installation était une invite d'authentification qu'un utilisateur serait tenu de transmettre avant de voir l'écran de connexion phpMyAdmin.

Heureusement, la plupart des serveurs Web, y compris Apache, fournissent cette fonctionnalité de manière native. Nous aurons simplement besoin de modifier notre fichier de configuration Apache pour utiliser un fichier d'autorisation.

Ouvrez à nouveau le fichier de configuration phpMyAdmin Apache dans votre éditeur de texte:

sudo nano /etc/httpd/conf.d/phpMyAdmin.conf

Dans le bloc de répertoire/usr/share/phpMyAdmin, mais en dehors de l'un des blocs à l'intérieur, nous devons ajouter une directive de remplacement. Il ressemblera à ceci:

. . .

   AllowOverride All
   
   . . .

. . .

Cela nous permettra de spécifier des détails de configuration supplémentaires dans un fichier appelé.htaccess situéwithin dans le répertoire phpMyAdmin lui-même. Nous utiliserons ce fichier pour configurer notre authentification par mot de passe.

Enregistrez et fermez le fichier lorsque vous avez terminé.

Redémarrez le service Web pour implémenter cette modification:

sudo systemctl restart httpd.service

Créer un fichier .htaccess

Maintenant que nous avons la directive override dans notre configuration, Apache recherchera un fichier appelé.htaccess dans le répertoire/usr/share/phpMyAdmin. S'il en trouve un, il utilisera les directives qu'il contient pour compléter ses données de configuration précédentes.

Notre prochaine étape consiste à créer le fichier.htaccess dans ce répertoire. Utilisez votre éditeur de texte pour le faire maintenant:

sudo nano /usr/share/phpMyAdmin/.htaccess

Dans ce fichier, nous devons entrer les informations suivantes:

AuthType Basic
AuthName "Admin Login"
AuthUserFile /etc/httpd/pma_pass
Require valid-user

Voyons ce que chacune de ces lignes signifie:

  • AuthType Basic: Cette ligne spécifie le type d'authentification que nous implémentons. 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 n’apprennent pas ce qui est protégé.

  • AuthUserFile: Ceci définit l'emplacement du fichier de mot de passe réel qui sera utilisé pour l'authentification. Cela devrait être en dehors des répertoires qui sont servis. Nous allons créer ce fichier dans un instant.

  • 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é d'entrer ces informations, enregistrez et fermez le fichier.

Créer le fichier de mot de passe pour l'authentification

Maintenant que nous avons spécifié l'emplacement de notre fichier de mots de passe en utilisant la directiveAuthUserFile dans notre fichier.htaccess, nous devons créer et remplir le fichier de mots de passe.

Cela peut être accompli grâce à l'utilisation d'un utilitaire Apache appeléhtpasswd. Nous appelons la commande en lui transmettant l'emplacement où nous souhaitons créer le fichier et le nom d'utilisateur pour lequel nous souhaitons entrer les détails d'authentification pour:

sudo htpasswd -c /etc/httpd/pma_pass username

L'indicateur-c indique que cela créera un fichier initial. L'emplacement du répertoire est le chemin et le nom du fichier qui seront utilisés pour le fichier. Le nom d'utilisateur est le premier utilisateur que nous aimerions ajouter. Vous serez invité à entrer et à confirmer un mot de passe pour l'utilisateur.

Si vous souhaitez ajouter des utilisateurs supplémentaires à authentifier, vous pouvez appeler à nouveau la même commandewithout l'indicateur-c, et avec un nouveau nom d'utilisateur:

sudo htpasswd /etc/httpd/pma_pass seconduser

Avec notre fichier de mots de passe créé, une passerelle d'authentification a été mise en place et nous devrions maintenant voir une invite de mot de passe lors de notre prochaine visite sur notre site:

http://server_domain_or_IP/nothingtosee

Apache authentication page

Une fois que vous avez entré vos identifiants, vous serez redirigé vers la page de connexion normale de phpMyAdmin. Cette couche de protection supplémentaire aidera à garder vos journaux MySQL à l’abri des tentatives d’authentification, en plus des avantages de sécurité supplémentaires.

Conclusion

Vous pouvez maintenant gérer vos bases de données MySQL à partir d'une interface Web raisonnablement sécurisée. Cette interface utilisateur présente la plupart des fonctionnalités disponibles à partir de l'invite de commande MySQL. Vous pouvez afficher 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.