sql >> Databáze >  >> RDS >> Mysql

Zabezpečení serveru MySQL

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

  1. 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.
  2. 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áte sudo můžete se podívat na naši příručku Uživatelé a skupiny.
  3. 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 MySQL

    Pozná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.

  1. Vyvolejte nástroj spuštěním následujícího příkazu:

     sudo mysql_secure_installation
    
  2. 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

  3. 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

  4. 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

  5. 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

  6. 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

  7. Znovu načtěte tabulky oprávnění, abyste se ujistili, že všechny změny budou použity a v platnosti.

    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!
    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.

Ú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.

  1. Přihlaste se k serveru MySQL pomocí následujícího příkazu:

     sudo mysql -u root
    
  2. 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';
    
  3. 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>';
    
  4. 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;
    
  5. 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.

  1. Vytvořte Test databázi spuštěním následujícího dotazu v rámci MYSQL:

     create database Test;
    
  2. Vytvořte uživatele odpovědného za správu této testovací databáze:

     CREATE USER '<username>'@'localhost' IDENTIFIED BY '<password>';
    
  3. 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';
    
  4. 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 je phpMyAdmin , musíte uživateli poskytnout root oprávnění.

  5. Pokud se rozhodnete odstranit konkrétního uživatele, spusťte následující dotaz:

     drop user '<username>'@'localhost';
    
  6. 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í.

  1. 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.

  2. 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()>

  3. 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.

  1. Naklonujte úložiště MySAT Github spuštěním následujícího příkazu:

     git clone https://github.com/meob/MySAT.git
    
  2. 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ů do MySAT.htm soubor.

  3. 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
    
  4. 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()>

  5. 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.

  6. 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.


  1. Jak make_date() funguje v PostgreSQL

  2. Vložit text s jednoduchými uvozovkami v PostgreSQL

  3. Přírůstek identity sloupce SQL Server 2012 skok z 6 na 1000+ u 7. položky

  4. Tři hlavní důvody, proč se lidé stěhují do SaaS