MySQL to najpopularniejszy na świecie system baz danych typu open source i MariaDB (rozwidlenie MySQL) to najszybciej rozwijający się na świecie system baz danych typu open source. Po zainstalowaniu serwera MySQL jest on niepewny w swojej domyślnej konfiguracji, a zabezpieczenie go jest jednym z podstawowych zadań w ogólnym zarządzaniu bazą danych.
Przyczyni się to do wzmocnienia i zwiększenia ogólnego bezpieczeństwa serwerów z systemem Linux, ponieważ osoby atakujące zawsze skanują luki w dowolnej części systemu, a bazy danych były w przeszłości kluczowymi obszarami docelowymi. Typowym przykładem jest brutalne forsowanie hasła roota do bazy danych MySQL.
W tym przewodniku wyjaśnimy przydatne MySQL/MariaDB najlepsze praktyki bezpieczeństwa dla Linuksa.
1. Bezpieczna instalacja MySQL
Jest to pierwszy zalecany krok po zainstalowaniu 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 dla 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 lokalnego hosta.
- usuń konta anonimowych użytkowników i przetestuj bazę danych, do której domyślnie mają dostęp wszyscy użytkownicy, nawet anonimowi.
# mysql_secure_installation
Po uruchomieniu ustaw hasło roota i odpowiedz na serię pytań, wpisując [Tak/T ] i naciśnij [Enter] .
2. Powiąż serwer bazy danych z adresem pętli zwrotnej
Ta konfiguracja ograniczy dostęp z komputerów zdalnych, mówi serwerowi MySQL, aby akceptował tylko połączenia z hosta lokalnego. Możesz 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 pod [mysqld]
sekcja.
bind-address = 127.0.0.1
3. Wyłącz LOCAL INFILE w MySQL
W ramach wzmacniania zabezpieczeń musisz wyłączyć local_infile aby uniemożliwić dostęp do podstawowego systemu plików z poziomu MySQL za pomocą następującej dyrektywy w [mysqld]
sekcja.
local-infile=0
4. Zmień domyślny port MYSQL
Port zmienna 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 to zmienić w [mysqld] sekcja, jak pokazano.
Port=5000
5. Włącz rejestrowanie MySQL
Dzienniki to jeden z najlepszych sposobów na zrozumienie, co dzieje się na serwerze, w przypadku jakichkolwiek ataków można łatwo zobaczyć wszelkie działania związane z włamaniami z plików dziennika. Możesz włączyć logowanie MySQL, dodając następującą zmienną w [mysqld]
sekcja.
log=/var/log/mysql.log
6. Ustaw odpowiednie uprawnienia dla plików MySQL
Upewnij się, że masz ustawione odpowiednie uprawnienia dla wszystkich plików serwera mysql i katalogów danych. /etc/my.conf plik powinien być zapisywalny tylko dla roota. To blokuje 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, które wpisujesz na terminalu, są przechowywane w pliku historii, w zależności od używanej powłoki (na przykład ~/.bash_history na bash). Atakujący, któremu uda się uzyskać dostęp do tego pliku historii, może łatwo zobaczyć zapisane tam hasła.
Zdecydowanie nie zaleca się wpisywania haseł w wierszu poleceń, coś takiego:
# 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
Dla każdej aplikacji działającej na serwerze przyznaj dostęp tylko użytkownikowi, który odpowiada za 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 '[email protected]%!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. Użyj dodatkowych wtyczek i bibliotek bezpieczeństwa
MySQL zawiera szereg wtyczek zabezpieczających do:uwierzytelniania prób połączenia przez klientów z serwerem mysql, walidacji hasła i zabezpieczania przechowywania poufnych informacji, które są dostępne w darmowej 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 powszechna porada dotycząca bezpieczeństwa aplikacji/aplikacji. To, jak często będziesz to robić, będzie całkowicie zależeć od Twojej wewnętrznej polityki bezpieczeństwa. Może jednak uniemożliwić „śledzącym”, którzy mogli śledzić Twoją aktywność przez długi czas, przed uzyskaniem 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 MySQL Server
Zdecydowanie zaleca się regularne aktualizowanie pakietów mysql/mariadb, aby być na bieżąco z aktualizacjami bezpieczeństwa i poprawkami błędów z repozytorium dostawcy. Zwykle pakiety w domyślnych repozytoriach systemu operacyjnego są nieaktualne.
# yum update # apt update
Po wprowadzeniu jakichkolwiek zmian na serwerze mysql/mariadb, zawsze uruchom ponownie usługę.
# systemctl restart mariadb #RHEL/CentOS # systemctl restart mysql #Debian/Ubuntu
To wszystko! Chętnie poznamy Twoją opinię za pośrednictwem poniższego formularza komentarzy. Podziel się z nami wskazówkami dotyczącymi bezpieczeństwa MySQL/MariaDB, których brakuje na powyższej liście.