web-dev-qa-db-fra.com

Qu'est-ce que l'utilisateur Debian-sys-maint MySQL (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 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)'
  • À 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 de privilèges correct/minimal pour cet utilisateur?
    • Semble être une mauvaise idée de "accorder tous les privilèges sur *. * ..."

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

69
Joe Holloway

À 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 ).

58
Zoredache

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

22
Brent

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.

19
d-_-b

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.

19
Spoom

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.

6
Mark Chackerian

autorisations requises pour debian-sys-maint

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:

  • shutdown et reload, requis sans surprise, pour arrêter ou faire une base de données, fait par /etc/init.d/mysql
  • sélectionnez sur mysql.user, requis pour les vérifications d'intégrité effectuées au démarrage de la base de données, garantissant qu'il y a un utilisateur root. Effectué chaque démarrage par/etc/mysql/debian-start (appelé par /etc/init.d/mysql) avec le code réel dans la fonction check_root_accounts dans le fichier /usr/share/mysql/debian-start.inc.sh
  • sélectionnez sur information_schema.tables, sélection globale, requis pour vérifier les tables en panne. Fait chaque démarrage par/etc/mysql/debian-start (appelé par /etc/init.d/mysql) avec le code réel dans la fonction check_for_crashed_tables dans le fichier /usr/share/mysql/debian-start.inc.sh
  • global tous les privilèges, requis pour la mise à niveau des tables si/quand une nouvelle version de MySQL est installée via une mise à jour ou une mise à niveau Debian. Effectué chaque démarrage par/etc/mysql/debian-start (appelé par /etc/init.d/mysql) avec le code réel dans la fonction upgrade_system_tables_if_necessary dans le fichier /usr/share/mysql/debian-start.inc.sh - appelle en fait le binaire MySQL mysql_upgrade - ne vous laissez pas berner par le nom de la fonction (upgrade_system_tables_if_necessary), cela peut potentiellement toucher toutes les tables - voir ci-dessous

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.

3
Kurt Fitzner

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é ...?

3
Sean

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

2
Dave Rix

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.

2
Jon Topper