phpMyAdmin est un outil gratuit et open source pour gérer les serveurs MySQL et MariaDB via une interface Web. Avec phpMyAdmin, vous pouvez créer et gérer des bases de données et des utilisateurs, exécuter des instructions SQL, importer et exporter des données et effectuer des activités de base de données telles que la création, la suppression de tables, de colonnes, d'index, d'autorisations et bien d'autres. phpMyAdmin est l'un des outils d'administration les plus populaires et les plus utilisés, en particulier pour les services d'hébergement Web.
Fonctionnalités
- Fournit une interface Web simple et conviviale.
- Importer des données depuis CSV et SQL.
- Prend en charge la plupart des fonctionnalités de MySQL, notamment créer, copier, supprimer, renommer, supprimer et modifier des bases de données, des tables, des champs et des index.
- Vous permet d'exporter des données vers différents formats tels que PDF, CSV, SQL, XML et bien d'autres.
- Gestion de plusieurs serveurs.
- Créer des requêtes complexes à l'aide de Query-by-example (QBE).
Dans ce tutoriel, nous allons vous montrer comment installer et sécuriser phpMyAdmin sur un serveur CentOS 8.
Exigences
- Un serveur exécutant CentOS 8.
- Un mot de passe root est configuré sur le serveur.
Installer le serveur LAMP
Tout d'abord, vous devrez installer Apache, MariaDB, PHP et d'autres bibliothèques PHP sur votre serveur. Vous pouvez tous les installer avec la commande suivante :
dnf install httpd mariadb-server php php-pdo php-pecl-zip php-json php-common php-fpm php-mbstring php-cli php-mysqlnd php-json php-mbstring wget unzip
Une fois tous les packages installés, démarrez les services Apache et MariaDB et autorisez-les à démarrer après le redémarrage du système avec la commande suivante :
systemctl start httpd
systemctl start mariadb
systemctl enable httpd
systemctl enable mariadb
Une fois que vous avez terminé, vous pouvez passer à l'étape suivante.
Configurer MariaDB
Par défaut, MariaDB n'est pas sécurisée. Vous devrez donc d'abord le sécuriser. Vous pouvez le faire en exécutant le script mysql_secure_installation :
mysql_secure_installation
Répondez à toutes les questions comme indiqué ci-dessous :
Set root password? [Y/n] Y New password: Remove anonymous users? [Y/n] Y Disallow root login remotely? [Y/n] Y Remove test database and access to it? [Y/n] Y Reload privilege tables now? [Y/n] Y
Une fois que vous avez terminé, vous devriez voir la sortie suivante :
... Success! Cleaning up... All done! If you've completed all of the above steps, your MariaDB installation should now be secure. Thanks for using MariaDB!
À ce stade, votre installation de MariaDB est sécurisée.
Installer phpMyAdmin
Par défaut, phpMyAdmin n'est pas disponible dans le référentiel par défaut de CentOS 8. Vous devrez donc télécharger la dernière version de phpMyAdmin depuis leur site officiel. Vous pouvez le télécharger avec la commande suivante :
wget https://files.phpmyadmin.net/phpMyAdmin/4.9.2/phpMyAdmin-4.9.2-all-languages.zip
Une fois téléchargé, décompressez le fichier téléchargé avec la commande suivante :
unzip phpMyAdmin-4.9.2-all-languages.zip
Ensuite, déplacez le contenu extrait vers le répertoire /usr/share comme indiqué ci-dessous :
mv phpMyAdmin-4.9.2-all-languages /usr/share/phpmyadmin
Ensuite, changez le répertoire en /usr/share/phpmyadmin et renommez le fichier config.sample.inc.php :
cd /usr/share/phpmyadmin
mv config.sample.inc.php config.inc.php
Ensuite, ouvrez le fichier avec votre éditeur de texte préféré comme indiqué ci-dessous :
nano config.inc.php
Modifiez la ligne suivante :
$cfg['blowfish_secret'] = 'your-secret-password';
Enregistrez et fermez le fichier lorsque vous avez terminé. Ensuite, importez le create_tables.sql avec la commande suivante :
mysql < /usr/share/phpmyadmin/sql/create_tables.sql -u root -p
Fournissez votre mot de passe root lorsque vous êtes invité à importer la table.
Ensuite, créez un répertoire tmp pour phpmyadmin et donnez les permissions appropriées :
mkdir /usr/share/phpmyadmin/tmp
chown -R apache:apache /usr/share/phpmyadmin
chmod 777 /usr/share/phpmyadmin/tmp
Configurer Apache pour phpMyAdmin
Ensuite, vous devrez créer un fichier de configuration d'hôte virtuel Apache pour phpMyAdmin. Vous pouvez le créer avec la commande suivante :
nano /etc/httpd/conf.d/phpmyadmin.conf
Ajoutez les lignes suivantes :
Alias /phpmyadmin /usr/share/phpmyadmin <Directory /usr/share/phpmyadmin/> AddDefaultCharset UTF-8 <IfModule mod_authz_core.c> # Apache 2.4 <RequireAny> Require all granted </RequireAny> </IfModule> <IfModule !mod_authz_core.c> # Apache 2.2 Order Deny,Allow Deny from All Allow from 127.0.0.1 Allow from ::1 </IfModule> </Directory> <Directory /usr/share/phpmyadmin/setup/> <IfModule mod_authz_core.c> # Apache 2.4 <RequireAny> Require all granted </RequireAny> </IfModule> <IfModule !mod_authz_core.c> # Apache 2.2 Order Deny,Allow Deny from All Allow from 127.0.0.1 Allow from ::1 </IfModule> </Directory>
Enregistrez et fermez le fichier lorsque vous avez terminé. Ensuite, redémarrez le service Apache avec la commande suivante :
systemctl restart httpd
Vous pouvez vérifier l'état d'Apache avec la commande suivante :
systemctl status httpd
Vous devriez voir le résultat suivant :
? httpd.service - The Apache HTTP Server Loaded: loaded (/usr/lib/systemd/system/httpd.service; enabled; vendor preset: disabled) Drop-In: /usr/lib/systemd/system/httpd.service.d ??php-fpm.conf Active: active (running) since Wed 2019-12-18 01:07:52 EST; 6s ago Docs: man:httpd.service(8) Main PID: 5636 (httpd) Status: "Started, listening on: port 80" Tasks: 213 (limit: 25044) Memory: 28.7M CGroup: /system.slice/httpd.service ??5636 /usr/sbin/httpd -DFOREGROUND ??5639 /usr/sbin/httpd -DFOREGROUND ??5640 /usr/sbin/httpd -DFOREGROUND ??5641 /usr/sbin/httpd -DFOREGROUND ??5642 /usr/sbin/httpd -DFOREGROUND Dec 18 01:07:52 centos8 systemd[1]: Stopped The Apache HTTP Server. Dec 18 01:07:52 centos8 systemd[1]: Starting The Apache HTTP Server... Dec 18 01:07:52 centos8 httpd[5636]: AH00558: httpd: Could not reliably determine the server's fully qualified domain name, using fe80::200:d0> Dec 18 01:07:52 centos8 httpd[5636]: Server configured, listening on: port 80 Dec 18 01:07:52 centos8 systemd[1]: Started The Apache HTTP Server.
Configurer SELinux et le pare-feu
Par défaut, SELinux est activé dans CentOS 8. Vous devrez donc configurer SELinux pour que phpMyAdmin fonctionne correctement.
Tout d'abord, installez le package policycoreutils-python-utils pour gérer un environnement SELinux avec la commande suivante :
dnf install policycoreutils-python-utils
Ensuite, activez l'accès au répertoire /usr/share/phpmyadmin avec la commande suivante :
semanage fcontext -a -t httpd_sys_rw_content_t '/usr/share/phpmyadmin/'
semanage fcontext -a -t httpd_sys_rw_content_t "/usr/share/phpmyadmin/tmp(/.*)?"
Parcourez maintenant tous les fichiers de votre répertoire phpmyadmin en exécutant la commande suivante :
restorecon -Rv '/usr/share/phpmyadmin/'
Ensuite, vous devrez créer une règle de pare-feu pour autoriser le service HTTP à partir de réseaux externes. Vous pouvez l'autoriser avec la commande suivante :
firewall-cmd --permanent --add-service=http
firewall-cmd --reload
phpMyAdmin est maintenant installé et configuré. Il est maintenant temps de vérifier si cela fonctionne ou non.
Ouvrez votre navigateur Web et tapez l'URL http://your-server-ip/phpmyadmin. Vous serez redirigé vers la page suivante :
Sécuriser phpMyAdmin
À ce stade, l'instance phpMyAdmin fonctionne correctement. Cependant, sécuriser votre instance phpMyAdmin du monde extérieur est une tâche importante pour vous. Dans cette section, nous allons vous montrer comment sécuriser votre instance phpMyAdmin.
Autoriser phpMyAdmin à partir d'une adresse IP spécifique
Tout d'abord, vous devrez configurer votre phpMyAdmin pour qu'il soit accessible uniquement depuis l'adresse IP de votre connexion domestique.
Vous pouvez le configurer en éditant le fichier /etc/httpd/conf.d/phpmyadmin.conf :
nano /etc/httpd/conf.d/phpmyadmin.conf
Recherchez les lignes suivantes :
<RequireAny> Require all granted </RequireAny>
Et remplacez-les par ce qui suit :
<RequireAny> Require ip your-home--connection-ip-address Require ip ::1 </RequireAny>
Enregistrez et fermez le fichier lorsque vous avez terminé.
Configurer une couche d'authentification supplémentaire
C'est une bonne idée de protéger par mot de passe votre répertoire phpmyadmin en configurant une authentification de base.
Pour ce faire, créez un nouveau fichier d'authentification à l'aide de l'outil htpasswd comme indiqué ci-dessous :
mkdir /etc/phpmyadmin
htpasswd -c /etc/phpmyadmin/.htpasswd admin
Il vous sera demandé de fournir votre mot de passe administrateur comme indiqué ci-dessous :
New password: Re-type new password: Adding password for user admin
Ensuite, vous devrez configurer Apache pour utiliser le fichier .htpasswd. Vous pouvez le faire en éditant le fichier /etc/httpd/conf.d/phpmyadmin.conf.
nano /etc/httpd/conf.d/phpmyadmin.conf
Ajoutez les lignes suivantes sous la ligne "AddDefaultCharset UTF-8":
Options +FollowSymLinks +Multiviews +Indexes AllowOverride None AuthType basic AuthName "Authentication Required" AuthUserFile /etc/phpmyadmin/.htpasswd Require valid-user
Enregistrez le fichier et redémarrez le service Apache pour que les modifications prennent effet :
systemctl restart httpd
Accéder à phpMyAdmin
Maintenant, votre instance phpMyAdmin est sécurisée avec une couche de sécurité supplémentaire. Ouvrez votre navigateur Web et tapez l'URL http://your-server-ip/phpmyadmin. Il vous sera demandé de saisir les identifiants de connexion de l'utilisateur que vous avez précédemment créé comme indiqué ci-dessous :
Indiquez votre nom d'utilisateur et votre mot de passe d'administrateur, puis cliquez sur le bouton OK. Vous allez être redirigé vers la page de connexion de phpMyAdmin :
Maintenant, fournissez vos identifiants de connexion d'utilisateur administratif MySQL et cliquez sur le bouton Go. Vous devriez voir la page suivante :
Conclusion
Toutes nos félicitations! vous avez installé et sécurisé avec succès phpMyAdmin sur le serveur CentOS 8. Vous pouvez désormais créer des bases de données, des utilisateurs, des tables et les gérer à partir de l'interface Web. N'hésitez pas à me demander si vous avez des questions.