Ansible

Hur man ställer in MySQL-lösenord med Ansible

Hur man ställer in MySQL-lösenord med Ansible
De flesta Linux-distributioner, inklusive CentOS / RHEL och Ubuntu / Debian, ställer inte in MySQL-rotlösenordet automatiskt. Eftersom MySQL-root-lösenordet inte ställs in automatiskt kan man logga in på MySQL-konsolen som root utan något lösenord. Detta är inte särskilt bra för säkerheten.

På CentOS / RHEL kan du enkelt köra mysql_secure_installation kommando för att ställa in ett root-lösenord. Men på Ubuntu 20.04 LTS, den här metoden fungerar inte, eftersom MySQL använder ett annat autentiseringsplugg för rot användare.

Den här artikeln visar hur du ställer in ett MySQL-root-lösenord på CentOS 8 och Ubuntu 20.04 LTS Linux-distributioner med Ansible-moduler.

Förutsättningar


Om du vill prova exemplen i den här artikeln,

1) Du måste ha Ansible installerat på din dator.

2) Du måste ha minst en CentOS / RHEL 8-värd eller en Ubuntu 20.04 LTS-värd konfigurerad för Ansible-automatisering.

Det finns många artiklar på LinuxHint dedikerade till att installera Ansible och konfigurera värdar för Ansible-automatisering. Du kan kolla in dessa om det behövs.

Ställa in en projektkatalog

Innan vi går vidare, kommer vi att skapa en ny Ansible-projektkatalog, bara för att hålla sakerna lite organiserade.

För att skapa projektkatalogen mysql-root-pass / och alla nödvändiga underkataloger (i din nuvarande arbetskatalog), kör följande kommando:

$ mkdir -pv mysql-root-pass / playbooks, host_vars, group_vars

När projektkatalogen har skapats navigerar du till projektkatalogen enligt följande:

$ cd mysql-root-pass /

Skapa en värdar inventeringsfil, enligt följande:

$ nano värdar

Lägg till värdens IP- eller DNS-namn på din CentOS / RHEL 8 eller Ubuntu 20.04 LTS-värdar i inventeringsfilen (en värd per rad), som visas på skärmdumpen nedan.

När du är klar sparar du filen genom att trycka på + X, följd av Y och .

Här har jag skapat två grupper, centos8, och ubuntu20. De centos8 gruppen har DNS-namnet på min CentOS 8-värd, vm3.nodekite.com; och den ubuntu20 gruppen har DNS-namnet på min Ubuntu 20.04 LTS-värd, vm7.nodekite.com.

Skapa en Ansible-konfigurationsfil ansible.cfg i din projektkatalog, enligt följande:

$ nano ansible.cfg

Skriv följande rader i ansible.cfg fil:

[standard]
inventering = värdar
host_key_checking = Falskt

När du är klar sparar du ansible.cfg fil genom att trycka på + X, följd av Y och .

Försök att pinga alla värdarna du har lagt till i din värdar inventeringsfil, enligt följande:

$ ansible all -u ansible -m ping

Som du kan se är min CentOS 8-värd (vm3.nodekite.com) och Ubuntu 20.04 LTS-värd (vm7.nodekite.com) är tillgängliga.

Installera MySQL och ställa in root-lösenord på CentOS / RHEL 8

Detta avsnitt visar hur du installerar MySQL-databasservern och ställer in ett root-lösenord på CentOS 8 med Ansible. Samma procedur bör fungera på RHEL 8.

Skapa den nya Ansible-spelboken install_mysql_centos8.yaml i spelböcker / katalog, enligt följande:

$ nano playbooks / install_mysql_centos8.yaml

Skriv följande rader i install_mysql_centos8.yaml fil:

- värdar: centos8
användare: ansible
bli sann
uppgifter:
- namn: Uppdatera DNF-paketets lagringscache
dnf:
update_cache: True
- namn: Installera MySQL-servern på CentOS 8
dnf:
namn: mysql-server
tillstånd: närvarande
- namn: Installera MySQL-klient på CentOS 8
dnf:
namn: mysql
tillstånd: närvarande
- namn: Se till att mysqld-tjänsten körs
service:
namn: mysqld
tillstånd: startade
aktiverat: True

- namn: Installera python3-PyMySQL-biblioteket
dnf:
namn: python3-PyMySQL
tillstånd: närvarande

När du är klar trycker du på + X, följd av Y och , för att spara install_mysql_centos8.yaml fil.

Raden nedan ber Ansible att köra spelboken install_mysql_centos8.yaml på varje värd i centos8 grupp.

Här har jag definierat fem uppgifter.

Den första uppgiften uppdaterar DNF-paketförvarets cache för CentOS 8 med Ansible dnf modul.

Den andra uppgiften installerar MySQL-serverpaketet mysql-server med Ansible dnf modul.

Den tredje uppgiften installerar MySQL-klientpaketet mysql med Ansible dnf modul.

Den fjärde uppgiften säkerställer att mysqld tjänsten körs och att den har lagts till i systemets start så att den automatiskt startar vid start.

Den femte uppgiften installerar Python 3 MySQL-biblioteket pymysql. Detta krävs för åtkomst till MySQL från Ansible.

Springa det install_mysql_centos8.yaml spelbok, enligt följande:

$ ansible-playbook playbooks / install_mysql_centos8.yaml

Som du kan se, spelboken install_mysql_centos8.yaml sprang framgångsrikt.

På min CentOS 8-värd kan jag komma åt MySQL som rot användare utan något lösenord, som du kan se på skärmdumpen nedan:

$ sudo mysql -u root

Nu när MySQL-servern är installerad är det dags att ställa in ett root-lösenord för MySQL-servern.

Skapa den nya gruppvariabelfilen centos8 (i grupp_vars / katalog) för centos8 grupp, enligt följande:

$ nano group_vars / centos8

Lägg till en ny variabel mysql_pass med rotlösenordet (i mitt fall, hemlighet) du vill ställa in, som visas på skärmdumpen nedan.

När du är klar trycker du på + X, följd av Y och , för att spara filen.

Skapa en ny spelbok set_root_pass_centos8.yaml med följande kommando:

$ nano playbooks / set_root_pass_centos8.yaml

Skriv följande rader i set_root_pass_centos8.yaml fil:

- värdar: centos8
användare: ansible
bli sann
uppgifter:
- namn: Ange MySQL-root-lösenord
mysql_user:
login_host: 'localhost'
login_user: 'root'
inloggningslösenord: "
namn: 'root'
lösenord: 'mysql_pass'
tillstånd: närvarande

När du är klar trycker du på + X, följd av Y och , för att spara set_root_pass_centos8.yaml fil.

Denna spelbok använder mysql_user Ansible-modul för att ställa in ett MySQL-root-lösenord.

De login_host, inloggningsanvändare, och inloggningslösenord alternativ för mysql_user Ansible-modul används för att ställa in det aktuella MySQL-inloggningsvärdnamnet, användarnamnet respektive lösenordet. Som standard är MySQL-inloggningsvärdnamnet (login_host) är lokal värd, inloggnings användarnamnet (inloggningsanvändare) är rot, och inloggningen Lösenord (inloggningslösenord) är tom () på CentOS 8.

De Lösenord alternativet för mysql_user Ansible-modul används för att ställa in ett nytt MySQL-rotlösenord här. MySQL-rotlösenordet kommer att vara värdet på mysql_pass gruppvariabel som ställts in tidigare.

Kör spelboken set_root_pass_centos8.yaml med följande kommando:

$ ansible-playbook playbooks / set_root_pass_centos8.yaml

Spelboken kördes framgångsrikt, vilket framgår av skärmdumpen nedan:

Som du kan se kan jag inte längre logga in på MySQL-servern utan ett root-lösenord.

För att logga in på MySQL-servern som rot användare med ett lösenord, kör följande kommando på din CentOS 8-värd:

$ sudo mysql -u root -p

Skriv in root-lösenordet du har ställt in med Ansible och tryck på .

Du bör vara inloggad på MySQL-servern som rot användare.

Installera MySQL och ställa in root-lösenord på Ubuntu 20.04 LTS

Detta avsnitt visar hur du installerar MySQL-databasservern och ställer in ett root-lösenord på Ubuntu 20.04 LTS med Ansible.

Skapa en ny Ansible-spelbok install_mysql_ubuntu20.yaml i spelböcker / katalog, enligt följande:

$ nano playbooks / install_mysql_ubuntu20.yaml

Skriv följande rader i install_mysql_ubuntu20.yaml fil:

- värdar: ubuntu20
användare: ansible
bli sann
uppgifter:
- namn: Uppdatera APT-paketets lagringscache
benägen:
update_cache: True
- namn: Installera MySQL-servern på Ubuntu 20.04 LTS
benägen:
namn: mysql-server
tillstånd: närvarande
- namn: Installera MySQL-klient på Ubuntu 20.04 LTS
benägen:
namn: mysql-client
tillstånd: närvarande
- namn: Se till att mysql-tjänsten körs
service:
namn: mysql
tillstånd: startade
aktiverat: True
- namn: Installera python3-pymysql-biblioteket
benägen:
namn: python3-pymysql
tillstånd: närvarande

När du är klar trycker du på + X, följd av Y och , för att spara install_mysql_ubuntu20.yaml fil.

Följande rad säger till Ansible att köra spelboken install_mysql_ubuntu20.yaml på varje värd i ubuntu20 grupp:

Här har jag definierat fem uppgifter.

Den första uppgiften uppdaterar APT-paketets förvarscache för Ubuntu 20.04 LTS med Ansible benägen modul.

Den andra uppgiften installerar MySQL-serverpaketet mysql-server med Ansible benägen modul.

Den tredje uppgiften installerar MySQL-klientpaketet mysql med Ansible benägen modul.

Den fjärde uppgiften ser till att mysql tjänsten körs och att den har lagts till i systemets start så att den automatiskt startar vid start.

Den femte uppgiften installerar Python 3 MySQL-biblioteket pymysql. Detta krävs för att komma åt MySQL från Ansible.

Springa det install_mysql_ubuntu20.yaml spelbok, enligt följande:

$ ansible-playbook playbooks / install_mysql_ubuntu20.yaml

Som du kan se, spelboken install_mysql_ubuntu20.yaml sprang framgångsrikt.

På min Ubuntu 20.04 LTS-värd, jag kan komma åt MySQL som rot användare utan något lösenord, som du kan se på skärmdumpen nedan.

$ sudo mysql -u root

Nu när MySQL-servern är installerad är det dags att ställa in ett root-lösenord för MySQL-servern.

Skapa en ny gruppvariabelfil ubuntu20 (i grupp_vars / katalog) för ubuntu20 grupp, enligt följande:

$ nano group_vars / ubuntu20

Lägg till en ny variabel, mysql_pass, med rotlösenordet (i mitt fall, verysecret) som du vill ställa in, som visas på skärmdumpen nedan.

När du är klar trycker du på + X, följd av Y och , för att spara filen.

Skapa en ny spelbok set_root_pass_ubuntu20.yaml med följande kommando:

$ nano playbooks / set_root_pass_ubuntu20.yaml

Skriv följande rader i set_root_pass_ubuntu20.yaml fil:

- värdar: ubuntu20
användare: ansible
bli sann
uppgifter:
- namn: Ändra autentiseringsplugin för MySQL root-användare till mysql_native_password
shell: mysql -u root -e 'UPPDATERA mysql.användar-SET plugin = "mysql_native_password"
VAR användaren = "root" OCH värd = "localhost" '
- namn: Flush Privileges
skal: mysql -u root -e 'FLUSH PRIVILEGES'
- namn: Ange MySQL-root-lösenord
mysql_user:
login_host: 'localhost'
login_user: 'root'
inloggningslösenord: "
namn: 'root'
lösenord: 'mysql_pass'
tillstånd: närvarande

När du är klar trycker du på + X, följd av Y och , för att spara set_root_pass_ubuntu20.yaml fil.

Här har jag definierat tre uppgifter.

Den första uppgiften ändrar autentiseringsplugin för MySQL rot användare från auth_socket till mysql_native_password.

Den andra uppgiften laddar om alla privilegier.

Den tredje uppgiften använder mysql_user Ansible-modul för att ställa in ett MySQL-root-lösenord.

I den tredje uppgiften, login_host, inloggningsanvändare, och inloggningslösenord alternativ för mysql_user Ansible-modul används för att ställa in det aktuella MySQL-inloggningsvärdnamnet, användarnamnet respektive lösenordet. Som standard är MySQL-inloggningsvärdnamnet (login_host) är lokal värd, inloggnings användarnamnet (inloggningsanvändare) är rot, och inloggningen Lösenord (inloggningslösenord) är tom () på systemet.

Här, den Lösenord alternativet för mysql_user Ansible-modulen används för att ställa in ett nytt MySQL-root-lösenord. MySQL-rotlösenordet kommer att vara värdet på mysql_pass gruppvariabeln, som jag ställde in tidigare, i group_vars / ubuntu20 fil.

Kör spelboken set_root_pass_ubuntu20.yaml med följande kommando:

$ ansible-playbook playbooks / set_root_pass_ubuntu20.yaml

Spelboken körde framgångsrikt, som du kan se på skärmdumpen nedan:

Som du kan se kan jag inte längre logga in på MySQL-servern utan ett root-lösenord.

$ sudo mysql -u root

För att logga in på MySQL-servern som rotanvändare med det inställda lösenordet, kör följande kommando på din Ubuntu 20.04 LTS-värd:

$ sudo mysql -u root -p

Skriv in rotlösenordet du har ställt in med Ansible och tryck på .

Du bör vara inloggad på MySQL-servern som rotanvändare.

Slutsats

Den här artikeln visade dig hur du installerar MySQL-servern och ställer in ett MySQL-root-lösenord på CentOS 8 och Ubuntu 20.04 LTS Linux-distributioner med Ansible. Denna artikel använde mysql_user Ansible-modul för att ställa in MySQL-root-lösenordet. Du kan använda den här modulen för att ändra MySQL-root-lösenordet, skapa nya MySQL-användare och därför många fler användarhanteringsfunktioner.

För mer information om mysql_user modul, kontrollera den officiella dokumentationen för mysql_user-modulen.

Hur man laddar ner och spelar Sid Meier's Civilization VI på Linux
Introduktion till spelet Civilization 6 är ett modernt intag av det klassiska konceptet som introducerades i serien Age of Empires-spel. Idén var gans...
Hur man installerar och spelar Doom på Linux
Introduktion till Doom Doom-serien har sitt ursprung på 90-talet efter att den ursprungliga Doom släpptes. Det blev en omedelbar hit och från den tide...
Vulkan för Linux-användare
Med varje ny generation grafikkort ser vi spelutvecklare driva gränserna för grafisk trohet och komma ett steg närmare fotorealism. Men trots all kred...