78 votes

Quel est l'utilisateur MySQL debian-sys-maint (et plus) ?

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 à partir des dépôts Ubuntu.

En général, ce qui se passe, c'est que je tire une nouvelle copie de notre base de données de production (qui ne fonctionne pas sous Debian/Ubuntu) pour le dépannage ou un nouveau développement et que j'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 il est 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)'
  • À quoi sert debian-sys-maint ?
    • Existe-t-il un meilleur moyen pour les responsables de paquets de faire ce qu'ils essaient de faire ?
  • Quel est le moyen le plus simple de le restaurer après l'avoir perdu ?
  • Quel est l'ensemble correct/minimal de privilèges pour cet utilisateur ?
    • C'est une mauvaise idée d'accorder tous les privilèges sur *.*...

Editar

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 ? Cela a de l'importance lorsque vous recréez l'utilisateur et je n'y arrive jamais du premier coup.

Danke

62voto

jammus Points 1796

À quoi sert debian-sys-maint ?

L'une des principales choses auxquelles il sert est de dire au serveur de rouler les journaux. Il faut au moins le privilège de rechargement et d'arrêt.

Voir le dossier /etc/logrotate.d/mysql-server

Il est utilisé par le /etc/init.d/mysql script pour obtenir le statut 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 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 fichier 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

Est-ce que 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 maintenant un moyen de chiffrer les informations d'identification (voir : https://serverfault.com/a/750363 ).

25voto

Kristof Provost Points 12359

Le site debian-sys-maint est par défaut un utilisateur équivalent de la racine . Il est utilisé par certains scripts de maintenance sur les systèmes Debian, et comme effet secondaire, permet aux utilisateurs ayant un accès root sur la boîte de voir 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 que dans /etc/mysql/debian.cnf

21voto

d-_-b Points 1094

Je voulais juste commenter, mais je pense syntaxe correcte mérite sa propre entrée. Cela permettra de créer le debian-sys-maint utilisateur :

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 qui s'y trouve.

N'hésitez pas à proposer une solution plus paranoïaque solution sécurisée.

20voto

Vous pourriez aussi :

sudo dpkg-reconfigure mysql-server-5.0

Ce qui vous donnera l'option de recréer l'utilisateur debian-sys-maint. Les utilisateurs et les bases de données existants sont en sécurité.

7voto

Robin Charlton Points 180

Si vous devez ajouter le debian-sys-maint utilisateur juste pour logrotate.d vous devez pas subvention ALL PRIVILEGES ou le GRANT OPTION -- c'est une énorme faille de sécurité inutile. Au lieu de cela, vous pouvez simplement ajouter l'utilisateur avec l'option RELOAD comme ceci (en supposant que vous accédez à votre base de données en tant que root et 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 de 2019

Cette réponse n'est peut-être plus d'actualité - veuillez consulter les commentaires plus détaillés ci-dessous.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X