Ich habe meinen Server mit Ansible Playbook ausgestattet. Ich habe das Root / Bedrock-Ansible-Playbook verwendet .
Eine der Aufgaben bestand darin, den MySQL-Server zusammen mit dem MySQL-Root-Benutzerpasswort einzurichten.
Jetzt muss ich dieses Passwort dringend ändern. Die Schritte, die ich unternahm:
- Ich habe Variablen für Ansible-Rollen aktualisiert
- Ich habe den Befehl ausgeführt,
ansible-playbook -i hosts/staging server.yml
um den Server erneut bereitzustellen
Alle Aufgaben wurden wie erwartet ausgeführt (keine Änderungen), das Skript schlug jedoch [mariadb | Set root user password]
mit der folgenden Meldung fehl
:
msg: unable to connect to database, check login_user and login_password are correct or ~/.my.cnf has the credentials
Ich vermute, dass nach dem Festlegen des MySQL-Root-Passworts durch eine erneute Bereitstellung des Servers dieses Passwort nicht mehr geändert werden kann.
Ist es überhaupt möglich, das MySQL-Root-Passwort zu ändern, indem der Server erneut mit Ansible bereitgestellt wird? Welche Möglichkeiten habe ich?
mysqladmin
Sie können ~ / .my.cnf missbrauchen , um das mysql-root-Passwort ändern zu können.
Der Trick besteht darin, eine Aufgabe "Set root password" (Nr. 1) zu haben, mit der das Passwort festgelegt wird. Anschließend haben Sie eine Aufgabe, die eine ~ / .my.cnf mit den richtigen Anmeldeinformationen erstellt (Nr. 2).
Auf einem neuen System ist ~ / .my.cnf nicht vorhanden. Aufgabe Nr. 1 erstellt einen mysql-root-Benutzer mit den angegebenen Anmeldeinformationen. Auf einem aktuellen System werden Anmeldeinformationen aus ~ / .my.cnf verwendet, um sich anzumelden und ein Kennwort für mysql_root_password festzulegen . Aufgabe Nr. 2 erstellt ~ / .my.cnf oder überschreibt vorhandene alte Anmeldeinformationen ~ / .my.cnf mit neuen.
Der große Vorteil dieses Ansatzes ist, dass es nur eine Variable "mysql_root_password" gibt, die aus Sicht eines Playbooks immer die richtige ist. Auf den gegenwärtigen Systemen ist ~ / .my.cnf eine Art Speicher für aktuelle lokale mysql-Anmeldeinformationen.
mit client.my.cnf.j2:
Weitere Lektüre
Relevante Hinweise aus der ansible-mysql_user_module-Dokumentation :
Anmerkung 1:
Anmerkung 2:
quelle
mysql --database mysql --execute "select host from user where user = 'root';"
. Dieser Beitrag entspricht dieser Antwort, enthält jedoch Code zum Festlegen aller Kennwörter.Für die nächste Person, die hier nach Antworten sucht. Während die akzeptierte Antwort wahr ist, müssen Sie besonders sorgfältig sein, wenn Sie MySQL 5.7 verwenden, da in mysqld im daemonisierten Modus (Dienst) keine anonyme Anmeldung zulässig ist. Stattdessen MÜSSEN Sie die Datei /var/log/mysqld.log nach einem TEMPORARY-Kennwort durchsuchen, das jemand erstellt und für login_password = ydaetskcoR verwendet hat. Diese Funktion wurde in Version 5.7 des Entwickler-Repositorys implementiert. Wenn Sie dies vermeiden möchten, verwenden Sie eine ältere Version (5.6).
Dokumentation hier: https://dev.mysql.com/doc/refman/5.7/de/server-options.html#option_mysqld_initialize-insecure
http://mysqlserverteam.com/initialize-your-mysql-5-7-instances-with-ease/
quelle
Es gibt ein Ansible-Playbook, das zum Härten von MySQL verwendet wird.
https://github.com/dev-sec/ansible-mysql-hardening
Dadurch wurde nicht nur das Root-Passwort geändert, sondern es wurden auch einige zusätzliche Schritte zum Absichern des Servers ausgeführt.
Schauen Sie sich die Readme-Datei an.
quelle