MySQL
MySQL je open-source systém pro správu relačních databází. Tato příručka vám ukáže, jak zabezpečit a auditovat server MySQL. Název je kombinací „My“, jména dcery spoluzakladatele Michaela Widenia, a „SQL“, což je zkratka pro Structured Query Language.
Než začnete
-
Ujistěte se, že jste postupovali podle příruček Začínáme a Zabezpečení serveru. Ujistěte se, že je nastaven název hostitele Linode.
Zkontrolujte název hostitele svého Linode. První příkaz by měl zobrazit váš krátký název hostitele a druhý by měl zobrazit váš plně kvalifikovaný název domény (FQDN).
hostname hostname -f
Poznámka Pokud máte registrovaný název domény pro svůj web, přidejte doménu k serveru Linode, na který plánujete nainstalovat zásobník LAMP. Pokud nemáte registrovaný název domény, nahraďte
example.com
s IP adresou serveru Linode v následujících pokynech. -
Aktualizujte svůj systém:
sudo yum update
Poznámka Tato příručka je napsána pro uživatele bez oprávnění root. Příkazy, které vyžadují zvýšená oprávnění, mají předponu
sudo
. Pokud neznátesudo
můžete se podívat na naši příručku Uživatelé a skupiny. -
Abyste mohli zabezpečit a auditovat MySQL, musíte mít linuxový server s
MySQL Server
služby běží. Informace o instalaci MySQL naleznete v části Instalace MySQLPoznámka Pokyny v této příručce jsou založeny na Ubuntu 18.04, i když všechny kroky jsou nezávislé na distribuci s výjimkou názvů balíčků a správců balíčků.
Použití zabezpečeného instalačního programu MySQL
Balíček mysql-server je dodáván předem nakonfigurovaný s nástrojem nazvaným mysql_secure_installation
který se používá k nastavení bezpečného výchozího bodu pro server MySQL odstraněním anonymních uživatelů a umožněním zadání požadované zásady síly hesla.
mysql_secure_installation
je shell skript dostupný na unixových systémech a umožňuje vám zabezpečit instalaci MySQL tím, že vám umožní:
- nastavit heslo pro účty root
- odeberte účty root, které jsou přístupné mimo místního hostitele
- odebrat účty anonymních uživatelů
- odeberte testovací databázi, ke které mají ve výchozím nastavení přístup anonymní uživatelé
Zahajte proces zabezpečení spuštěním tohoto nástroje ihned po instalaci mysql-server.
-
Vyvolejte nástroj spuštěním následujícího příkazu:
sudo mysql_secure_installation
-
Spustí se proces nastavení a obslužný program vás vyzve, abyste určili, zda chcete povolit modul pro ověření hesla, který se používá k testování hesel a zlepšení zabezpečení. Doporučuje se povolit tuto funkci.
Securing the MySQL server deployment. Connecting to MySQL using a blank password. VALIDATE PASSWORD PLUGIN can be used to test passwords and improve security. It checks the strength of password and allows the users to set only those passwords which are secure enough. Would you like to setup VALIDATE PASSWORD plugin? Press y|Y for Yes, any other key for No: y
-
Poté, co povolíte zásuvný modul pro hesla, určete zásady ověřování hesla na základě úrovně síly požadovaných hesel.
There are three levels of password validation policy: LOW Length >= 8 MEDIUM Length >= 8, numeric, mixed case, and special characters STRONG Length >= 8, numeric, mixed case, special characters and dictionary file Please enter 0 = LOW, 1 = MEDIUM and 2 = STRONG: 2 Please set the password for root here. New password: Re-enter new password: Estimated strength of the password: 100 Do you wish to continue with the password provided?(Press y|Y for Yes, any other key for No) : y
-
Odebrat anonymní uživatele. Toto je důležitá možnost zabezpečení, protože útočníci mohou využít anonymní uživatele k získání přístupu k databázovému serveru.
By default, a MySQL installation has an anonymous user, allowing anyone to log into MySQL without having to have a user account created for them. This is intended only for testing, and to make the installation go a bit smoother. You should remove them before moving into a production environment. Remove anonymous users? (Press y|Y for Yes, any other key for No) : y
-
Vzdáleně zakázat přihlášení uživatele root, jedná se o extrémně důležitou konfiguraci zabezpečení, protože brání útočníkům vzdáleně se autentizovat na serveru MySQL jako root nebo provádět útoky hrubou silou pomocí hesla. Vzdálenou autentizaci lze také úplně zakázat, na to se podíváme v další části.
Normally, root should only be allowed to connect from 'localhost'. This ensures that someone cannot guess at the root password from the network. Disallow root login remotely? (Press y|Y for Yes, any other key for No) : y
-
Smažte testovací databázi vytvořenou během procesu instalace mysql-serveru, tato databáze je vytvořena pro testovací účely, jako dobrou praxi se doporučuje tuto databázi smazat.
By default, MySQL comes with a database named 'test' that anyone can access. This is also intended only for testing, and should be removed before moving into a production environment. Remove test database and access to it? (Press y|Y for Yes, any other key for No) : y
-
Znovu načtěte tabulky oprávnění, abyste se ujistili, že všechny změny budou použity a v platnosti.
Nyní máte zabezpečenou základnu, se kterou můžete pracovat, v další části naleznete pokyny ke změně výchozího rootu uživatelské jméno a heslo.Reloading the privilege tables will ensure that all changes made so far will take effect immediately. Reload privilege tables now? (Press y|Y for Yes, any other key for No) : y Success. All done!
Úprava uživatele „root“
Ve výchozím nastavení má server MySQL předdefinovaný superuser/admin
účet, který má přístup ke všem oprávněním a funkcím databází a uživatelů databáze. Vzhledem k této jedinečné kontrole a přístupu je důležité uzamknout a zabezpečit účet root, protože útočníci se obvykle zaměřují na účet root na serveru MySQL, protože má potenciál poskytnout úplný přístup k databázím a uživatelům databáze.
Prvním krokem k zabezpečení uživatele „root“ je změna uživatelského jména z root
k něčemu neústupnějšímu, cílem je, aby bylo pro útočníky těžké uhodnout uživatelské jméno root nebo jej použít hrubou silou. Poté se také doporučuje změnit root
heslo účtu pravidelně jako osvědčený postup.
-
Přihlaste se k serveru MySQL pomocí následujícího příkazu:
sudo mysql -u root
-
Změňte uživatelské jméno „root“ účtu spuštěním následujícího dotazu:
rename user 'root'@'localhost' to '<new-username>'@'localhost';
-
Změňte
root
heslo účtu k něčemu silnému a těžko uhodnutelnému, doporučuje se použít generátor hesel. Pokud jste během procesu zabezpečené instalace povolili plugin pro ověření hesla, musíte zadat heslo, které splňuje požadavky zásad z hlediska pevnosti.ALTER USER 'example_username'@'localhost' IDENTIFIED BY '<new-password>';
-
Znovu načtěte tabulku oprávnění, abyste zajistili uložení a aktivaci všech změn spuštěním následujícího příkazu:
flush privileges;
-
Pro potvrzení, zda
root
uživatelské jméno a heslo jsou změněny, spusťte následující dotaz:use mysql; select user,host,authentication_string from mysql.user;
Zobrazí se uživatelské tabulky uložené v databázi mysql a měly by odrážet provedené změny.
+------------------+-----------+-------------------------------------------+
| user | host | authentication_string |
+------------------+-----------+-------------------------------------------+
| example_user | localhost | *A2550B00C6DF81DACE33551E8293462F6CAE33DA |
| mysql.session | localhost | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE |
| mysql.sys | localhost | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE |
| debian-sys-maint | localhost | *241DC5A20F017D55EE82E46E7996784ED4A5CD8A |
+------------------+-----------+-------------------------------------------+
4 rows in set (0.00 sec)
Vytvoření nového uživatele
Dobrou bezpečnostní praxí je koncept segregace podle povinností nebo rolí. To znamená, že pro každou databázi nebo aplikaci, která používá databázi, vytvořte nového uživatele, který má oprávnění CRUD pro danou konkrétní databázi. Tím je zajištěno, že k jedné databázi má v daný okamžik přístup pouze jeden uživatel a uživatelé nemohou přistupovat k jiným databázím.
-
Vytvořte
Test
databázi spuštěním následujícího dotazu v rámci MYSQL:create database Test;
-
Vytvořte uživatele odpovědného za správu této testovací databáze:
CREATE USER '<username>'@'localhost' IDENTIFIED BY '<password>';
-
Přidělte uživateli příslušná oprávnění CRUD pro
Test
databáze:GRANT SELECT,UPDATE,DELETE ON Test.* TO '<username>'@'localhost';
-
Je důležité poznamenat, že tato oprávnění se vztahují pouze na
Test
databáze, pokud vytváříte uživatele pro aplikaci, jako jephpMyAdmin
, musíte uživateli poskytnoutroot
oprávnění. -
Pokud se rozhodnete odstranit konkrétního uživatele, spusťte následující dotaz:
drop user '<username>'@'localhost';
-
Znovu načtěte tabulku oprávnění, abyste zajistili, že provedené změny budou aplikovány a aktivovány spuštěním následujícího dotazu:
flush privileges;
Vlastní konfigurace MySQL
Nyní můžete nastavit zabezpečenou vlastní konfiguraci pro MySQL, která poskytuje další možnosti konfigurace zabezpečení.
-
Globální konfigurační soubor MySQL se nachází v
/etc/mysql/my.cnf
, všechny vlastní globální konfigurace je třeba nastavit v konfiguračním souboru. -
Vlastní konfigurace musí být specifikována pro mysqld (démon MySQL), možnosti zobrazené na obrázku jsou vlastní konfigurace zabezpečení.
<šablona x-if=visible><šablona x-if=$isMobile()>
-
Po přidání vlastních konfigurací je třeba restartovat
mysql
služby, aby bylo zajištěno, že budou použity všechny změny.systemctl restart mysql
Audit zabezpečení MySQL
Nyní můžete auditovat zabezpečení serveru MySQL pomocí nástroje nazvaného MySAT. MySAT provádí několik testů k analýze konfigurací databáze a bezpečnostních zásad. MySAT pomáhá vyhodnotit a tím zvýšit zabezpečení databáze MySQL. MySAT je jednoduchý SQL skript, je snadno pochopitelný a snadno se udržuje. Výsledky MySAT jsou vydávány ve formátu HTML.
-
Naklonujte úložiště MySAT Github spuštěním následujícího příkazu:
git clone https://github.com/meob/MySAT.git
-
Po naklonování adresáře přejděte do adresáře MySAT, kde je
mysat.sql
soubor je umístěn a používá se ve spojení se serverem MySQL k výstupu výsledků doMySAT.htm
soubor. -
Auditujte zabezpečení spuštěním následujícího příkazu:
mysql --user=<root-user> -p<password> --skip-column-names -f < mysat.sql > MySAT.htm
-
Jak bylo uvedeno, MySAT vyžaduje root přístup k MySQL ke spuštění požadovaných testů, po spuštění příkazu se vygeneruje soubor MySAT.htm, zkopírujte soubor MySAT.htm a
mysat.css
soubor na server Apache nebo NGINX nebo si je stáhněte lokálně pomocíscp
, abyste mohli analyzovat výsledky auditu.<šablona x-if=visible><šablona x-if=$isMobile()>
-
Výsledky jsou formátovány ve snadno čitelném a srozumitelném formátu, kde jsou konfigurace kontrolovány a výsledky jsou barevně označeny na základě jejich aktuální konfigurace a toho, jak to ovlivňuje bezpečnost serveru mysql. Například neúspěšná kontrola konfigurace je barevně označena oranžovou barvou a úspěšná kontrola je barevně označena zelenou barvou.
-
Zpráva o auditu odhalí, jaké konfigurace je třeba změnit nebo upravit, a poskytne vám obraz nejvyšší úrovně o celkovém zabezpečení serveru MySQL.