12 Cele mai bune practici de securitate MySQL/MariaDB pentru Linux


MySQL este cel mai popular sistem de baze de date open source din lume, iar MariaDB (o bifurcație a MySQL) este sistemul de baze de date open source cu cea mai rapidă creștere din lume. După instalarea serverului MySQL, acesta este nesigur în configurația sa implicită, iar securizarea acestuia este una dintre sarcinile esențiale în gestionarea generală a bazelor de date.

Citiți și: Învățați MySQL/MariaDB pentru începători – Partea 1

Acest lucru va contribui la întărirea și creșterea securității generale a serverului Linux, deoarece atacatorii scanează întotdeauna vulnerabilități în orice parte a unui sistem, iar bazele de date au fost în trecut zone-țintă cheie. Un exemplu comun este forțarea brută a parolei root pentru baza de date MySQL.

În acest ghid, vom explica cele mai bune practici utile de securitate MySQL/MariaDB pentru Linux.

1. Instalare MySQL securizată

Acesta este primul pas recomandat după instalarea serverului MySQL, spre securizarea serverului de baze de date. Acest script facilitează îmbunătățirea securității serverului dvs. MySQL, cerându-vă să:

  • setați o parolă pentru contul root, dacă nu ați setat-o în timpul instalării.
  • dezactivați autentificarea utilizatorului root de la distanță eliminând conturile root care sunt accesibile din afara gazdei locale.
  • eliminați conturile de utilizator anonim și testați baza de date care poate fi accesată implicit de toți utilizatorii, chiar și de utilizatorii anonimi.
mysql_secure_installation

După ce o rulați, setați parola de root și răspundeți la seria de întrebări introducând [Da/Y] și apăsați pe [Enter].

2. Legați serverul bazei de date la adresa Loopback

Această configurație va restricționa accesul de la mașinile de la distanță, îi spune serverului MySQL să accepte doar conexiuni din interiorul localhost. Îl puteți seta în fișierul de configurare principal.

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

Adăugați următoarea linie de mai jos în secțiunea [mysqld].

bind-address = 127.0.0.1

3. Dezactivați LOCAL INFILE în MySQL

Ca parte a întăririi securității, trebuie să dezactivați local_infile pentru a preveni accesul la sistemul de fișiere de bază din MySQL utilizând următoarea directivă din secțiunea [mysqld].

local-infile=0

4. Schimbați portul implicit MYSQL

Variabila Port stabilește numărul portului MySQL care va fi folosit pentru a asculta pe conexiunile TCP/IP. Numărul de port implicit este 3306, dar îl puteți modifica în secțiunea [mysqld], așa cum se arată.

Port=5000

5. Activați înregistrarea MySQL

Jurnalele sunt una dintre cele mai bune modalități de a înțelege ce se întâmplă pe un server, în cazul oricăror atacuri, puteți vedea cu ușurință orice activități legate de intruziune din fișierele jurnal. Puteți activa înregistrarea MySQL adăugând următoarea variabilă în secțiunea [mysqld].

log=/var/log/mysql.log

6. Setați permisiunea corespunzătoare pentru fișierele MySQL

Asigurați-vă că aveți permisiunile adecvate setate pentru toate fișierele serverului mysql și directoarele de date. Fișierul /etc/my.conf ar trebui să poată fi scris numai la root. Acest lucru blochează alți utilizatori să modifice configurațiile serverului de baze de date.

chmod 644 /etc/my.cnf

7. Ștergeți Istoricul MySQL Shell

Toate comenzile pe care le executați pe shell-ul MySQL sunt stocate de clientul mysql într-un fișier istoric: ~/.mysql_history. Acest lucru poate fi periculos, deoarece pentru orice conturi de utilizator pe care le veți crea, toate numele de utilizator și parolele introduse pe shell vor fi înregistrate în fișierul istoric.

cat /dev/null > ~/.mysql_history

8. Nu rulați comenzi MySQL din linia de comandă

După cum știți deja, toate comenzile pe care le introduceți pe terminal sunt stocate într-un fișier istoric, în funcție de shell-ul pe care îl utilizați (de exemplu ~/.bash_history pentru bash). Un atacator care reușește să obțină acces la acest fișier istoric poate vedea cu ușurință orice parole înregistrate acolo.

Nu este recomandat să tastați parole pe linia de comandă, ceva de genul acesta:

mysql -u root -ppassword_

Când verificați ultima secțiune a fișierului istoric de comenzi, veți vedea parola introdusă mai sus.

history 

Modul potrivit de a conecta MySQL este.

mysql -u root -p
Enter password:

9. Definiți utilizatorii bazei de date specifice aplicației

Pentru fiecare aplicație care rulează pe server, acordați acces numai unui utilizator care este responsabil de o bază de date pentru o anumită aplicație. De exemplu, dacă aveți un site wordpress, creați un anumit utilizator pentru baza de date a site-ului wordpress după cum urmează.

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 nu uitați să eliminați întotdeauna conturile de utilizator care nu mai gestionează nicio bază de date de aplicații de pe server.

10. Utilizați pluginuri și biblioteci de securitate suplimentare

MySQL include o serie de plugin-uri de securitate pentru: autentificarea încercărilor clienților de a se conecta la serverul mysql, validarea parolei și securizarea stocării pentru informații sensibile, toate disponibile în versiunea gratuită.

Puteți găsi mai multe aici: https://dev.mysql.com/doc/refman/5.7/en/security-plugins.html

11. Schimbați parolele MySQL în mod regulat

Acesta este un sfat comun de securitate pentru informații/aplicații/sistem. Cât de des faceți acest lucru va depinde în întregime de politica dvs. de securitate internă. Cu toate acestea, poate împiedica „snoopers” care v-ar fi urmărit activitatea pe o perioadă lungă de timp, să obțină acces la serverul dvs. mysql.

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

12. Actualizați în mod regulat pachetul MySQL Server

Este foarte recomandat să actualizați pachetele mysql/mariadb în mod regulat pentru a ține pasul cu actualizările de securitate și remedierea erorilor, din depozitul furnizorului. În mod normal, pachetele din depozitele implicite ale sistemului de operare sunt învechite.

yum update
apt update

După efectuarea oricăror modificări la serverul mysql/mariadb, reporniți întotdeauna serviciul.

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

Citiți și: 15 sfaturi utile de optimizare și optimizare a performanței MySQL/MariaDB

Asta e tot! Ne place să auzim de la tine prin formularul de comentarii de mai jos. Împărtășiți cu noi orice sfaturi de securitate MySQL/MariaDB care lipsesc din lista de mai sus.