Eu provisionei meu servidor com o Ansible playbook. Eu usei o manual raiz / base-Ansible .
Uma das tarefas era configurar o servidor mysql junto com a senha do usuário root do mysql.
Agora, preciso urgentemente alterar essa senha. Os passos que tomei:
- Atualizei variáveis para funções Ansible
- Eu executei o comando
ansible-playbook -i hosts/staging server.yml
para reprovisionar o servidor
Todas as tarefas foram executadas conforme o esperado (sem alterações), mas o script falhou
[mariadb | Set root user password]
com esta mensagem:
msg: unable to connect to database, check login_user and login_password are correct or ~/.my.cnf has the credentials
Meu palpite é que, uma vez definida a senha root do MySQL, o reprovisionamento do servidor não poderá alterar essa senha.
É possível alterar a senha de root do MySQL reprovisionando o servidor com Ansible? Quais são as minhas opções?
mysqladmin
- mas isso foi antes de eu ver sua respostaVocê pode usar mal o ~ / .my.cnf por poder alterar a senha do mysql-root.
O truque é ter a tarefa "Definir senha root" (nº 1), que definirá a senha. Depois, você tem uma tarefa que cria um ~ / .my.cnf com as credenciais corretas (n.2).
Em um novo sistema, ~ / .my.cnf não está presente. A tarefa nº 1 criará o usuário root do mysql com as credenciais fornecidas. Em um sistema atual, as credenciais de ~ / .my.cnf são usadas para efetuar login e definir a senha como mysql_root_password . A tarefa nº 2 criará ~ / .my.cnf , ou sobrescreverá as credenciais antigas existentes ~ / .my.cnf por novas.
A grande vantagem dessa abordagem é ter apenas uma variável "mysql_root_password", que é sempre a correta do ponto de vista de um manual. No (s) sistema (s) presente (s), ~ / .my.cnf é um tipo de armazenamento para credenciais mysql locais atuais.
com client.my.cnf.j2:
Leitura adicional
Notas relevantes da ansible-mysql_user_module-documentation :
Nota 1:
Nota 2:
fonte
mysql --database mysql --execute "select host from user where user = 'root';"
. Esta postagem faz o mesmo que esta resposta, mas possui um código para definir todas as senhas.Para a próxima pessoa que vem procurando respostas por aqui. Enquanto a resposta aceita for verdadeira, você deve ser extremamente diligente se estiver usando o MySQL 5.7, porque não há login anônimo permitido no mysqld no modo daemonizado (serviço). Em vez disso, você DEVE raspar o /var/log/mysqld.log para obter uma senha TEMPORÁRIA que alguém decidiu criar e usar na senha de login_password = ydaetskcoR. Esse foi um recurso que eles decidiram implementar na versão 5.7 do repositório dev. Se você quiser evitá-lo, use uma versão mais antiga (5.6).
Documentação aqui: https://dev.mysql.com/doc/refman/5.7/en/server-options.html#option_mysqld_initialize-insecure
http://mysqlserverteam.com/initialize-your-mysql-5-7-instances-with-ease/
fonte
Existe um manual do Ansible usado para proteger o MySQL.
https://github.com/dev-sec/ansible-mysql-hardening
Isso não apenas alterou a senha de root, mas também executou algumas etapas adicionais para proteger o servidor.
Dê uma olhada no arquivo leia-me.
fonte