He aprovisionado mi servidor con el libro de jugadas Ansible. He usado el libro de jugadas root / bedrock-Ansible .
Una de las tareas era configurar el servidor mysql junto con la contraseña de usuario root de mysql.
Ahora necesito urgentemente cambiar esta contraseña. Los pasos que tomé:
- Actualicé variables para roles Ansible
ansible-playbook -i hosts/staging server.yml
Ejecuté el comando para reaprovisionar el servidor
Todas las tareas se ejecutaron como se esperaba (sin cambios), pero el script falló
[mariadb | Set root user password]
con este mensaje:
msg: unable to connect to database, check login_user and login_password are correct or ~/.my.cnf has the credentials
Supongo que una vez que se ha establecido la contraseña de root de MySQL, el nuevo servidor no puede cambiar esta contraseña.
¿Es posible cambiar la contraseña de root de MySQL reprovisionando el servidor con Ansible? ¿Cuáles son mis opciones?
mysqladmin
- pero esto fue antes de ver su respuestaPuede usar mal ~ / .my.cnf para poder cambiar la contraseña de root de mysql.
El truco es tener una tarea "Establecer contraseña de root" (nr.1), que establecerá la contraseña. Luego, tiene una tarea, que crea un ~ / .my.cnf con las credenciales correctas (nr.2).
En un nuevo sistema, ~ / .my.cnf no está presente. La tarea n. 1 creará mysql-root-user con credenciales dadas. En un sistema actual, las credenciales de ~ / .my.cnf se utilizan para iniciar sesión y establecer la contraseña en mysql_root_password . La tarea n. 2 creará ~ / .my.cnf , sobrescribirá las credenciales antiguas existentes ~ / .my.cnf con otras nuevas.
La gran ventaja de este enfoque es tener solo una variable "mysql_root_password", que siempre es la correcta desde el punto de vista de un libro de jugadas. En los sistemas actuales, ~ / .my.cnf es una especie de almacenamiento para las credenciales locales de mysql actuales.
con client.my.cnf.j2:
Otras lecturas
Notas relevantes de ansible-mysql_user_module-documentation :
Nota 1:
Nota 2:
fuente
mysql --database mysql --execute "select host from user where user = 'root';"
. Esta publicación hace lo mismo que esta respuesta, pero tiene un código para configurar todas las contraseñas.Para la próxima persona que viene buscando respuestas por aquí. Si bien la respuesta aceptada es verdadera, debe ser muy diligente si está utilizando MySQL 5.7 porque no se permite el inicio de sesión anónimo en mysqld en modo demonizado (servicio). En su lugar, DEBE raspar el /var/log/mysqld.log para obtener una contraseña TEMPORAL que alguien decidió crear y usar en login_password = ydaetskcoR. Esta fue una característica que decidieron implementar en la versión 5.7 del repositorio de desarrollo, por lo que si desea evitarla, use una versión anterior (5.6).
Documentación aquí: 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/
fuente
Hay un libro de jugadas Ansible utilizado para fortalecer MySQL.
https://github.com/dev-sec/ansible-mysql-hardening
Esto no solo cambió la contraseña de root, sino que también realiza algunos pasos adicionales para fortalecer el servidor.
Echa un vistazo al archivo Léame.
fuente