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

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

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.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Sprawdź, czy tabela MySQL istnieje bez użycia składni select from?

  2. Ściągawka w formacie daty MySQL

  3. Zapytania hierarchiczne w MySQL

  4. JSON_LENGTH() – Zwraca długość dokumentu JSON w MySQL

  5. Połącz wiele wierszy podrzędnych w jeden wiersz MYSQL