1 votes

Existe-t-il un moyen sûr d'exécuter plusieurs commandes MySQL CLI sans avoir à demander constamment un mot de passe à l'utilisateur ?

J'ai un script bash script qui exécute une série de commandes MySQL, séparées par une entrée utilisateur.

Chaque fois qu'une requête est exécutée, le mot de passe doit être réintroduit.

Je comprends qu'il est préférable d'éviter d'indiquer le mot de passe sur la ligne de commande, mais j'hésite à demander le mot de passe à l'utilisateur et à l'indiquer ensuite sur la ligne de commande pour chaque commande.

Existe-t-il une méthode recommandée pour y parvenir sans compromettre la sécurité ?

1voto

Shoan Points 1585

Vous pouvez stocker les informations d'identification dans ~/.my.cnf file . Mysql consultera ce fichier par défaut et utilisera les informations d'identification qui y sont spécifiées, si aucune autre information d'identification n'est précisée dans la commande.

0voto

jouell Points 561

Il est préférable de ne pas gérer les mots de passe dans Shell Shell.

J'avais une question similaire :

https://security.stackexchange.com/questions/182927/what-would-be-a-secure-way-to-handle-password-prompts-in-Shell

J'ai décidé d'utiliser un Shell Shell comme enveloppe d'un Shell attendu - sur la base de mon cas d'utilisation.

Il n'est pas parfaitement sûr (qu'est-ce qui l'est ?) mais.. :

  1. le mot de passe n'est pas révélé par ps.
  2. le mot de passe n'est codé nulle part.
  3. le mot de passe n'a pas une longue durée de vie dans la mémoire vive - la durée du processus est de 30 secondes.
  4. le mot de passe est celui d'un compte non privilégié
  5. le script s'exécute sous un compte non privilégié
  6. root est réservé à un petit groupe d'employés sur cette boîte.
  7. la boîte qui exécute cette commande est interne et renforcée

Est-il "sûr" ? C'est une sécurité suffisante pour ma situation.

De nombreux documents expliquent comment exécuter Shell Shell dans un souci de sécurité. En voici un :

https://developer.apple.com/library/content/documentation/OpenSource/Conceptual/ShellScripting/ShellScriptSecurity/ShellScriptSecurity.html

A considérer également : https://security.stackexchange.com/questions/66832/are-Shell-Shell-bash-inherently-less-secure-than-other-Shell-langues-su

0 votes

J'ai écrit un script bash pour exécuter plusieurs script sur Ubuntu 14 & 16 qui demande à l'utilisateur son login/pass au début et fournit ces derniers comme paramètres aux commandes mysql -- pendant qu'il fonctionnait, j'ai vérifié PS et le mot de passe était caviardé/masqué. Je ne suis pas sûr du mécanisme de masquage exact, mais cela me semble raisonnable.

2 votes

Intéressant - merci - voir ici unix.stackexchange.com/questions/385339/ ainsi que

0voto

Dara Kong Points 609

Je n'ai pas de serveur MySQL à tester, mais vous devriez pouvoir

  1. demander le mot de passe une fois,
  2. créer un tuyau nommé ,
  3. l'associer à un arrière-plan mysql et
  4. transmet tout le code SQL au tuyau nommé.

0 votes

Cela semble avoir un certain potentiel, mais c'est un peu compliqué - il faudrait gérer les erreurs correctement et s'assurer que la fonction mysql L'interface de programmation refuse correctement de poursuivre l'exécution des instructions après une erreur. Dans certains contextes, il continue, bien que (iirc) pas lors de la lecture à partir d'un tube. Il semble qu'un véritable script dans un langage avec une bibliothèque client MySQL soit la voie logique à suivre, pour tout ce qui est très complexe.

0voto

Timothy Frew Points 572

Au lieu d'avoir MySQL -u root -pPASSWORD, utilisez ceci : `mysql -defaults-file=/etc/mysql/debian.cnf qui utilisera l'utilisateur debian sys maint

0 votes

Je suis d'accord. Qu'y a-t-il de sûr dans le fait d'avoir un mot de passe enregistré/codé en dur dans un fichier ?

0voto

Karl Wilbur Points 140

Vous pourriez stocker l'entrée utilisateur (le mot de passe) dans une variable et la passer en tant que paramètre à l'interface CLI de MySQL. Ce n'est pas si mal. Cela ne compromet pas la sécurité.

En tant qu'utilisateur, lorsque vous tapez des commandes, elles sont stockées dans votre ~/.bash_history en texte clair. Ainsi, en tant qu'utilisateur, si vous transmettez le mot de passe en tant que paramètre, il est stocké dans un fichier sur la machine. Ce n'est pas pire que de stocker le mot de passe dans un fichier de configuration.

Obliger l'utilisateur à taper le mot de passe à plusieurs reprises est ennuyeux du point de vue de l'ergonomie. L'enregistrer dans une variable et le passer dans la commande est bien mieux sans compromettre la sécurité.

Il convient de noter que cela exposerait le mot de passe dans la liste des processus pendant l'exécution de chacune des commandes MySQL.

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