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 avoir installé le serveur MySQL, il n'est pas sécurisé dans sa configuration par défaut, et sa sécurisation est l'une des tâches essentielles de la gestion générale de la base de données.
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 pour la base de données MySQL.
Dans ce guide, nous expliquerons MySQL/MariaDB utile meilleures pratiques de sécurité 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éfinir 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 à distance en supprimant les comptes root accessibles depuis l'extérieur de l'hôte local.
- supprimez les comptes d'utilisateurs anonymes et testez la base de données qui, par défaut, est accessible à tous les utilisateurs, même les 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 limitera l'accès des machines distantes, elle indique au serveur MySQL de n'accepter que les connexions depuis 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 sous [mysqld]
rubrique.
bind-address = 127.0.0.1
3. Désactiver 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 sous [mysqld]
rubrique.
local-infile=0
4. Modifier le port par défaut de MYSQL
Le Port La variable définit le numéro de port MySQL qui sera utilisé pour écouter les connexions TCP/IP. Le numéro de port par défaut est 3306 mais vous pouvez le changer sous [mysqld] section 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'attaques, 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 sous [mysqld]
rubrique.
log=/var/log/mysql.log
6. Définir les autorisations appropriées 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 /etc/my.conf le fichier 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 d'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 d'historique.
# cat /dev/null > ~/.mysql_history
8. N'exécutez pas les 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 d'historique, selon le shell que vous utilisez (par exemple ~/.bash_history pour bash). Un attaquant qui parvient à accéder à ce fichier d'historique peut facilement voir les mots de passe qui y sont enregistrés.
Il est fortement déconseillé de taper 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 d'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 des utilisateurs de base de données spécifiques à l'application
Pour chaque application en cours d'exécution sur le serveur, n'accordez l'accès qu'à un utilisateur responsable d'une base de données pour une application donnée. Par exemple, si vous avez 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 '[email protected]%!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. Utiliser des plugins et des bibliothèques de sécurité supplémentaires
MySQL inclut un certain nombre de plugins de sécurité pour :l'authentification des tentatives des clients de se connecter 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 élément commun d'informations/d'applications/de conseils de sécurité du système. 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 pourraient avoir suivi votre activité pendant une longue période, 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 à jour régulièrement 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
C'est tout! Nous aimons avoir de vos nouvelles via le formulaire de commentaire ci-dessous. Partagez avec nous les conseils de sécurité MySQL/MariaDB manquants dans la liste ci-dessus.