No Puppet, como eu protegeria uma variável de senha (neste caso, uma senha do MySQL)?

13

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 padrão de leitura do mundo do arquivo de definição do nó e concedeu explicitamente a permissão de leitura puppet via ACL.

Estou assumindo que outros se depararam com uma situação semelhante, então talvez haja uma prática melhor.

    
por Belmin Fernandez 03.01.2012 / 05:28

4 respostas

3

Ao trabalhar com Puppet e MySQL, costumo colocar a senha de root em /root/.my.cnf, bloquear esse arquivo e restringir o acesso SSH ao servidor de banco de dados.

Sim, armazenar a senha de root no servidor de banco de dados em texto não é a solução mais segura. No entanto, se você escrever a senha root do mysql neste arquivo, proteger a conta root do mysql para permitir logins de localhost somente manterá a senha fora do fantoche, e também fora da lista de processos ps table.

Além disso, se alguém tiver acesso root para ler o arquivo em /root/.my.cnf, provavelmente também terá acesso para parar o daemon local do MySQL e reiniciar o daemon sem a tabela users para obter acesso root imediato ao daemon. banco de dados.

    
por 03.01.2012 / 20:47
1

Alguém mais pode indicar algum plug-in ou similar que me corrija, mas a maneira geral de fazer isso é armazenar a senha criptografada , não a senha em texto simples.

No entanto, posso dizer-lhe 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ê fizesse login de qualquer maneira.

Há muitos "hacks" por aí que permitem que você use utilitários de terceiros, como Hiera e GPG . Obviamente, você pode fazer o seu próprio, mas até as próprias listas de discussão do Puppet sugerem este método .

    
por 03.01.2012 / 05:38
1

Você não especificou de quem você está protegendo essa senha. Eu estou indo supor que é outros administradores de sistema ou possivelmente desenvolvedores que têm acesso ao mestre de marionetes e / ou às caixas do cliente, mas não precisam saber a senha do root.

Para definir a senha inicialmente, você pode usar esta sintaxe:

GRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost' IDENTIFIED BY PASSWORD '*6DF1FC54F0CCD999F55D59D3D88526878230C77C' WITH GRANT OPTION;

O que permitiria que você armazenasse uma senha criptografada em sua configuração de fantoches em vez de uma em texto simples.

Para usar mysqladmin e o cliente mysql na linha de comando, o melhor que posso pensar é adicionar um arquivo .my.cnf à configuração do seu boneco que é implantado no diretório base de um usuário apropriado. O arquivo no mestre de marionetes e nos clientes deve ter permissões de arquivo apropriadas e restritivas.

Existem muitas maneiras de contornar essas permissões de arquivos quando você adiciona fantoches ao mix (como escrever um exec () que extrai o arquivo dos clientes), mas parece ser uma melhoria em vez de armazenar a senha em um mundo arquivo legível. Isso seria mais difícil se você usar um sistema de controle de versão para sua configuração de fantoches.

    
por 03.01.2012 / 09:10
0

Este link sugere dois métodos: usar variáveis de ambiente e usar subshell.

Eu acho que você também pode criar um simples wrapper em torno do seu comando mysqladmin e passar sua senha criptografada para ele. Este wrapper irá então descriptografar a senha e passá-la para mysqladmin . Você precisa proteger seu wrapper, pois ele contém a parte de descriptografia.

Você pode escolher o modo como se sente mais seguro com base no seu ambiente e quem tem acesso ao seu sistema.

    
por 03.01.2012 / 09:21