Ansible: Sunucuyu yeniden düzenleyerek MySQL sunucu kök parolasını değiştirme


14

Sunucumu Ansible playbook ile sağladım. Kullandığım kök / kaya-yanıtlayıcı 'taktik kitabı .

Görevlerden biri mysql sunucusunu mysql root kullanıcı şifresiyle birlikte kurmaktı.

Şimdi bu şifreyi acilen değiştirmem gerekiyor. Attığım adımlar:

  1. Ansible rolleri için değişkenleri güncelledim
  2. ansible-playbook -i hosts/staging server.ymlSunucuyu yeniden sağlamak için komutu yürüttüm

Tüm görevler beklendiği gibi yürütüldü (değişiklik yok), ancak komut dosyasının [mariadb | Set root user password]şu iletide başarısız olduğu :

msg: unable to connect to database, check login_user and login_password are correct or ~/.my.cnf has the credentials

Benim tahminim, MySQL kök parolası belirlendikten sonra sunucunun yeniden yapılandırılması bu parolayı değiştiremez.

Sunucuyu Ansible ile yeniden hazırlayarak MySQL kök parolasını değiştirmek mümkün müdür? Seçeneklerim neler?

Yanıtlar:


15

Sahip olduğunuz sorun Ansible'ın giriş yapmak için aynı kök parolayı değiştirmek istediğiniz şekilde kullanmasıdır:

- name: Set root user password
  mysql_user: name=root
              host="{{ item }}"
              password="{{ mysql_root_password }}"
              check_implicit_admin=yes
              login_user="{{ mysql_user }}"
              login_password="{{ mysql_root_password }}"
              state=present

Açıkçası bu oyunu değiştirmek için kullanmak istiyorsanız bu asla işe yaramayacaktır.

Bunun yerine yukarıdaki oyunu aşağıdaki gibi değiştirmelisiniz:

- name: Set root user password
  mysql_user: name=root
              host="{{ item }}"
              password="{{ mysql_root_password }}"
              check_implicit_admin=yes
              login_user="{{ mysql_user }}"
              login_password="{{ mysql_old_root_password }}"
              state=present

Ve sonra bu yeni değişkeni eklemek için ilgili envanter dosyalarını güncelleyin.

Yani group_vars/productionşimdi şunları içermelidir:

mysql_old_root_password: productionpw
mysql_root_password: newproductionpw

Bu oynatma kitabının her iki roles/mariadb/tasks/main.ymloynatma kitabında da kök parolasını kullandığı görülüyor ve roles/wordpress-setup/tasks/database.ymlbu nedenle server.yml, düzgün ayarlandığından emin olmak için tüm oynatma kitabını çalıştırmak isteyebilirsiniz .


Harika bir cevap için çok teşekkürler. Bu kesinlikle gitmenin yolu. Konsoldaki kök parolayı sıfırlayarak mysqladmin
bitirdim

7

~ / .My.cnf dosyasını mysql-root-parolasını değiştirebildiğiniz için yanlış kullanabilirsiniz.

İşin püf noktası, şifreyi ayarlayacak bir "root parolasını ayarla" (nr.1) görevine sahip olmaktır. Daha sonra, doğru kimlik bilgileriyle ( nr.2) bir ~ / .my.cnf oluşturan bir göreviniz olur .

Yeni bir sistemde ~ / .my.cnf mevcut değil. Görev no. 1 verilen kimlik bilgileriyle mysql-root-user oluşturur. Bir mevcut sistemde, gelen kimlik bilgileri ~ / .my.cnf için giriş ve set şifre kullanılır mysql_root_password . Nr.2 görevi ~ / .my.cnf dosyasını oluşturacak , varolan eski kimlik bilgilerini ~ / .my.cnf'yi yenileriyle değiştirecektir.

Bu yaklaşımın en büyük avantajı, bir oyun kitabının bakış açısından her zaman doğru olan tek bir değişken olan "mysql_root_password" olmasıdır. Mevcut sistem (ler) de, ~ / .my.cnf geçerli yerel mysql kimlik bilgileri için bir tür depolama alanıdır .

- name: Set root user password
  # If .my.cnf already exists, this will cause an mysql-root-password update.
  mysql_user:
    name: root
    password: "{{ mysql_root_password}}"
    check_implicit_admin: true

- name: Create .my.cnf
  template:
   src: "client.my.cnf.j2"
   dest: "/root/.my.cnf"
   owner: root
   group: root
   mode: 0600

client.my.cnf.j2 ile:

[client]
user=root
password={{ mysql_root_password }}

daha fazla okuma

Ansible-mysql_user_module-dokümantasyonundan ilgili notlar :

  • Not 1:

    Bu kullanıcıyı idempotent bir oynatma kitabının parçası olarak güvenceye almak için en az iki görev oluşturmanız gerekir: ilki, oturum_kullanıcısı / oturum açma_ifresi bilgisi girmeden kök kullanıcının şifresini değiştirmelidir. İkincisi, yeni kök kimlik bilgilerini içeren bir ~ / .my.cnf dosyasını bırakmalıdır. Ardından, oynatma kitabının sonraki işlemleri dosyadaki yeni kimlik bilgilerini okuyarak başarılı olacaktır. ansible-mysql_user_module, notlar

  • Not 2:

    Kimlik bilgilerini geçirirken hem login_password hem de login_user gerekir. Hiçbiri yoksa, modül ~ / .my.cnf kimlik bilgilerini okumaya çalışacak ve son olarak parola olmadan 'root' MySQL varsayılan girişini kullanmaya başlayacaktır. ansible-mysql_user_module, notlar


Bu yaklaşımı oldukça seviyorum ve cevabımdaki versiyondan çok daha iyi. Muhtemelen kabul edilen cevap olmalıdır.
ydaetskcoR

2
Bu kullanışlıdır, ancak birçok sistemde Hosts 127.0.0.1, localhost, :: 1 ve yerel ana bilgisayar adının ne olduğu ile oluşturulmuş 4 'root' kullanıcısı vardır. Yukarıdaki yalnızca root @ localhost'u değiştirir ve diğer üç root hesabını boş parolalarla bırakır.
robo

Tüm kök kullanıcıları listeleme: mysql --database mysql --execute "select host from user where user = 'root';". Bu gönderi bu yanıtla aynı şeyi yapıyor ancak tüm şifreleri ayarlamak için bir kodu var.
hlovdal

2

Buralarda cevap arayan bir sonraki kişi için. Kabul edilen cevap doğru olsa da, MySQL 5.7 kullanıyorsanız ekstra gayretli olmanız gerekir, çünkü mysqld'de daemonized modda (hizmet) anonim bir girişe izin verilmez. Bunun yerine /var/log/mysqld.log dosyasını, birinin bu şifreyi oluşturmaya ve login_password = ydaetskcoR'da kullanmaya karar verdiği TEMPORARY şifresi için kazımanız GEREKİR. Bu, dev deposunun 5.7 sürümünde uygulamaya karar verdikleri bir özellikti, bu nedenle bundan kaçınmak istiyorsanız daha eski bir sürümü (5.6) kullanın.

Buradaki belgeler: 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/


1

MySQL'i sertleştirmek için kullanılan bir Ansible playbook var.

https://github.com/dev-sec/ansible-mysql-hardening

Bu yalnızca kök parolasını değiştirmekle kalmaz, aynı zamanda sunucuyu sertleştirmek için bazı ek adımlar da gerçekleştirir.

Benioku dosyasına bir göz atın.


Boş olduğunda kök parolasını değiştirmeyi ele almıyor gibi görünüyor.
flickerfly

1

Bunun için kolay ve İdempotent yol sağlar, bu yanıtlayıcı 'Modülüne bir göz atın mysql_secure_installationyanıtlayıcı' in


Örnek - yeni bir MySQL Kurulumuyla

- name: test mysql_secure_installation
  mysql_secure_installation:
    login_password: ''
    new_password: password22
    user: root
    login_host: localhost
    hosts: ['localhost', '127.0.0.1', '::1']
    change_root_password: true
    remove_anonymous_user: true
    disallow_root_login_remotely: true
    remove_test_db: true
  register: mysql_secure

# To see detailed output
- debug:
    var: mysql_secure

Örnek - Mevcut bir kök parolayı değiştirme

- name: test mysql_secure_installation
  mysql_secure_installation:
    login_password: password22
    new_password: password23
    user: root
    login_host: localhost
    hosts: ['localhost', '127.0.0.1', '::1']

Kullanım için : Tek yapmanız gereken librarysizin adınızda bir dizin oluşturmak playbooks or role's dirve kopyalamak mysql_secure_installation.py,

Aşağıdaki linkte tam bir örnek bulabilirsiniz

https://github.com/eslam-gomaa/mysql_secure_installation_Ansible

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.