Changer le nom de l’utilisateur root MySQL
I. Présentation
Par défaut, MySQL créé, lors de son installation, un super-utilisateur nommé "root". Cet utilisateur a tous les droits sur toutes les bases de données du serveur. Si un utilisateur doit être ciblé lors d'une attaque sur un service MySQL, c'est bien celui-ci. En effet, si on arrive à avoir les identifiants de cet utilisateur (login et mot de passe), on aura un accès total à toutes les bases de données. Dés le départ, un attaquant peut démarrer une attaque avec 50% des informations requises : le nom de l'utilisateur ("root").
Pour rendre plus difficile et plus lente la tâche d'un attaquant, nous allons modifier le nom de cet utilisateur pour que l'utilisateur "root" n'existe plus. Ainsi, en plus de devoir trouver un mot de passe, l'attaquant devra commencer par trouver l'identifiant du super-utilisateur de notre service MySQL.
II. Voir les utilisateurs existants
Nous allons commencer par vérifier quel utilisateur est présent sur notre service MySQL. On se connecte pour cela en "root" (en ligne de commande dans notre cas), puis nous allons exécuter la commande suivante :
select user,host from mysql.user;
On voit donc ici que l'utilisateur "root" est présent trois fois. Cela est du au fait qu'il est enregistré pour se connecter depuis plusieurs hôtes différents : "127.0.0.1", "localhost" et "linux1". Il s'agit ici de la même machine mais c'est comme ça que les utilisateurs "root" sont créés par défaut dans MySQL. Nous allons donc utiliser une commande pour simplement modifier le nom de ces trois utilisateurs.
III. Changer le nom de l'utilisateur root
Nous allons utiliser la commande "RENAME" pour renommer ces utilisateurs, nous supposons par exemple ici que le nouvel utilisateur sera "secureroot";
RENAME USER "root"@"localhost" TO "secureroot"@"localhost"; RENAME USER "root"@"127.0.0.1" TO "secureroot"@"127.0.0.1"; RENAME USER "root"@"linux1" TO "secureroot"@"linux1";
Note: Ici "linux1" est le nom de mon serveur, il sera spécifique à chacun des serveurs sur lequel pour travaillerez.
Nous pourrons alors effectuer une connexion en tant que "root":
mysql -u root -p
L'utilisateur root n'existe donc plus du tout et nous ne pourrons plus nous connecter sur notre serveur avec cet utilisateur. L'attaquant devra donc, avant de tenter une attaque, trouver le nouveau nom de notre super-utilisateur.
Maintenant si nous nous connectons en tant que "secureroot", nous pourrons nous connecter :
mysql -u secureroot -p
On vérifiera alors à nouveau notre table d'utilisateur :
Nous voyons donc bien que l'utilisateur "root" n'existe plus.
Quand je me suis connecté avec le nouveau ‘user’, ça m’a demandé le mot de passe et j’ai entré l’ancien mot de passe et ça a refusé. Comment vais-je faire pour me connecter alors?