J'utilise Puppet pour provisionner MySQL avec une classe paramétrée:
class mysql::server( $password ) {
package { 'mysql-server': ensure => installed }
package { 'mysql': ensure => installed }
service { 'mysqld':
enable => true,
ensure => running,
require => Package['mysql-server'],
}
exec { 'set-mysql-password':
unless => "mysqladmin -uroot -p$password status",
path => ['/bin', '/usr/bin'],
command => "mysqladmin -uroot password $password",
require => Service['mysqld'],
}
}
Comment puis-je me protéger $password
? Actuellement, j'ai supprimé l'autorisation lisible par défaut du monde du fichier de définition de nœud et donné explicitement l' puppet
autorisation de lecture via ACL.
Je suppose que d'autres ont rencontré une situation similaire, alors il y a peut-être une meilleure pratique.
la source
Quelqu'un d'autre peut probablement signaler un plug-in ou similaire qui me corrige, mais la façon générale de procéder consiste à stocker le mot de passe crypté , pas le mot de passe en texte brut.
Cependant, je peux vous dire maintenant, MySQL ne vous permet pas d'utiliser un mot de passe crypté - sinon, ce SERAIT le mot de passe, et le hachage vous permettrait de vous connecter de toute façon.
Il existe de nombreux "hacks" qui vous permettent d'utiliser des utilitaires tiers tels que Hiera et GPG . Évidemment, vous pouvez lancer la vôtre - mais même les listes de diffusion de Puppet suggèrent cette méthode .
la source
Vous n'avez pas spécifié de qui vous protégez ce mot de passe. Je vais supposer que ce sont d'autres administrateurs système ou éventuellement des développeurs qui ont accès au maître de marionnettes et / ou aux boîtes client mais qui n'ont pas besoin de connaître le mot de passe root.
Pour définir le mot de passe initialement, vous pouvez utiliser cette syntaxe:
Ce qui vous permettrait de stocker un mot de passe crypté dans votre configuration de marionnette au lieu d'un texte en clair.
Pour utiliser
mysqladmin
et lemysql
client sur la ligne de commande, le mieux que je puisse penser est d'ajouter un.my.cnf
fichier à votre configuration de marionnettes qui sera déployé dans le répertoire personnel d'un utilisateur approprié. Le fichier dans le maître de marionnettes et sur les clients doit disposer d'autorisations de fichier restrictives appropriées.Il existe de nombreuses façons de contourner ces autorisations de fichier lorsque vous ajoutez une marionnette dans le mélange (comme l'écriture d'un exec () qui extrait le fichier des clients), mais cela semblerait être une amélioration par rapport au stockage du mot de passe dans un fichier lisible dans le monde. Ce serait plus difficile si vous utilisez un système de versioning pour votre configuration de marionnettes.
la source
IDENTIFIED BY PASSWORD '*HASH-HERE'
au lieu deIDENTIFIED BY 'PASSWORD-HERE'
MySQL insère le hachage directement dans lauser
table. Vous devez ensuite utiliser le mot de passe qui a généré ce hachage pour vous connecter. Vous pouvez voir à quoi ressemblerait votre commande grant avec le hachage de mot de passe en vous connectant normalement et en tapantSHOW GRANTS;
. Vous pouvez également consulter d'autres utilisateurs avecSHOW GRANTS FOR user@host;
Ce lien propose deux méthodes: l'utilisation de variables d'environnement et l'utilisation de sous-shell.
Je pense que vous pouvez également créer un simple wrapper autour de votre commande
mysqladmin
et lui passer votre mot de passe crypté. Ce wrapper décryptera ensuite le mot de passe et le transmettra àmysqladmin
. Vous devez protéger votre wrapper car il contient la partie de décryptage.Vous pouvez choisir la façon dont vous vous sentez plus sûr en fonction de votre environnement et des personnes qui ont accès à votre système.
la source