MySQL je celosvětově nejpopulárnější open source databázový systém a MariaDB (fork MySQL) je světově nejrychleji rostoucí open source databázový systém. Po instalaci serveru MySQL není ve výchozí konfiguraci bezpečný a jeho zabezpečení je jedním ze základních úkolů obecné správy databáze.
To přispěje k posílení a posílení celkové bezpečnosti linuxových serverů, protože útočníci vždy skenují zranitelná místa v jakékoli části systému a databáze byly v minulosti klíčovými cílovými oblastmi. Běžným příkladem je hrubé vynucení hesla uživatele root pro databázi MySQL.
V této příručce vysvětlíme užitečné MySQL/MariaDB osvědčený postup zabezpečení pro Linux.
1. Bezpečná instalace MySQL
Toto je první doporučený krok po instalaci MySQL serveru směrem k zabezpečení databázového serveru. Tento skript usnadňuje zlepšení zabezpečení vašeho serveru MySQL tím, že vás požádá:
- nastavte heslo pro účet root, pokud jste ho nenastavili při instalaci.
- deaktivujte vzdálené přihlášení uživatele root odebráním účtů root, které jsou přístupné mimo místního hostitele.
- odeberte účty anonymních uživatelů a testovací databázi, ke které mají ve výchozím nastavení přístup všichni uživatelé, dokonce i anonymní uživatelé.
# mysql_secure_installation
Po jeho spuštění nastavte heslo uživatele root a odpovězte na sérii otázek zadáním [Ano/Y ] a stiskněte [Enter] .
2. Svázat databázový server s adresou zpětné smyčky
Tato konfigurace omezí přístup ze vzdálených počítačů, říká serveru MySQL, aby přijímal pouze připojení z localhost. Můžete to nastavit v hlavním konfiguračním souboru.
# vi /etc/my.cnf [RHEL/CentOS] # vi /etc/mysql/my.conf [Debian/Ubuntu] OR # vi /etc/mysql/mysql.conf.d/mysqld.cnf [Debian/Ubuntu]
Přidejte následující řádek pod [mysqld]
sekce.
bind-address = 127.0.0.1
3. Zakázat LOCAL INFILE v MySQL
V rámci posílení zabezpečení je třeba deaktivovat local_infile k zamezení přístupu k základnímu souborovému systému z MySQL pomocí následující direktivy pod [mysqld]
sekce.
local-infile=0
4. Změňte výchozí port MYSQL
Port proměnná nastavuje číslo MySQL portu, který bude použit k naslouchání na TCP/IP připojeních. Výchozí číslo portu je 3306 ale můžete to změnit pod [mysqld] sekce, jak je znázorněno.
Port=5000
5. Povolit protokolování MySQL
Protokoly jsou jedním z nejlepších způsobů, jak porozumět tomu, co se děje na serveru, v případě jakýchkoli útoků můžete ze souborů protokolu snadno vidět jakékoli aktivity související s narušením. Logování MySQL můžete povolit přidáním následující proměnné pod [mysqld]
sekce.
log=/var/log/mysql.log
6. Nastavte příslušné oprávnění pro soubory MySQL
Ujistěte se, že máte nastavena příslušná oprávnění pro všechny soubory serveru mysql a datové adresáře. Soubor /etc/my.conf soubor by měl být zapisovatelný pouze do rootu. To zablokuje ostatním uživatelům měnit konfigurace databázového serveru.
# chmod 644 /etc/my.cnf
7. Smazat historii prostředí MySQL
Všechny příkazy, které spustíte v prostředí MySQL, jsou uloženy klientem mysql v souboru historie:~/.mysql_history . To může být nebezpečné, protože u všech uživatelských účtů, které vytvoříte, budou všechna uživatelská jména a hesla zadaná do shellu zaznamenána do souboru historie.
# cat /dev/null > ~/.mysql_history
8. Nespouštějte příkazy MySQL z příkazového řádku
Jak již víte, všechny příkazy, které napíšete na terminálu, jsou uloženy v souboru historie v závislosti na shellu, který používáte (například ~/.bash_history pro bash). Útočník, kterému se podaří získat přístup k tomuto souboru historie, snadno uvidí všechna zaznamenaná hesla.
Důrazně se nedoporučuje zadávat hesla na příkazový řádek, něco takového:
# mysql -u root -ppassword_
Když zkontrolujete poslední část souboru historie příkazů, uvidíte heslo zadané výše.
# history
Vhodný způsob připojení MySQL je.
# mysql -u root -p Enter password:
9. Definujte uživatele databáze specifické pro aplikaci
Ke každé aplikaci běžící na serveru udělte přístup pouze uživateli, který má na starosti databázi pro danou aplikaci. Pokud máte například web wordpress, vytvořte konkrétního uživatele pro databázi webu wordpress následovně.
# mysql -u root -p MariaDB [(none)]> CREATE DATABASE osclass_db; MariaDB [(none)]> CREATE USER 'osclassdmin'@'localhost' IDENTIFIED BY '[email protected]%!2'; MariaDB [(none)]> GRANT ALL PRIVILEGES ON osclass_db.* TO 'osclassdmin'@'localhost'; MariaDB [(none)]> FLUSH PRIVILEGES; MariaDB [(none)]> exit
a nezapomeňte vždy odstranit uživatelské účty, které již nespravují žádnou aplikační databázi na serveru.
10. Použijte další bezpečnostní pluginy a knihovny
MySQL obsahuje řadu bezpečnostních pluginů pro:ověřování pokusů klientů o připojení k serveru mysql, ověřování hesel a zabezpečení úložiště pro citlivé informace, které jsou všechny dostupné v bezplatné verzi.
Více najdete zde:https://dev.mysql.com/doc/refman/5.7/en/security-plugins.html
11. Pravidelně měňte hesla MySQL
Toto je běžná informace/aplikační/systémová bezpečnostní rada. Jak často to budete dělat, bude zcela záviset na vaší interní bezpečnostní politice. Může však zabránit „slídům“, kteří by mohli sledovat vaši aktivitu po dlouhou dobu, v získání přístupu k vašemu serveru mysql.
MariaDB [(none)]> USE mysql; MariaDB [(none)]> UPDATE user SET password=PASSWORD('YourPasswordHere') WHERE User='root' AND Host = 'localhost'; MariaDB [(none)]> FLUSH PRIVILEGES;
12. Pravidelně aktualizujte balíček serveru MySQL
Důrazně se doporučuje pravidelně aktualizovat balíčky mysql/mariadb, abyste udrželi krok s aktualizacemi zabezpečení a opravami chyb z úložiště dodavatele. Obvykle jsou balíčky ve výchozích repozitářích operačního systému zastaralé.
# yum update # apt update
Po provedení jakýchkoli změn na serveru mysql/mariadb vždy restartujte službu.
# systemctl restart mariadb #RHEL/CentOS # systemctl restart mysql #Debian/Ubuntu
To je vše! Rádi bychom od vás slyšeli prostřednictvím formuláře pro komentáře níže. Podělte se s námi o jakékoli bezpečnostní tipy pro MySQL/MariaDB, které ve výše uvedeném seznamu chybí.