Estou usando o Puppet para provisionar o MySQL com uma classe parametrizada:
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'],
}
}
Como posso proteger $password
? Atualmente, removi a permissão legível por padrão do mundo do arquivo de definição de nó e dei explicitamente puppet
permissão de leitura via ACL.
Suponho que outras pessoas tenham se deparado com uma situação semelhante, então talvez exista uma prática melhor.
fonte
Outra pessoa provavelmente pode apontar algum plug-in ou similar que me corrija, mas a maneira geral de fazer isso é armazenar a senha criptografada , não a senha de texto sem formatação.
No entanto, posso lhe dizer agora, o MySQL não permite que você use uma senha criptografada - caso contrário, essa seria a senha e o hash permitiria que você se logasse de qualquer maneira.
Existem muitos "hacks" disponíveis que permitem usar utilitários de terceiros, como Hiera e GPG . Obviamente, você pode criar suas próprias - mas mesmo as listas de discussão do Puppet sugerem esse método .
fonte
Você não especificou de quem está protegendo esta senha. Vou assumir que são outros administradores de sistema ou possivelmente desenvolvedores que têm acesso ao mestre de marionetes e / ou às caixas de clientes, mas não precisam saber a senha de root.
Para definir a senha inicialmente, você pode usar esta sintaxe:
O que permitiria armazenar uma senha criptografada em sua configuração de fantoche, em vez de uma senha em texto sem formatação.
Para usar
mysqladmin
e omysql
cliente na linha de comando, o melhor que consigo pensar é adicionar um.my.cnf
arquivo à sua configuração de marionetes que é implantada no diretório inicial do usuário apropriado. O arquivo no mestre de marionetes e nos clientes deve ter permissões de arquivo restritivas apropriadas.Existem várias maneiras de contornar essas permissões de arquivo quando você adiciona fantoches à mistura (como escrever um exec () que extrai o arquivo dos clientes), mas parece haver uma melhoria no armazenamento da senha em um arquivo legível mundialmente. Isso seria mais difícil se você usar um sistema de versão para sua configuração de fantoches.
fonte
IDENTIFIED BY PASSWORD '*HASH-HERE'
vez doIDENTIFIED BY 'PASSWORD-HERE'
MySQL, insere o hash diretamente nauser
tabela. Você precisará usar a senha que gerou esse hash para efetuar login. Você pode ver como seria o seu comando de concessão com o hash da senha fazendo login normalmente e digitandoSHOW GRANTS;
. Você também pode verificar outros usuários comSHOW GRANTS FOR user@host;
Este link sugere dois métodos: usando variáveis de ambiente e subshell.
Eu acho que você também pode criar um invólucro simples em torno do seu comando
mysqladmin
e passar sua senha criptografada para ele. Esse wrapper descriptografará a senha e a passará paramysqladmin
. Você precisa proteger seu invólucro, pois ele contém a parte de descriptografia.Você pode escolher a maneira que achar mais segura, com base no seu ambiente e em quem tem acesso ao seu sistema.
fonte