如何通过 ansible playbook 执行 mysql_secure_installation?

如何通过 ansible playbook 执行 mysql_secure_installation?

我设法使用 playbook 安装了 Apache Mysql/Mariadb 和 PHP。如何使用mysql_secure_installationansible?

我是 Ansible 新手。我想为 MySQL 服务器设置新密码并通过 playbook 完成所有安全问题。

答案1

不久前,我自己在 MariaDB 安装中实现了这个功能,当时我还没有信任过其他人能正确地做到这一点。以下是我执行的步骤:

  # mysql_secure_installation
- name: Update MariaDB root password
  mysql_user: name=root host={{item}} password={{mysql_root_password}}
  with_items:
    - 127.0.0.1
    - ::1
    - localhost

- name: Set ~/.my.cnf file
  template: src=dotmy.cnf.j2 dest=/root/.my.cnf mode=0600

  # mysql_secure_installation
- name: Delete anonymous MySQL user
  mysql_user: name="" host={{item}} state=absent
  with_items:
    - localhost
    - "{{ansible_nodename}}"

  # mysql_secure_installation
- name: Delete Hostname based MySQL user
  mysql_user: name=root host="{{ansible_nodename}}" state=absent

  # mysql_secure_installation
- name: Remove MySQL test database
  mysql_db: name=test state=absent

你必须决定如何创造mysql_root_password你自己。

答案2

你可以使用 Ansible 的期望模块。下面是一个例子:

- name: secure mariadb
  become: yes
  expect:
    command: mysql_secure_installation
    responses:
      'Enter current password for root': ''
      'Set root password': 'n'
      'Remove anonymous users': 'y'
      'Disallow root login remotely': 'y'
      'Remove test database': 'y'
      'Reload privilege tables now': 'y'
    timeout: 1
  register: secure_mariadb
  failed_when: "'... Failed!' in secure_mariadb.stdout_lines"

请注意:此配置对我来说有效,但您可能需要根据需要调整值!

答案3

我编写了一个自定义的 ansible 模块来执行此操作:https://github.com/eslam-gomaa/mysql_secure_installation_Ansible

例子

- 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

答案4

出于幂等性的原因,最好通过mysql_secure_installation专用的 Ansible 任务来实现强化步骤,而不是mysql_secure_installation直接通过 Ansible 执行。

mysql_secure_installation执行以下操作:

  • 设置 root 密码
  • 删除匿名用户
  • 删除 root 远程访问
  • 删除测试数据库

这些强化任务可以通过 Ansible 像这样实现:

- name: test database is absent
  mysql_db: name=test state=absent
  when: mysql_remove_test_database

查看dev-sec 的 MySQL 强化存储库mysql_secure_installation了解使用 Ansible 任务实现步骤的完整示例。

相关内容