J'ai été mordu plusieurs fois par l'utilisateur 'debian-sys-maint' qui est installé par défaut sur les paquets mysql-server installés depuis les dépôts Ubuntu.
Généralement, ce qui se passe, c'est que je récupère une nouvelle copie de notre base de données de production (qui ne fonctionne pas sur Debian/Ubuntu) pour le dépannage ou le nouveau développement et oublie d'exclure la table mysql.user, perdant ainsi l'utilisateur debian-sys-maint.
Si nous ajoutons de nouveaux utilisateurs mysql pour une raison quelconque, je dois les "fusionner" dans mon environnement de développement au lieu de simplement superposer la table.
Sans l'utilisateur, mon système semble toujours fonctionnel, mais en proie à des erreurs telles que:
Sudo /etc/init.d/mysql restart
Stopping MySQL database server: mysqld...failed.
error: 'Access denied for user 'debian-sys-maint'@'localhost' (using password: YES)'
Modifier
Question supplémentaire - Le mot de passe dans /etc/mysql/debian.cnf est-il déjà haché ou s'agit-il du mot de passe en clair? C'est important lorsque vous allez recréer l'utilisateur et je ne semble jamais le faire du premier coup.
Merci
À quoi sert debian-sys-maint?
Une des principales raisons pour lesquelles il est utilisé est de dire au serveur de rouler les journaux. Il a besoin au moins du privilège de rechargement et d'arrêt.
Voir le fichier /etc/logrotate.d/mysql-server
Il est utilisé par le /etc/init.d/mysql
script pour obtenir l'état du serveur. Il est utilisé pour arrêter/recharger gracieusement le serveur.
Voici la citation du README.Debian
* MYSQL WON'T START OR STOP?:
=============================
You may never ever delete the special mysql user "debian-sys-maint". This user
together with the credentials in /etc/mysql/debian.cnf are used by the init
scripts to stop the server as they would require knowledge of the mysql root
users password else.
Quel est le moyen le plus simple de le restaurer après l'avoir perdu?
Le meilleur plan est simplement de ne pas le perdre. Si vous perdez vraiment le mot de passe, réinitialisez-le en utilisant un autre compte. Si vous avez perdu tous les privilèges d'administrateur sur le serveur mysql, suivez les guides pour réinitialiser le mot de passe root, puis réparez le debian-sys-maint
.
Vous pouvez utiliser une commande comme celle-ci pour créer un fichier SQL que vous pourrez utiliser ultérieurement pour recréer le compte.
mysqldump --complete-insert --extended-insert=0 -u root -p mysql | grep 'debian-sys-maint' > debian_user.sql
Le mot de passe dans /etc/mysql/debian.cnf est-il déjà haché
Le mot de passe n'est pas haché/chiffré lors de l'installation, mais les nouvelles versions de mysql ont désormais un moyen de chiffrer les informations d'identification (voir: https://serverfault.com/a/75036 ).
L'utilisateur debian-sys-maint est par défaut un équivalent root. Il est utilisé par certains scripts de maintenance sur les systèmes Debian et, en tant qu'effet secondaire, permet aux utilisateurs ayant un accès root sur la boîte de visualiser le mot de passe en clair dans /etc/mysql/debian.cnf (bon ou mauvais?)
Vous pouvez recréer l'utilisateur en:
GRANT ALL PRIVILEGES on *.* TO `debian-sys-maint`@`localhost` IDENTIFIED BY 'your password' WITH GRANT OPTION;
Juste assurez-vous que le mot de passe correspond celui dans /etc/mysql/debian.cnf
Je voulais juste commenter, mais je pense que syntaxe correcte mérite sa propre entrée. Cela créera l'utilisateur debian-sys-maint :
mysql> GRANT ALL PRIVILEGES on *.* TO 'debian-sys-maint'@'localhost' IDENTIFIED BY 'plaintextpassword' WITH GRANT OPTION; FLUSH PRIVILEGES;
Si vous avez toujours le fichier /etc/mysql/debian.cnf, utilisez simplement le mot de passe dedans.
N'hésitez pas à proposer un plus paranoïaque solution sécurisée.
Vous pouvez également:
Sudo dpkg-reconfigure mysql-server-5.0
Ce qui vous donnera la possibilité de recréer l'utilisateur debian-sys-maint. Les utilisateurs et bases de données existants sont sûrs.
Si vous devez ajouter le debian-sys-maint
utilisateur juste pour logrotate.d
fins, vous devez pas accorder ALL PRIVILEGES
ou la GRANT OPTION
- c'est un trou de sécurité géant inutile. Au lieu de cela, vous pouvez simplement ajouter l'utilisateur avec le privilège RELOAD
comme ceci (en supposant que vous accédez à votre base de données en tant que root
et que vous remplacez xxxxxx par votre mot de passe)
# add the user with the reload right
GRANT RELOAD on *.* TO 'debian-sys-maint'@'localhost' IDENTIFIED BY 'xxxxxx';
# reload the rights
FLUSH PRIVILEGES;
# double check
select * from mysql.user;
mise à jour 2019
Cette réponse peut être obsolète - veuillez consulter les commentaires fortement exprimés ci-dessous.
D'autres réponses ont suffisamment abordé tout sauf l'ensemble minimal d'autorisations requis pour l'utilisateur debian-sys-maint. Beaucoup de réponses ici sont tout simplement erronées à cet égard, et en fait dangereuses. Ne réduisez pas les privilèges debian-sys-maint (y compris l'option grant) sans lire et comprendre ci-dessous:
Le responsable Debian n'a pas accordé tous les privilèges à l'utilisateur de manière capricieuse. Voici ce qui est requis, où et pourquoi. Certains de ces privilèges sont des sur-ensembles d'autres, mais je les énumérerai indépendamment au cas où vous voudriez personnaliser des choses et supprimer leur exigence:
Le dernier est, bien sûr, la principale exigence de privilèges. La page de manuel de mysql_upgrade indique que:
mysql_upgrade examine toutes les tables de toutes les bases de données pour les incompatibilités avec la version actuelle de MySQL Server. mysql_upgrade met également à niveau les tables système afin que vous puissiez profiter de nouveaux privilèges ou capacités qui pourraient avoir été ajoutés.
Si mysql_upgrade trouve qu'une table a une incompatibilité possible, il effectue une vérification de table et, si des problèmes sont détectés, tente une réparation de table.
AVERTISSEMENT Si vous décidez de réduire les privilèges de debian-sys-maint, assurez-vous que vous êtes prêt à gérer manuellement toutes les futures mises à jour de sécurité Debian et/ou des mises à niveau qui touchent MySQL. Si vous effectuez une mise à jour sur les paquets MySQL avec un privilège debian-sys-maint réduit et si mysql_upgrade ne peut pas se terminer en conséquence, cela peut laisser votre base de données dans un état indéfini (lecture interrompue). La réduction des privilèges peut ne pas avoir de problèmes quotidiens apparents jusqu'à ce qu'une mise à jour arrive, alors ne partez pas du fait que vous avez déjà réduit les privilèges sans effets néfastes comme base pour penser que c'est sûr.
Au lieu de
GRANT ALL PRIVILEGES on *.* TO 'debian-sys-maint'@'localhost' IDENTIFIED BY PASSWORD('your password') WITH GRANT OPTION; FLUSH PRIVILEGES;
Je pense
GRANT ALL PRIVILEGES on *.* TO 'debian-sys-maint'@'localhost' IDENTIFIED BY 'your password' WITH GRANT OPTION; FLUSH PRIVILEGES;
parce que le mot de passe n'est pas haché ...?
Lors de l'utilisation de MySQL 5.6+, je recommanderais d'utiliser le mysql_config_editor
commande pour créer une entrée pour l'utilisateur 'debian-sys-maint'@'localhost'
en utilisant le mot de passe approprié, ce qui signifie que le mot de passe n'a pas besoin d'être stocké en texte brut sur le serveur.
mysql_config_editor set --login-path=debian-sys-maint --Host=localhost --user=debian-sys-maint --password
Ensuite, le fichier de configuration spécifique à Debian /etc/mysql/debian.cnf
peut être modifié afin que les détails du nom d'utilisateur et du mot de passe ne soient pas stockés dans le fichier.
Enfin, modifiez le fichier logrotate pour MySQL afin qu'il utilise les informations de connexion stockées dans le ~/.mylogin.cnf
fichier au lieu du fichier spécifique debian en remplaçant
/usr/bin/mysqladmin --defaults-file=/etc/mysql/debian.cnf
avec
/usr/bin/mysqladmin --login-path=debian-sys-maint
J'espère que cela t'aides :)
Dave
En guise de remarque, jetez un œil à ce blog de performances mysql pour les raisons pour lesquelles vous voudrez peut-être désactiver les éléments spécifiques à Debian.