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.