MySQL je open source relační databázový systém, který funguje na mnoha operačních systémech včetně Windows, Linux, MacOS a FreeBSD. Je to pravděpodobně nejpopulárnější OpenSource RDBMS a ústřední součást LAMP a LEMP Stacků. Existuje mnoho aplikací, které jsou závislé na MySQL, jako je Wordpress, Joomla, TYPO3, phpBB a mnoho dalších.
V tomto tutoriálu vám krok za krokem ukážu, jak bezpečně nakonfigurovat MySQL pro vzdálená připojení. Když potřebujete vzdáleně přistupovat k MySQL, je buď nutné použít VPN, protože MySQL nešifruje přenášená data, nebo můžete nakonfigurovat MySQL pro použití SSL, jak vám ukážu v tomto tutoriálu. V této konfiguraci se k serveru MySQL mohou připojit pouze uživatelé se správnými soubory certifikátu SSL a provoz je šifrován. Nainstalujeme nejnovější verzi MySQL a poté nakonfigurujeme SSL pro vzdálené připojení. Pro základní systém použiji server CentOS 7.
Co uděláme:
- Nainstalujte MySQL.
- Nakonfigurujte kořenové heslo MySQL.
- Vygenerujte nové soubory certifikátu SSL s vlastním podpisem.
- Povolte SSL pro MySQL.
- Povolte vzdálené připojení.
- Testování.
Předpoklad
- Server CentOS 7
- Oprávnění uživatele root
Krok 1 – Instalace MySQL
V tomto tutoriálu budeme používat MySQL 5.7, nejnovější verzi v tuto chvíli. Instaluje se z úložiště MySQL, takže musíme do systému nejprve přidat nové úložiště CentOS.
Přidejte nové úložiště pro MySQL pomocí příkazu yum níže.
yum localinstall https://dev.mysql.com/get/mysql57-community-release-el7-9.noarch.rpm
Budete požádáni o instalaci nového balíčku, zadejte 'y “ a stiskněte „Enter ' pro potvrzení.
Nyní můžete nainstalovat MySQL nejnovější verzi 5.7 na server takto:
yum -y install mysql-community-server
Po dokončení instalace spusťte službu MySQL a povolte její automatické spouštění při spouštění pomocí příkazu systemctl.
systemctl spustit mysqld
systemctl povolit mysqld
Ujistěte se, že MySQL běží kontrolou portu používaného MySQL (3306). Zkontrolujte to pomocí příkazu netstat níže.
netstat -plntu
MySQL byla nainstalována na CentOS 7 z úložiště MySQL.
Krok 2 – Konfigurace hesla kořenového adresáře MySQL
Ve výchozím nastavení vám MySQL 5.7 vygeneruje výchozí heslo uživatele root při prvním spuštění služby. Heslo je uloženo v souboru protokolu MySQL '/var/log/mysqld.log'.
Chcete-li zobrazit výchozí heslo root MySQL, můžete použít příkaz grep níže.
grep 'temporary' /var/log/mysqld.log
Uvidíte výsledek podobný tomu níže, moje výchozí heslo je 'wxtX8Te&Uh1K '.
Je vygenerováno dočasné heslo pro [email protected]:wxtX8Te&Uh1K
Připojte se k prostředí MySQL pomocí výchozího hesla a nahraďte heslo svým vlastním heslem.
mysql -u root -p
ZADEJTE VÝCHOZÍ HESLO
Nyní nahraďte výchozí heslo svým vlastním heslem. V tomto tutoriálu použiji '[email protected] ' jako nové kořenové heslo MySQL. Níže spusťte dotazy MySQL.
ALTER USER 'root'@'localhost' IDENTIFIKOVANÝ BY '[email protected]';
flush oprávnění;
exit;
Nyní se můžete znovu připojit s novým heslem „[email protected]“.
mysql -u root -p
ZADEJTE NOVÉ HESLO '[email protected]'
Krok 3 – Vygenerování nových souborů certifikátu s vlastním podpisem
Ve výchozím nastavení má MySQL 5.7 své vlastní soubory certifikátů SSL v adresáři '/var/lib/mysql'. Ale v tomto tutoriálu vám ukážu, jak vygenerovat vlastní soubory certifikátu SSL pomocí OpenSSL a poté je nakonfigurovat pomocí MySQL.
V tomto kroku vygenerujeme nové soubory certifikátů s vlastním podpisem. Potřebujeme 3 certifikáty, Certifikát CA, Serverový certifikát a klíč, Klientský certifikát a Klíč . Vytvoříme je pomocí OpenSSL.
Vytvořte nový adresář pro soubory certifikátu SSL '/etc/certs/' a přejděte do tohoto adresáře.
mkdir -p /etc/certs
cd /etc/certs
Vygenerujte nový soubor cap.pem certifikátu CA.
openssl genrsa 2048> ca-key.pem
openssl req -new -x509 -nodes -days 3600 -key ca-key.pem -out ca.pem
Dále musíme vytvořit certifikáty na straně serveru. Vytvořte nové soubory certifikátu serveru server-cert.pem a server-key.pem. Vygenerujte nové soubory certifikátů, odstraňte přístupové heslo a podepište je pomocí certifikátu CA.
openssl req -newkey rsa:2048 -days 3600 -nodes -keyout server-key.pem -out server-req.pem
openssl rsa -in server-key.pem -out server-key.pem
openssl x509 -req -in server-req.pem -days 3600 -CA ca.pem -CAkey ca-key.pem -set_serial 01 -out server-cert.pem
Nyní vygenerujte soubory certifikátů pro klienta. Server MySQL přijme vzdálené připojení pouze od klienta, který má tyto soubory certifikátů. Vygenerujte nové soubory klientských certifikátů, odstraňte přístupové heslo a podepište je pomocí certifikátu CA.
openssl req -newkey rsa:2048 -days 3600 -nodes -keyout client-key.pem -out client-req.pem
openssl rsa -in client-key.pem -out client-key.pem
openssl x509 -req -in client-req.pem -days 3600 -CA ca.pem -CAkey ca-key.pem -set_serial 01 -out client-cert.pem
Poznámka:
Informace o certifikátu CA se musí lišit od informací o klientovi a serveru.
Všechny certifikáty, které pro toto nastavení požadujeme, byly vygenerovány. Nyní můžeme ověřit soubory certifikátů pomocí příkazu níže.
openssl ověřit -CAfile ca.pem server-cert.pem client-cert.pem
Ujistěte se, že nedošlo k žádné chybě, výsledky jsou uvedeny níže.
Všechny soubory certifikátů byly ověřeny. Změňte vlastníka adresáře certs na uživatele 'mysql' a změňte oprávnění všech klíčových souborů.
chown -R mysql:mysql /etc/certs/
chmod 600 client-key.pem server-key.pem ca-key.pem
Krok 4 – Povolení SSL pro MySQL
V tomto kroku povolíme SSL pro MySQL. Než začneme konfigurovat a povolovat SSL na MySQL, musíme zálohovat výchozí soubory certifikátů do nového záložního adresáře.
Vytvořte nový záložní adresář 'mysql-certs ' pro všechny certifikáty.
mkdir -p ~/mysql-certs/
Přejděte do adresáře '/var/lib/mysql' a přesuňte všechny výchozí certifikáty do záložního adresáře.
cd /var/lib/mysql/
mv ca.pem ca-key.pem ~/mysql-certs/
mv server-key.pem server-cert.pem ~/mysql-certs /
mv client-key.pem client-cert.pem ~/mysql-certs/
mv private_key.pem public_key.pem ~/mysql-certs/
Nyní restartujte službu MySQL.
systemctl restart mysqld
Dále zkontrolujte SSL z prostředí MySQL. Přihlaste se do mysql pomocí nového hesla:
mysql -u root -p
ZADEJTE NOVÉ HESLO '[email protected]'
Spusťte dotaz níže, abychom viděli stav SSL pro MySQL.
ZOBRAZIT GLOBÁLNÍ PROMĚNNÉ JAKO '%ssl%';
STATUS;
Uvidíte, že stav SSL je „ZAKÁZANO “ a uživatel root byl připojen bez SSL .
Dále povolíme připojení SSL pro MySQL. Musíme upravit konfigurační soubor MySQL 'my.cnf ' soubor s vim.
vim /etc/my.cnf
V souboru '[mysqld] ', vložte konfiguraci níže.
# Zadejte svůj vlastní adresář certifikátů
ssl-ca=/etc/certs/ca.pem
ssl-cert=/etc/certs/server-cert.pem
ssl-key =/etc/certs/server-key.pem
Uložte soubor a ukončete vim, restartujte službu MySQL.
systemctl restart mysqld
Nyní se znovu přihlaste k MySQL a zkontrolujte SSL.
mysql -u root -p
ZADEJTE NOVÉ HESLO '[email protected]'
Spusťte dotaz níže a ujistěte se, že hodnota sekce SSL je 'ANO '.
ZOBRAZIT PROMĚNNÉ JAKO '%ssl%';
STATUS;
Uvidíte, že SSL pro MySQL je povoleno, ale uživatel root stále není připojen pomocí připojení SSL.
Chcete-li vynutit připojení všech místních uživatelů pomocí SSL, upravte konfigurační soubor mysql 'my.cnf znovu.
vim /etc/my.cnf
Vložte konfiguraci níže na konec řádku.
[klient]
ssl-ca=/etc/certs/ca.pem
ssl-cert=/etc/certs/client-cert.pem
ssl-key=/etc /certs/client-key.pem
Uložte a ukončete, poté restartujte MySQL.
systemctl restart mysqld
Připojte se znovu k MySQL a zkontrolujte připojení a SSL povoleno.
mysql -u root -p
ZADEJTE NOVÉ HESLO '[e-mail chráněno]'
ZOBRAZIT PROMĚNNÉ JAKO '%ssl%';
STAV;
SSL bylo povoleno a místní připojení také používá SSL.
Krok 5 – Povolení vzdálených připojení
Ve výše uvedených krocích jsme již povolili SSL pro server MySQL a místní připojení jsou nucena používat SSL. V tomto kroku povolíme vzdálená připojení pro MySQL, ale umožňujeme pouze klientům, aby se soubory certifikátů podepsané naší CA připojovali k serveru MySQL.
Upravte konfigurační soubor MySQL pomocí vim.
vim /etc/my.cnfVložte tuto konfiguraci níže na konec souboru '[mysqld] '.
bind-address =*
require_secure_transport =ONUložte soubor a ukončete editor, restartujte MySQL.
systemctl restart mysqldDále vytvořte nového uživatele pro vzdálené připojení. Vytvořím nového uživatele s názvem 'hakase ' s heslem '[e-mail chráněn] a udělte všechna oprávnění 'hakase ' uživatel. 'hakase ' uživatel se bude moci připojit pouze pomocí klíče certifikátu.
mysql -u root -p
TYP NOVÉ HESLO '[chráněno e-mailem]'
vytvořit uživatele 'hakase'@'%' identifikované jako '[chráněn e-mailem]' VYŽADOVAT X509;
udělte všechna oprávnění na *.* uživateli 'hakase'@'%' identifikovanému jako '[email protected]' VYŽADOVAT X509;
vyprázdnit oprávnění;
Byl vytvořen nový uživatel pro vzdálené připojení.
Poznámka:
Může se zobrazit „1 varování ' ve výsledku dotazu mysql. Je to jen varování před použitím dotazu ALTER USER místo dotazu GRANT, protože dotaz „GRANT“ bude v příštím vydání zastaralý.
Krok 6 – Testování
V poslední části tohoto tutoriálu otestujeme, zda se nový uživatel jménem 'hakase' dokáže vzdáleně připojit k serveru MySQL pomocí souborů certifikátů. Musí být staženy tři certifikáty pro klienta.
- Certifikát CA – ca.pem
- Certifikát klienta – client-cert.pem
- Klientský klíč – klient-klíč.pem
Přihlásil jsem se do jiného systému Linux a nainstaloval jsem tam balíčky mysql-client. Poté jsem si stáhl všechny soubory klientských certifikátů s SCP. Nyní se připojím k serveru MySQL se soubory certifikátů.
mysql -h 10.0.15.11 -u hakase \
--ssl-ca=ca.pem \
--ssl-cert=client-cert.pem \
--ssl -key=klient-klíč.pem -p10.0.15.11 =IP adresa serveru MySQL.
Stav připojení s tímto dotazem můžete vidět níže.
STATUS;
Uživatel hakase s IP adresou 10.0.15.10 Připojeno k serveru MySQL s IP adresou 10.0.15.11 , připojení přes TCP/IP na portu 3306 a pomocí SSL .
Když se pokusíte připojit bez souborů certifikátu, zobrazí se níže uvedená chyba.
Dále budu testovat s GUI MySQLWorkbench od mého hostitele.
Níže je moje konfigurace - Parametr nastavení.
Konfigurace SSL – Nastavení SSL.
A níže výsledky spojení se soubory klientského certifikátu SSL.
Nový uživatel se úspěšně připojil vzdáleně k databázovému serveru MySQL pomocí připojení SSL. Když se uživatel pokusí připojit bez souborů certifikátu, výsledek bude „zamítnut '. Instalace a konfigurace MySQL s připojením SSL byla úspěšně dokončena.
Jak nainstalovat Oracle Database 12c na CentOS 7 Jak nainstalovat a nakonfigurovat Askbot s Nginx na CentOS 7Cent OS