Recherche de site Web

12 meilleures pratiques de sécurité MySQL/MariaDB pour Linux


MySQL est le système de base de données open source le plus populaire au monde et MariaDB (un fork de MySQL) est le système de base de données open source qui connaît la croissance la plus rapide au monde. Après l'installation du serveur MySQL, sa configuration par défaut n'est pas sécurisée et sa sécurisation est l'une des tâches essentielles de la gestion générale des bases de données.

Lire aussi : Apprendre MySQL/MariaDB pour les débutants – Partie 1

Cela contribuera à renforcer et à renforcer la sécurité globale du serveur Linux, car les attaquants analysent toujours les vulnérabilités dans n'importe quelle partie d'un système et les bases de données ont été dans le passé des zones cibles clés. Un exemple courant est le forçage brutal du mot de passe root de la base de données MySQL.

Dans ce guide, nous expliquerons les meilleures pratiques de sécurité MySQL/MariaDB utiles pour Linux.

1. Installation sécurisée de MySQL

Il s'agit de la première étape recommandée après l'installation du serveur MySQL, vers la sécurisation du serveur de base de données. Ce script facilite l'amélioration de la sécurité de votre serveur MySQL en vous demandant de :

  • définissez un mot de passe pour le compte root, si vous ne l'avez pas défini lors de l'installation.
  • désactivez la connexion de l'utilisateur root distant en supprimant les comptes root accessibles depuis l'extérieur de l'hôte local.
  • supprimez les comptes d'utilisateurs anonymes et la base de données de test qui, par défaut, sont accessibles à tous les utilisateurs, même aux utilisateurs anonymes.
mysql_secure_installation

Après l'avoir exécuté, définissez le mot de passe root et répondez à la série de questions en saisissant [Oui/Y] et appuyez sur [Entrée].

2. Lier le serveur de base de données à l'adresse de bouclage

Cette configuration restreindra l'accès depuis les machines distantes, elle indique au serveur MySQL d'accepter uniquement les connexions provenant de l'hôte local. Vous pouvez le définir dans le fichier de configuration principal.

vi /etc/my.cnf	                   [RHEL/CentOS]	
vi /etc/mysql/my.conf                    [Debian/Ubuntu] 
OR
vi /etc/mysql/mysql.conf.d/mysqld.cnf    [Debian/Ubuntu] 

Ajoutez la ligne suivante ci-dessous dans la section [mysqld].

bind-address = 127.0.0.1

3. Désactivez LOCAL INFILE dans MySQL

Dans le cadre du renforcement de la sécurité, vous devez désactiver local_infile pour empêcher l'accès au système de fichiers sous-jacent depuis MySQL en utilisant la directive suivante dans la section [mysqld].

local-infile=0

4. Changer le port par défaut MYSQL

La variable Port définit le numéro de port MySQL qui sera utilisé pour écouter sur les connexions TCP/IP. Le numéro de port par défaut est 3306 mais vous pouvez le modifier dans la section [mysqld] comme indiqué.

Port=5000

5. Activer la journalisation MySQL

Les journaux sont l'un des meilleurs moyens de comprendre ce qui se passe sur un serveur. En cas d'attaque, vous pouvez facilement voir toutes les activités liées aux intrusions à partir des fichiers journaux. Vous pouvez activer la journalisation MySQL en ajoutant la variable suivante dans la section [mysqld].

log=/var/log/mysql.log

6. Définir l'autorisation appropriée sur les fichiers MySQL

Assurez-vous que vous disposez des autorisations appropriées pour tous les fichiers et répertoires de données du serveur MySQL. Le fichier /etc/my.conf ne doit être accessible en écriture qu'à la racine. Cela empêche les autres utilisateurs de modifier les configurations du serveur de base de données.

chmod 644 /etc/my.cnf

7. Supprimer l'historique du shell MySQL

Toutes les commandes que vous exécutez sur le shell MySQL sont stockées par le client mysql dans un fichier historique : ~/.mysql_history. Cela peut être dangereux, car pour tous les comptes d'utilisateurs que vous créerez, tous les noms d'utilisateur et mots de passe saisis sur le shell seront enregistrés dans le fichier historique.

cat /dev/null > ~/.mysql_history

8. N'exécutez pas de commandes MySQL à partir de la ligne de commande

Comme vous le savez déjà, toutes les commandes que vous tapez sur le terminal sont stockées dans un fichier historique, selon le shell que vous utilisez (par exemple ~/.bash_history pour bash). Un attaquant qui parvient à accéder à ce fichier historique peut facilement voir tous les mots de passe qui y sont enregistrés.

Il est fortement déconseillé de saisir des mots de passe sur la ligne de commande, quelque chose comme ceci :

mysql -u root -ppassword_

Lorsque vous vérifiez la dernière section du fichier historique des commandes, vous verrez le mot de passe saisi ci-dessus.

history 

La manière appropriée de connecter MySQL est.

mysql -u root -p
Enter password:

9. Définir les utilisateurs de base de données spécifiques à l'application

Pour chaque application exécutée sur le serveur, ne donner accès qu'à un utilisateur en charge d'une base de données pour une application donnée. Par exemple, si vous possédez un site wordpress, créez un utilisateur spécifique pour la base de données du site wordpress comme suit.

mysql -u root -p
MariaDB [(none)]> CREATE DATABASE osclass_db;
MariaDB [(none)]> CREATE USER 'osclassdmin'@'localhost' IDENTIFIED BY 'osclass@dmin%!2';
MariaDB [(none)]> GRANT ALL PRIVILEGES ON osclass_db.* TO 'osclassdmin'@'localhost';
MariaDB [(none)]> FLUSH PRIVILEGES;
MariaDB [(none)]> exit

et n'oubliez pas de toujours supprimer les comptes d'utilisateurs qui ne gèrent plus aucune base de données d'application sur le serveur.

10. Utilisez des plugins et des bibliothèques de sécurité supplémentaires

MySQL comprend un certain nombre de plugins de sécurité pour : l'authentification des tentatives de connexion des clients au serveur MySQL, la validation du mot de passe et la sécurisation du stockage des informations sensibles, qui sont tous disponibles dans la version gratuite.

Vous pouvez en trouver plus ici : https://dev.mysql.com/doc/refman/5.7/en/security-plugins.html

11. Changez régulièrement les mots de passe MySQL

Il s’agit d’un conseil courant en matière de sécurité des informations/applications/systèmes. La fréquence à laquelle vous le ferez dépendra entièrement de votre politique de sécurité interne. Cependant, cela peut empêcher les « fouineurs » qui auraient pu suivre votre activité sur une longue période de temps d’accéder à votre serveur MySQL.

MariaDB [(none)]> USE mysql;
MariaDB [(none)]> UPDATE user SET password=PASSWORD('YourPasswordHere') WHERE User='root' AND Host = 'localhost';
MariaDB [(none)]> FLUSH PRIVILEGES;

12. Mettre régulièrement à jour le package du serveur MySQL

Il est fortement recommandé de mettre régulièrement à jour les packages mysql/mariadb pour suivre les mises à jour de sécurité et les corrections de bogues, à partir du référentiel du fournisseur. Normalement, les packages dans les référentiels du système d'exploitation par défaut sont obsolètes.

yum update
apt update

Après avoir apporté des modifications au serveur mysql/mariadb, redémarrez toujours le service.

systemctl restart mariadb		#RHEL/CentOS
systemctl restart mysql		#Debian/Ubuntu

Lire aussi : 15 conseils utiles pour le réglage et l'optimisation des performances MySQL/MariaDB

C'est tout! Nous aimons avoir de vos nouvelles via le formulaire de commentaires ci-dessous. Partagez avec nous tous les conseils de sécurité MySQL/MariaDB manquant dans la liste ci-dessus.