Files
ansible-collection-hardening/roles/mysql_hardening/tasks/mysql_secure_installation.yml
T
Martin Schurz bf177add07 one last time ...
Signed-off-by: Martin Schurz <[email protected]>
2023-11-11 15:37:26 +01:00

107 lines
4.0 KiB
YAML

---
- name: Fail the role if the mysql root password was not set
ansible.builtin.fail:
msg: ERROR - you have to change default mysql_root_password
when: mysql_root_password == '-----====>SetR00tPa$$wordH3r3!!!<====-----'
- name: Ensure that the root password is present
community.mysql.mysql_user:
name: root
host_all: true
password: "{{ mysql_root_password | mandatory }}"
state: present
login_unix_socket: "{{ login_unix_socket | default(omit) }}"
- name: Install .my.cnf with credentials
ansible.builtin.template:
src: my.cnf.j2
dest: "{{ mysql_user_home }}/.my.cnf"
mode: "0400"
tags: my_cnf
- name: Ensure that the test database is absent
community.mysql.mysql_db:
name: test
state: absent
login_unix_socket: "{{ login_unix_socket | default(omit) }}"
when: mysql_remove_test_database
- name: Ensure that anonymous users are absent
community.mysql.mysql_user:
name: ""
state: absent
host_all: true
login_unix_socket: "{{ login_unix_socket | default(omit) }}"
when: mysql_remove_anonymous_users
- name: Ensure that root can only login from localhost
community.mysql.mysql_query:
query: >
DELETE
FROM mysql.user
WHERE USER='root'
AND HOST NOT IN ('localhost',
'127.0.0.1',
'::1');
login_unix_socket: "{{ login_unix_socket | default(omit) }}"
when: mysql_remove_remote_root
- name: Detect role support on MySQL version >= 5.7.6 or Mariadb version >= 10.4.0
community.mysql.mysql_query:
query: >
SELECT 1 FROM information_schema.COLUMNS
WHERE TABLE_SCHEMA = 'mysql' AND TABLE_NAME = 'user'
AND COLUMN_NAME = 'is_role';
login_unix_socket: "{{ login_unix_socket | default(omit) }}"
register: mysql_role_support
check_mode: false
- name: Get all users that have no authentication_string on MySQL version >= 5.7.6 or Mariadb version >= 10.4.0
community.mysql.mysql_query:
query: >
SELECT CONCAT(QUOTE(USER), '@', QUOTE(HOST)) AS user
FROM mysql.user
WHERE (length(authentication_string)=0
OR authentication_string="")
AND USER NOT IN ('mysql.sys',
'mysqlxsys',
'mariadb.sys')
{{ 'AND CONVERT(is_role USING utf8) = "N"' if mysql_role_support.rowcount[0] > 0 }};
login_unix_socket: "{{ login_unix_socket | default(omit) }}"
register: mysql_users_wo_passwords_or_auth_string
check_mode: false
when: >
(mysql_distribution == "mysql" and mysql_version.version.full is version('5.7.6', '>=')) or
(mysql_distribution == "mariadb" and mysql_version.version.full
is version('10.4.0', '>='))
- name: Get all users that have no password or authentication_string on MySQL version < 5.7.6 or Mariadb version < 10.4.0
community.mysql.mysql_query:
query: >
SELECT CONCAT(QUOTE(USER), '@', QUOTE(HOST)) AS user
FROM mysql.user
WHERE (length(password)=0
OR password="")
AND (length(authentication_string)=0
OR authentication_string="")
AND USER NOT IN ('mysql.sys',
'mysqlxsys',
'mariadb.sys')
{{ 'AND is_role = "N"' if mysql_role_support.rowcount[0] > 0 }};
login_unix_socket: "{{ login_unix_socket | default(omit) }}"
register: mysql_users_wo_passwords
check_mode: false
when: >
(mysql_distribution == "mysql" and mysql_version.version.full is version('5.7.6', '<')) or
(mysql_distribution == "mariadb" and mysql_version.version.full is
version('10.4.0', '<'))
- name: Ensure that there are no users without password or authentication_string
community.mysql.mysql_query:
query:
- DROP USER {{ item.user }}
login_unix_socket: "{{ login_unix_socket | default(omit) }}"
with_community.general.flattened:
- "{{ mysql_users_wo_passwords.query_result | default([]) }}"
- "{{ mysql_users_wo_passwords_or_auth_string.query_result | default([]) }}"