12 MySQL/MariaDB saugos geriausios praktikos, skirtos Linux


MySQL yra populiariausia pasaulyje atvirojo kodo duomenų bazių sistema, o MariaDB (MySQL šakutė) yra greičiausiai pasaulyje auganti atvirojo kodo duomenų bazių sistema. Įdiegus MySQL serverį, jis yra nesaugus pagal numatytąją konfigūraciją, o jo apsauga yra viena iš esminių bendro duomenų bazių valdymo užduočių.

Taip pat skaitykite: išmokite MySQL/MariaDB pradedantiesiems – 1 dalis

Tai prisidės prie bendro Linux serverio saugumo stiprinimo ir padidinimo, nes užpuolikai visada nuskaito pažeidžiamumą bet kurioje sistemos dalyje, o duomenų bazės anksčiau buvo pagrindinės tikslinės sritys. Dažnas pavyzdys yra žiaurus MySQL duomenų bazės root slaptažodžio perkėlimas.

Šiame vadove paaiškinsime naudingą MySQL/MariaDB saugos praktiką, skirtą Linux.

1. Saugus MySQL diegimas

Tai pirmas rekomenduojamas žingsnis po MySQL serverio įdiegimo siekiant apsaugoti duomenų bazės serverį. Šis scenarijus padeda pagerinti jūsų MySQL serverio saugumą, prašydamas:

  • nustatykite root paskyros slaptažodį, jei jo nenustatėte diegdami.
  • išjunkite nuotolinį root vartotojo prisijungimą pašalindami root paskyras, kurias galima pasiekti ne iš vietinio pagrindinio kompiuterio.
  • pašalinti anoniminių vartotojų paskyras ir išbandyti duomenų bazę, kurią pagal numatytuosius nustatymus gali pasiekti visi vartotojai, net ir anoniminiai.
mysql_secure_installation

Paleidę, nustatykite pagrindinį slaptažodį ir atsakykite į klausimus įvesdami [Taip/Y] ir paspauskite [Enter].

2. Susieti duomenų bazės serverį su atgalinio ryšio adresu

Ši konfigūracija apribos prieigą iš nuotolinių mašinų, ji nurodo MySQL serveriui priimti ryšius tik iš vietinio pagrindinio kompiuterio. Jį galite nustatyti pagrindiniame konfigūracijos faile.

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

Pridėkite šią eilutę žemiau esančioje skiltyje [mysqld].

bind-address = 127.0.0.1

3. MySQL išjunkite LOCAL INFILE

Siekiant sustiprinti saugumą, turite išjungti local_infile, kad neleistumėte pasiekti pagrindinės failų sistemos iš MySQL, naudodami šią direktyvą, esančią skyriuje [mysqld].

local-infile=0

4. Pakeiskite MYSQL numatytąjį prievadą

Kintamasis Portas nustato MySQL prievado numerį, kuris bus naudojamas TCP/IP ryšiams klausytis. Numatytasis prievado numeris yra 3306, bet galite jį pakeisti skiltyje [mysqld], kaip parodyta.

Port=5000

5. Įjunkite MySQL registravimą

Žurnalai yra vienas geriausių būdų suprasti, kas vyksta serveryje, bet kokių atakų atveju iš žurnalo failų galite lengvai pamatyti bet kokią su įsibrovimu susijusią veiklą. MySQL registravimą galite įjungti įtraukdami šį kintamąjį prie skilties [mysqld].

log=/var/log/mysql.log

6. Nustatykite atitinkamą leidimą MySQL failams

Įsitikinkite, kad turite atitinkamus leidimus visiems mysql serverio failams ir duomenų katalogams. Failas /etc/my.conf turėtų būti rašomas tik root. Tai neleidžia kitiems vartotojams keisti duomenų bazės serverio konfigūracijų.

chmod 644 /etc/my.cnf

7. Ištrinkite MySQL apvalkalo istoriją

Visas MySQL apvalkale vykdomas komandas mysql klientas saugo istorijos faile: ~/.mysql_history. Tai gali būti pavojinga, nes visų sukurtų vartotojų abonementų visi naudotojų vardai ir slaptažodžiai, įvesti apvalkale, bus įrašyti į istorijos failą.

cat /dev/null > ~/.mysql_history

8. Nevykdykite MySQL komandų iš komandų eilutės

Kaip jau žinote, visos komandos, kurias įvedate terminale, yra saugomos istorijos faile, atsižvelgiant į naudojamą apvalkalą (pvz., ~/.bash_history bash). Užpuolikas, kuriam pavyksta gauti prieigą prie šio istorijos failo, gali lengvai pamatyti visus ten įrašytus slaptažodžius.

Labai nerekomenduojama įvesti slaptažodžių komandinėje eilutėje, maždaug taip:

mysql -u root -ppassword_

Kai patikrinsite paskutinę komandų istorijos failo skiltį, pamatysite aukščiau įvestą slaptažodį.

history 

Tinkamas būdas prisijungti prie MySQL yra.

mysql -u root -p
Enter password:

9. Apibrėžkite konkrečios programos duomenų bazės vartotojus

Kiekvienai serveryje veikiančiai programai suteikite prieigą tik vartotojui, kuris yra atsakingas už konkrečios programos duomenų bazę. Pavyzdžiui, jei turite „WordPress“ svetainę, sukurkite konkretų „WordPress“ svetainės duomenų bazės vartotoją, kaip nurodyta toliau.

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

ir nepamirškite visada pašalinti vartotojų abonementus, kurie nebetvarko jokios taikomųjų programų duomenų bazės serveryje.

10. Naudokite papildomus saugos papildinius ir bibliotekas

„MySQL“ apima daugybę saugos įskiepių, skirtų: autentifikuoti klientų bandymus prisijungti prie „mysql“ serverio, patvirtinti slaptažodį ir apsaugoti neskelbtinos informacijos saugyklą. Visa tai yra nemokamoje versijoje.

Daugiau galite rasti čia: https://dev.mysql.com/doc/refman/5.7/en/security-plugins.html

11. Reguliariai keiskite MySQL slaptažodžius

Tai yra įprastas informacijos/programos/sistemos saugumo patarimas. Kaip dažnai tai darysite, visiškai priklausys nuo jūsų vidaus saugumo politikos. Tačiau tai gali neleisti „šniukšteliams“, kurie galėjo stebėti jūsų veiklą ilgą laiką, pasiekti jūsų mysql serverio.

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

12. Reguliariai atnaujinkite MySQL serverio paketą

Labai rekomenduojama reguliariai atnaujinti mysql/mariadb paketus, kad galėtumėte neatsilikti nuo saugos naujinimų ir klaidų pataisų iš tiekėjo saugyklos. Paprastai paketai numatytosiose operacinės sistemos saugyklose yra pasenę.

yum update
apt update

Atlikę bet kokius mysql/mariadb serverio pakeitimus, visada paleiskite paslaugą iš naujo.

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

Taip pat skaitykite: 15 naudingų MySQL/MariaDB našumo derinimo ir optimizavimo patarimų

Tai viskas! Mums patinka išgirsti iš jūsų atsiliepimus naudodami toliau pateiktą komentarų formą. Pasidalykite su mumis visais MySQL/MariaDB saugos patarimais, kurių trūksta aukščiau esančiame sąraše.