Wyszukiwanie w witrynie

12 najlepszych praktyk dotyczących bezpieczeństwa MySQL/MariaDB dla systemu Linux


MySQL to najpopularniejszy na świecie system baz danych typu open source, a MariaDB (rozwidlenie MySQL) to najszybciej rozwijający się system baz danych typu open source na świecie. Po zainstalowaniu serwera MySQL w swojej domyślnej konfiguracji jest on niepewny, a zabezpieczenie go jest jednym z podstawowych zadań w ogólnym zarządzaniu bazami danych.

Przeczytaj także: Poznaj MySQL/MariaDB dla początkujących – część 1

Przyczyni się to do wzmocnienia i zwiększenia ogólnego bezpieczeństwa serwerów Linux, ponieważ osoby atakujące zawsze skanują luki w zabezpieczeniach w dowolnej części systemu, a bazy danych były w przeszłości kluczowymi obszarami docelowymi. Typowym przykładem jest brutalne wymuszanie hasła roota do bazy danych MySQL.

W tym przewodniku wyjaśnimy przydatne najlepsze praktyki bezpieczeństwa MySQL/MariaDB w systemie Linux.

1. Bezpieczna instalacja MySQL

Jest to pierwszy zalecany krok po instalacji serwera MySQL, w kierunku zabezpieczenia serwera bazy danych. Ten skrypt ułatwia poprawę bezpieczeństwa Twojego serwera MySQL, prosząc Cię o:

  • ustaw hasło do konta root, jeśli nie ustawiłeś go podczas instalacji.
  • wyłącz zdalne logowanie użytkownika root, usuwając konta root, które są dostępne spoza hosta lokalnego.
  • usuń konta użytkowników anonimowych i przetestuj bazę danych, do której domyślnie dostęp mają wszyscy użytkownicy, nawet anonimowi.
mysql_secure_installation

Po uruchomieniu ustaw hasło roota i odpowiedz na serię pytań, wpisując [Tak/T] i wciskając [Enter].

2. Powiąż serwer bazy danych z adresem pętli zwrotnej

Ta konfiguracja ograniczy dostęp ze zdalnych komputerów, informuje serwer MySQL, aby akceptował tylko połączenia z hosta lokalnego. Można to ustawić w głównym pliku konfiguracyjnym.

vi /etc/my.cnf	                   [RHEL/CentOS]	
vi /etc/mysql/my.conf                    [Debian/Ubuntu] 
OR
vi /etc/mysql/mysql.conf.d/mysqld.cnf    [Debian/Ubuntu] 

Dodaj następujący wiersz poniżej w sekcji [mysqld].

bind-address = 127.0.0.1

3. Wyłącz LOKALNY PLIK w MySQL

W ramach zwiększania bezpieczeństwa musisz wyłączyć local_infile, aby uniemożliwić dostęp do bazowego systemu plików z poziomu MySQL, korzystając z poniższej dyrektywy w sekcji [mysqld].

local-infile=0

4. Zmień domyślny port MYSQL

Zmienna Port ustawia numer portu MySQL, który będzie używany do nasłuchiwania połączeń TCP/IP. Domyślny numer portu to 3306, ale możesz go zmienić w sekcji [mysqld], jak pokazano.

Port=5000

5. Włącz rejestrowanie MySQL

Dzienniki to jeden z najlepszych sposobów zrozumienia tego, co dzieje się na serwerze. W przypadku jakichkolwiek ataków, z plików dziennika można łatwo sprawdzić wszelkie działania związane z włamaniami. Możesz włączyć rejestrowanie MySQL, dodając następującą zmienną w sekcji [mysqld].

log=/var/log/mysql.log

6. Ustaw odpowiednie uprawnienia dla plików MySQL

Upewnij się, że masz ustawione odpowiednie uprawnienia dla wszystkich plików i katalogów danych serwera mysql. Plik /etc/my.conf powinien nadawać się do zapisu tylko dla roota. Blokuje to innym użytkownikom możliwość zmiany konfiguracji serwera bazy danych.

chmod 644 /etc/my.cnf

7. Usuń historię powłoki MySQL

Wszystkie polecenia wykonywane w powłoce MySQL są przechowywane przez klienta mysql w pliku historii: ~/.mysql_history. Może to być niebezpieczne, ponieważ dla każdego konta użytkownika, które utworzysz, wszystkie nazwy użytkowników i hasła wpisane w powłoce zostaną zapisane w pliku historii.

cat /dev/null > ~/.mysql_history

8. Nie uruchamiaj poleceń MySQL z wiersza poleceń

Jak już wiesz, wszystkie polecenia wpisywane na terminalu są przechowywane w pliku historii, w zależności od używanej powłoki (na przykład ~/.bash_history w przypadku basha). Osoba atakująca, której uda się uzyskać dostęp do tego pliku historii, może z łatwością zobaczyć zapisane w nim hasła.

Zdecydowanie nie zaleca się wpisywania haseł w wierszu poleceń, na przykład tak:

mysql -u root -ppassword_

Kiedy sprawdzisz ostatnią sekcję pliku historii poleceń, zobaczysz hasło wpisane powyżej.

history 

Właściwym sposobem połączenia MySQL jest.

mysql -u root -p
Enter password:

9. Zdefiniuj użytkowników bazy danych specyficznych dla aplikacji

Do każdej aplikacji działającej na serwerze nadaj dostęp tylko użytkownikowi, który zarządza bazą danych dla danej aplikacji. Na przykład, jeśli masz witrynę WordPress, utwórz określonego użytkownika dla bazy danych witryny WordPress w następujący sposób.

mysql -u root -p
MariaDB [(none)]> CREATE DATABASE osclass_db;
MariaDB [(none)]> CREATE USER 'osclassdmin'@'localhost' IDENTIFIED BY 'osclass@dmin%!2';
MariaDB [(none)]> GRANT ALL PRIVILEGES ON osclass_db.* TO 'osclassdmin'@'localhost';
MariaDB [(none)]> FLUSH PRIVILEGES;
MariaDB [(none)]> exit

i pamiętaj, aby zawsze usuwać konta użytkowników, które nie zarządzają już żadną bazą danych aplikacji na serwerze.

10. Korzystaj z dodatkowych wtyczek i bibliotek zabezpieczających

MySQL zawiera szereg wtyczek zabezpieczających do: uwierzytelniania prób połączenia się klientów z serwerem mysql, sprawdzania poprawności hasła i zabezpieczania przechowywania wrażliwych informacji, które są dostępne w bezpłatnej wersji.

Więcej znajdziesz tutaj: https://dev.mysql.com/doc/refman/5.7/en/security-plugins.html

11. Regularnie zmieniaj hasła MySQL

Jest to częsta rada dotycząca bezpieczeństwa informacji/aplikacji/systemu. To, jak często będziesz to robić, będzie całkowicie zależeć od Twojej polityki bezpieczeństwa wewnętrznego. Może jednak uniemożliwić „szpiegom”, którzy mogli śledzić Twoją aktywność przez długi czas, uzyskanie dostępu do Twojego serwera mysql.

MariaDB [(none)]> USE mysql;
MariaDB [(none)]> UPDATE user SET password=PASSWORD('YourPasswordHere') WHERE User='root' AND Host = 'localhost';
MariaDB [(none)]> FLUSH PRIVILEGES;

12. Regularnie aktualizuj pakiet serwera MySQL

Zdecydowanie zaleca się regularne aktualizowanie pakietów mysql/mariadb, aby być na bieżąco z aktualizacjami zabezpieczeń i poprawkami błędów z repozytorium dostawcy. Zwykle pakiety w domyślnych repozytoriach systemu operacyjnego są nieaktualne.

yum update
apt update

Po dokonaniu jakichkolwiek zmian na serwerze mysql/mariadb zawsze należy ponownie uruchomić usługę.

systemctl restart mariadb		#RHEL/CentOS
systemctl restart mysql		#Debian/Ubuntu

Przeczytaj także: 15 przydatnych wskazówek dotyczących dostrajania i optymalizacji wydajności MySQL/MariaDB

To wszystko! Chętnie wysłuchamy Twojej opinii za pośrednictwem poniższego formularza komentarza. Podziel się z nami wszelkimi wskazówkami dotyczącymi bezpieczeństwa MySQL/MariaDB, których brakuje na powyższej liście.