Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Zabezpieczanie serwera MySQL

MySQL

MySQL to system zarządzania relacyjnymi bazami danych typu open source. Ten przewodnik pokaże Ci, jak zabezpieczyć i audytować serwer MySQL. Nazwa jest kombinacją „My”, imienia córki współzałożyciela Michaela Wideniusa, oraz „SQL”, skrótu od Structured Query Language.

Zanim zaczniesz

  1. Upewnij się, że postępujesz zgodnie z przewodnikami Wprowadzenie i zabezpieczenie serwera. Upewnij się, że nazwa hosta Linode jest ustawiona.

    Sprawdź nazwę hosta Linode. Pierwsze polecenie powinno pokazywać Twoją krótką nazwę hosta, a drugie powinno pokazywać w pełni kwalifikowaną nazwę domeny (FQDN).

    hostname
    hostname -f
    
    Uwaga Jeśli masz zarejestrowaną nazwę domeny dla swojej witryny, dodaj domenę do serwera Linode, na którym planujesz zainstalować stos LAMP. Jeśli nie masz zarejestrowanej nazwy domeny, zastąp example.com z adresem IP serwera Linode w poniższych instrukcjach.
  2. Zaktualizuj swój system:

    sudo yum update
    
    Uwaga Ten przewodnik jest napisany dla użytkownika innego niż root. Polecenia wymagające podwyższonych uprawnień są poprzedzone przedrostkiem sudo . Jeśli nie znasz sudo polecenie, możesz sprawdzić nasz przewodnik po użytkownikach i grupach.
  3. Aby zabezpieczyć i kontrolować MySQL, musisz mieć serwer Linux z MySQL Server usługi uruchomione. Aby uzyskać informacje na temat instalacji MySQL, zobacz Zainstaluj MySQL

    Uwaga Instrukcje w tym przewodniku są oparte na Ubuntu 18.04, chociaż wszystkie kroki są niezależne od dystrybucji, z wyjątkiem nazw pakietów i menedżerów pakietów.

Korzystanie z bezpiecznego instalatora MySQL

Pakiet mysql-server jest wstępnie skonfigurowany z narzędziem o nazwie mysql_secure_installation który służy do konfigurowania bezpiecznego punktu początkowego dla serwera MySQL, usuwając anonimowych użytkowników i umożliwiając określenie żądanej polityki siły hasła.

mysql_secure_installation to skrypt powłoki dostępny w systemach Unix, który umożliwia zabezpieczenie instalacji MySQL poprzez:

  • ustaw hasło do kont root
  • usuń konta root, które są dostępne spoza lokalnego hosta
  • usuń konta anonimowych użytkowników
  • usuń testową bazę danych, do której domyślnie mają dostęp anonimowi użytkownicy

Rozpocznij proces bezpieczeństwa, uruchamiając to narzędzie natychmiast po zainstalowaniu serwera mysql.

  1. Wywołaj narzędzie, uruchamiając następujące polecenie:

     sudo mysql_secure_installation
    
  2. Rozpoczyna się proces instalacji, a narzędzie wyświetla monit o określenie, czy chcesz włączyć wtyczkę sprawdzania poprawności hasła, która służy do testowania haseł i zwiększania bezpieczeństwa. Zaleca się włączenie tej funkcji.

    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. Po włączeniu wtyczki hasła określ zasady sprawdzania poprawności hasła w oparciu o poziom siły żądanych haseł.

    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. Usuń anonimowych użytkowników. Jest to ważna opcja bezpieczeństwa, ponieważ atakujący mogą wykorzystać anonimowych użytkowników, aby uzyskać dostęp do serwera bazy danych.

    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. Wyłącz zdalne logowanie jako root, jest to niezwykle ważna konfiguracja bezpieczeństwa, ponieważ uniemożliwia atakującym zdalne uwierzytelnianie się na serwerze MySQL jako root lub przeprowadzanie ataków typu brute-force na hasło. Zdalne uwierzytelnianie można również całkowicie wyłączyć, przyjrzymy się, jak to zrobić w następnej sekcji.

    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. Usuń testową bazę danych utworzoną podczas procesu instalacji mysql-server, ta baza danych jest tworzona do celów testowych, jako dobra praktyka zaleca się usunięcie tej bazy danych.

    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. Załaduj ponownie tabele uprawnień, aby upewnić się, że wszystkie zmiany zostały zastosowane i obowiązują.

    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!
    Masz teraz bezpieczną bazę do pracy, w następnej sekcji znajdziesz instrukcje zmiany domyślnego głównego nazwa użytkownika i hasło.

Modyfikowanie użytkownika „root”

Domyślnie serwer MySQL jest predefiniowany z superuser/admin konto, które ma dostęp do wszystkich uprawnień i funkcjonalności baz danych oraz użytkowników baz danych. Biorąc pod uwagę tę niezrównaną kontrolę i dostęp, ważne jest, aby zablokować i zabezpieczyć konto root, ponieważ atakujący zwykle celują w konto root na serwerze MySQL, ponieważ może ono zapewnić pełny dostęp do baz danych i użytkowników baz danych.

Pierwszym krokiem do zabezpieczenia użytkownika „root” jest zmiana nazwy użytkownika z root do czegoś bardziej nieustępliwego, celem jest sprawienie, aby nazwa użytkownika root była tak trudna do odgadnięcia lub brutalna dla atakujących. Po czym zaleca się również zmianę root hasło do konta regularnie jako dobra praktyka.

  1. Zaloguj się do serwera MySQL za pomocą następującego polecenia:

     sudo mysql -u root
    
  2. Zmień nazwę użytkownika konta „root”, uruchamiając następujące zapytanie:

     rename user 'root'@'localhost' to '<new-username>'@'localhost';
    
  3. Zmień root hasło do konta na coś silnego i trudnego do odgadnięcia, zaleca się użycie generatora haseł. Jeśli włączyłeś wtyczkę weryfikacji hasła podczas procesu bezpiecznej instalacji, musisz podać hasło, które spełnia wymagania zasad pod względem siły.

     ALTER USER 'example_username'@'localhost' IDENTIFIED BY '<new-password>';
    
  4. Załaduj ponownie tabelę uprawnień, aby upewnić się, że wszystkie zmiany zostały zapisane i aktywowane, uruchamiając następujące polecenie:

     flush privileges;
    
  5. Aby potwierdzić, czy root nazwa użytkownika i hasło zostały zmienione, uruchom następujące zapytanie:

     use mysql;
     select user,host,authentication_string from mysql.user;
    

Spowoduje to wyświetlenie tabel użytkowników przechowywanych w bazie danych mysql i powinno odzwierciedlać wprowadzone zmiany.

+------------------+-----------+-------------------------------------------+
| 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)

Tworzenie nowego użytkownika

Dobrą praktyką w zakresie bezpieczeństwa jest koncepcja podziału według obowiązków lub ról. Oznacza to, że dla każdej bazy danych lub aplikacji korzystającej z bazy danych utwórz nowego użytkownika, który ma uprawnienia CRUD dla tej konkretnej bazy danych. Gwarantuje to, że w dowolnym momencie tylko jeden użytkownik ma dostęp do jednej bazy danych na raz, a użytkownicy nie mogą uzyskać dostępu do innych baz danych.

  1. Utwórz Test bazy danych, uruchamiając następujące zapytanie w MYSQL:

     create database Test;
    
  2. Utwórz użytkownika odpowiedzialnego za zarządzanie tą testową bazą danych:

     CREATE USER '<username>'@'localhost' IDENTIFIED BY '<password>';
    
  3. Przypisz użytkownikowi odpowiednie uprawnienia CRUD do Test baza danych:

     GRANT SELECT,UPDATE,DELETE ON Test.* TO '<username>'@'localhost';
    
  4. Należy pamiętać, że te uprawnienia mają zastosowanie tylko do Test bazy danych, jeśli tworzysz użytkownika dla aplikacji, takiej jak phpMyAdmin , musisz zapewnić użytkownikowi root uprawnienia.

  5. Jeśli zdecydujesz się usunąć konkretnego użytkownika, uruchom następujące zapytanie:

     drop user '<username>'@'localhost';
    
  6. Załaduj ponownie tabelę uprawnień, aby upewnić się, że wprowadzone zmiany zostały zastosowane i aktywowane, uruchamiając następujące zapytanie:

     flush privileges;
    

Niestandardowa konfiguracja MySQL

Możesz teraz ustawić bezpieczną niestandardową konfigurację dla MySQL, która zapewnia dodatkowe opcje konfiguracji bezpieczeństwa.

  1. Globalny plik konfiguracyjny MySQL znajduje się w /etc/mysql/my.cnf , wszystkie niestandardowe konfiguracje globalne należy ustawić w pliku konfiguracyjnym.

  2. Niestandardowa konfiguracja musi być określona dla mysqld (demon MySQL), opcje wyświetlane na obrazie to niestandardowe konfiguracje bezpieczeństwa.

  3. Po dodaniu niestandardowych konfiguracji musisz ponownie uruchomić mysql usługi, aby zapewnić zastosowanie wszystkich zmian.

     systemctl restart mysql
    

Kontrola bezpieczeństwa MySQL

Możesz teraz kontrolować bezpieczeństwo serwera MySQL za pomocą narzędzia o nazwie MySAT. MySAT wykonuje kilka testów w celu analizy konfiguracji bazy danych i zasad bezpieczeństwa. MySAT pomaga ocenić, a tym samym zwiększyć bezpieczeństwo bazy danych MySQL. MySAT to prosty skrypt SQL, łatwy do zrozumienia i utrzymania. Wyniki MySAT są wyprowadzane w formacie HTML.

  1. Sklonuj repozytorium MySAT Github, uruchamiając następujące polecenie:

     git clone https://github.com/meob/MySAT.git
    
  2. Po sklonowaniu katalogu przejdź do katalogu MySAT, gdzie mysat.sql znajduje się plik i jest używany w połączeniu z serwerem MySQL do wyprowadzania wyników do pliku MySAT.htm plik.

  3. Sprawdź bezpieczeństwo, uruchamiając następujące polecenie:

     mysql --user=<root-user> -p<password> --skip-column-names -f < mysat.sql > MySAT.htm
    
  4. Jak wskazano, MySAT wymaga uprawnień administratora do MySQL, aby uruchomić wymagane testy, po uruchomieniu polecenia generowany jest plik MySAT.htm, skopiuj plik MySAT.htm i mysat.css plik na serwer Apache lub NGINX lub pobierz je lokalnie za pomocą scp , abyś mógł przeanalizować wyniki audytu.

  5. Wyniki są sformatowane w prostym do odczytania i zrozumienia formacie, w którym konfiguracje są sprawdzane, a wyniki są kodowane kolorami na podstawie ich bieżącej konfiguracji i tego, jak wpływa ona na bezpieczeństwo serwera mysql. Na przykład nieudana kontrola konfiguracji jest oznaczona kolorem pomarańczowym, a pomyślna kontrola jest oznaczona kolorem zielonym.

  6. Raport z audytu ujawnia, jakie konfiguracje należy zmienić lub zmodyfikować, i przedstawia obraz najwyższego poziomu ogólnego bezpieczeństwa serwera MySQL.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Wstawianie zbiorcze z SQLAlchemy ORM

  2. PyMySQL nie może połączyć się z MySQL na hoście lokalnym

  3. kolumna aktualizacji mysql z wartością z innej tabeli

  4. jak usunąć zduplikowane wiersze z tabeli w mysql

  5. Jak utworzyć tabelę przestawną w MySQL