Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 22/07/2020, à 12:31

axel584

[Résolu] MariaDB sans mot de passe

Bonjour,
Je m'occupe d'une petite association et on a un serveur dédié, on utilise quelques outils maisons, du spip et du phpMyAdmin. On est plusieurs à s'occuper de la maintenance du serveur avec des compétences différentes et même si j'ai plutôt un profil développeur, je suis le seul à m'y connaitre en mysql/mariadb. Et depuis quelques temps, j'ai remarqué que notre serveur mariadb autorise les connexions sans mot de passe (et accepte n'importe quel mot de passe qu'on lui indique).
Je suis très inquiet par ce trou de sécurité et je n'arrive pas à comprendre d'où ça vient. Je fais du mysql depuis très longtemps sans vraiment rafraîchir mes connaissances. J'ai cru comprendre que dans les dernières versions, il y a avait un système d'authentification basé sur les comptes unix, mais je ne sais pas si le problème vient de là.
Question 1 : est-ce que ce système d'authentification basé sur les comptes unix est lié à une base de données ou bien à un utilisateur (en gros, est ce qu'un utilisateur X peut se connecter avec identifiant/mot de passe et un utilisateur Y à partir de son compte unix ?)
Question 2 : J'ai cru comprendre que ce système d'authentification par compte unix était préférable car plus sécurisé. Mais est-ce qu'il est compatible avec des applications comme spip ou phpMyAdmin ? Ou bien dans ces applications, faut il continuer à utiliser un système de connexion par identifiant/mot de passe.

Pour mon problème de connexion sans mot de passe, j'ai essayé de faire :
mysqladmin -u <identifiant> -p version
Et quelque soit le mot de passe indiqué, il m'affiche le numéro de version de la base
Si je lui passe un identifiant farfellu, il m'affiche également le numéro de version de la base.
Question 3 : si j'execute cette commande mysqladmin, vous me confirmez que si je n'indique pas un utilisateur existant ou un mot de passe correspondant à l'utilisateur, il devrait me renvoyer une erreur d'authentification ?

Une idée du problème ?
J'ai essayé de redémarré le service mariadb :
sudo systemctl stop mariadb
sudo systemctl start mariadb

Et j'ai toujours le même problème.

Merci pour votre aide,

Axel

Hors ligne

#2 Le 22/07/2020, à 12:56

bruno

Re : [Résolu] MariaDB sans mot de passe

Bonjour,

Question 1
: les deux. Quelle que soit la méthode d’authentification choisie : unix_socket ou mysql_native_password les utilisateurs son définis dans la table user de la base mysql
Un exemple de requête pour voir les utilisateur et leur méthode d'authentification :

select user,plugin from mysql.user;

Les utilisateurs qui sont définis avec le plugin unix_socket peuvent se connecter à leur(s) base(s) depuis leur compte Unix sans fournir de mot de passe. Si ce type d'utilisateur se sert quand même des arguments -u et -p, n'importe quel mot de passe peu être saisi  : ce que tu observes.

Question 2 :
c'est plus sécurisé dans le sens où cela évite de stocker des mots de passe en clair dans les fichiers de configuration d'un CMS ou application web (SPIP, Wordpres, etc.). À condition d'avoir des utilisateurs Unix avec des droits suffisamment restreints et d'être capable de configurer son serveur web pour que chaque site web ait son propre utilisateur (celui qui interprète les script PHP).

À toi de voir s'il vaut mieux utiliser l'un ou l'autre système d'authentification. Je conseille de conserver l’authentification unix_socket pour le compte root car cela facilite et sécurise l'administration, la sauvegarde, et la maintenance des bases de données.

#3 Le 22/07/2020, à 12:59

axel584

Re : [Résolu] MariaDB sans mot de passe

Merci beaucoup. J'ai effectué ta requête et tous les champs "plugin" sont vides, donc, ils devraient se connecter par identifiant/mot de passe.
Je verrai dans un deuxième temps pour passer le compte root en "unix_socket". Mais en attendant, il faut que je trouve pourquoi il accepte tous les mots de passe que je lui donne et comment changer ça.

Axel

Hors ligne

#4 Le 22/07/2020, à 13:15

bruno

Re : [Résolu] MariaDB sans mot de passe

Effectivement si la colonne plugin est vide, il doit s'agir d'une connexion par mot de passe. Dans ce cas il faut également regarder la valeur de la colonne password pour les utilisateurs ou plugin n'est pas défini :

select user,password,plugin from mysql.user where plugin='';

Celle-ci doit contenir le mot de passe chiffré.
Si ce n'est pas le cas c'est probablement que quelqu'un à mis un mot de passe vide pour l'utilisateur en question.

#5 Le 22/07/2020, à 14:50

axel584

Re : [Résolu] MariaDB sans mot de passe

Tous les comptes utilisateurs ont un mot de passe...
Mais quand je me connecte, je peux taper n'importe quoi comme identifiant et n'importe quoi comme mot de passe et il accepte ma connexion.... Je pense que c'est plutôt un problème dans la configuration de mariadb, mais je n'ai aucune idée d'où vient le problème.

Merci pour votre aide,

Axel

Hors ligne

#6 Le 22/07/2020, à 15:18

bruno

Re : [Résolu] MariaDB sans mot de passe

axel584 a écrit :

Mais quand je me connecte, je peux taper n'importe quoi comme identifiant et n'importe quoi comme mot de passe et il accepte ma connexion....


Si tu es root au moment où tu lance ta commande c'est normal. Mais tu ne devrais pas pouvoir utiliser n'importe quel identifiant (uniquement root)

Il faut indiquer les commandes que tu tapes et leur retour complet.

Dernière modification par bruno (Le 22/07/2020, à 15:26)

#7 Le 22/07/2020, à 15:20

axel584

Re : [Résolu] MariaDB sans mot de passe

Non, même sans être root... et le plus inquiétant, c'est que ça fonctionne pareil dans phpMyAdmin... Je tape n'importe quoi et je peux rentrer dans phpMyAdmin.

Hors ligne

#8 Le 22/07/2020, à 15:36

bruno

Re : [Résolu] MariaDB sans mot de passe

J'ai modifié ma réponse précédente.
Dans ce cas ce n'est pas normal du tout ! Et je ne vois qu'une seule façon d'arriver à ce comportement : un utilisateur avec une colonne user vide (sans nom) et un mot de passe vide.

Il faudrait vérifier l'intégralité de la table user de la base mysql.

Donne au moins le retour complet de  cette requête :

select user,host,password,plugin from mysql.user;

Dernière modification par bruno (Le 22/07/2020, à 16:39)

#9 Le 22/07/2020, à 16:59

axel584

Re : [Résolu] MariaDB sans mot de passe

Oui, je confirme que ce n'est pas normal du tout.
Je n'ai pas de compte "vide", mais j'ai un compte sans mot de passe (ce qui n'est pas génial non plus en terme de sécurité)
capture

Dernière modification par axel584 (Le 22/07/2020, à 17:07)

Hors ligne

#10 Le 22/07/2020, à 17:32

bruno

Re : [Résolu] MariaDB sans mot de passe

Il manque le retour de la commande demandée.

#11 Le 22/07/2020, à 17:38

axel584

Re : [Résolu] MariaDB sans mot de passe

Oui, j'ai voulu mettre ça dans une image, mais ça n'a pas fonctionné :
https://imgur.com/a/VOvkVQw

Je crois que j'ai trouvé une piste d'où vient le problème. J'ai essayé de modifier le mot de passe qui était vide avec la commande :

SET PASSWORD FOR axel@'localhost'=PASSWORD('SECRET');

Et j'obtiens l'erreur :

#1290 - The MariaDB server is running with the --skip-grant-tables option so it cannot execute this statement

Donc je pense que quelqu'un a changé la façon dont est lancé le serveur, mais je ne sais pas comment faire pour lancer le serveur sans cette option.
J'ai essayé de relancer le serveur avec :

sudo systemctl restart mariadb

Mais ça n'a rien changé.

Merci pour votre aide

Hors ligne

#12 Le 22/07/2020, à 17:56

axel584

Re : [Résolu] MariaDB sans mot de passe

J'ai fini par trouver : il y avait un fichier /etc/mysql/conf.d/skip-grant-tables.cnf qui contenait :

[mysqld]
skip-grant-tables

Et en retirant ce fichier et en relançant le serveur, ça refonctionne.

Un grand merci pour votre aide et votre patience :-)

Hors ligne

#13 Le 22/07/2020, à 18:33

bruno

Re : [Résolu] MariaDB sans mot de passe

Je n'y avais pas pensé parce que cette option ne doit être utilisée que manuellement à des fins de dépannage en cas de perte du mot de passe root et encore il y a d'autres moyens bien plus simples sous Debian/Ubuntu….

https://mariadb.com/kb/en/mysqld-option … ant-tables