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

4voto

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

3voto

Kurt Fitzner Points 280

debian-sys-maint : permissions requises

D'autres réponses ont suffisamment abordé tous les points, à l'exception de l'ensemble minimal de permissions requises pour l'utilisateur debian-sys-maint. La plupart des réponses données ici sont tout simplement erronées à cet égard, et en fait dangereuses. Ne réduisez pas les privilèges de debian-sys-maint (y compris l'option grant) sans avoir lu et compris ce qui suit :

Le responsable Debian n'a pas donné tous les privilèges à l'utilisateur de manière capricieuse. Voici ce qui est nécessaire, où et pourquoi. Certains de ces privilèges sont des supersets d'autres, mais je vais les lister indépendamment au cas où vous voudriez personnaliser les choses et supprimer leur nécessité :

  • arrêt y recharger pour l'arrêt ou la fermeture d'une base de données, par /etc/init.d/mysql.
  • select sur mysql.user nécessaire pour les contrôles d'intégrité effectués au démarrage de la base de données, afin de s'assurer qu'il existe un utilisateur root. Fait à 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
  • select on information_schema.tables , sélection globale nécessaire à la vérification des tables plantées. Fait à chaque démarrage par /etc/mysql/debian-start (appelé par /etc/init.d/mysql) avec le code actuel dans la fonction check_for_crashed_tables dans le fichier /usr/share/mysql/debian-start.inc.sh
  • global tous les privilèges nécessaire pour mettre à niveau les tables si/quand une nouvelle version de MySQL est installée par le biais d'une mise à jour ou d'une mise à niveau de Debian. Fait à 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 tromper par le nom de la fonction (upgrade_system_tables_if_necessary), ceci peut potentiellement toucher toutes les tables - voir ci-dessous

Le dernier point est, bien sûr, la principale exigence en matière 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 à la recherche de incompatibilités avec la version actuelle de MySQL Server. mysql_upgrade met également à niveau les tables système afin que vous puissiez afin que vous puissiez profiter des nouveaux privilèges ou des capacités ajoutées.

Si mysql_upgrade trouve qu'une table a une incompatibilité possible, il effectue une vérification de la table et, si des problèmes sont trouvés, tente une réparation de la table. réparation de la table.

AVERTISSEMENT Si vous décidez de réduire les privilèges de debian-sys-maint, assurez-vous d'être prêt à gérer manuellement toutes les futures mises à jour de sécurité et/ou mises à niveau de debian qui concernent MySQL. Si vous effectuez une mise à jour des paquets MySQL avec un privilège réduit de debian-sys-maint, 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 (lire cassé). La réduction des privilèges peut n'avoir aucun problème apparent au quotidien jusqu'à ce qu'une mise à jour soit effectuée, donc ne vous fiez pas au fait que vous avez déjà réduit des privilèges sans effets néfastes pour penser que c'est sans danger.

2voto

lindelof Points 9802

En marge de cela, jetez un coup d'œil à cet article du mysqlperformanceblog pour les raisons pour lesquelles vous pourriez vouloir désactiver les trucs spécifiques à Debian.

2voto

Dave Rix Points 285

Si vous utilisez MySQL 5.6+, je vous recommande d'utiliser l'option mysql_config_editor pour créer une entrée pour l'utilisateur 'debian-sys-maint'@'localhost' en utilisant le mot de passe correspondant, ce qui signifie que le mot de passe ne doit pas être stocké en texte clair 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 fichier ~/.mylogin.cnf 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 vous aidera :)

Dave

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