12 MySQL/MariaDB drošības paraugprakse Linux


MySQL ir pasaulē populārākā atvērtā pirmkoda datu bāzu sistēma, un MariaDB (MySQL dakša) ir pasaulē visstraujāk augošā atklātā pirmkoda datu bāzu sistēma. Pēc MySQL servera instalēšanas tā ir nedroša pēc noklusējuma konfigurācijas, un tā nodrošināšana ir viens no galvenajiem uzdevumiem vispārējā datu bāzes pārvaldībā.

Tas veicinās vispārējās Linux serveru drošības sacietēšanu un uzlabošanu, jo uzbrucēji vienmēr skenē ievainojamību jebkurā sistēmas daļā, un datubāzes agrāk ir bijušas galvenās mērķa jomas. Izplatīts piemērs ir MySQL datu bāzes saknes paroles pilnīga piespiešana.

Šajā rokasgrāmatā mēs izskaidrosim noderīgu MySQL/MariaDB drošības paraugpraksi Linux.

1. Droša MySQL instalēšana

Šis ir pirmais ieteicamais solis pēc MySQL servera instalēšanas, lai nodrošinātu datu bāzes servera drošību. Šis skripts palīdz uzlabot MySQL servera drošību, lūdzot:

  • iestatiet paroli saknes kontam, ja to neesat iestatījis instalēšanas laikā.
  • atspējojiet attālo sakņu lietotāja pieteikšanos, noņemot saknes kontus, kas ir pieejami ārpus lokālā resursdatora
  • noņemiet anonīmu lietotāju kontus un testa datu bāzi, kurai pēc noklusējuma var piekļūt visi lietotāji, pat anonīmi lietotāji.

# mysql_secure_installation

Pēc tā palaišanas iestatiet saknes paroli un atbildiet uz virkni jautājumu, ievadot [Jā/Y] un nospiediet [Enter].

2. Saistīt datu bāzes serveri ar atgriezeniskās saites adresi

Šī konfigurācija ierobežos piekļuvi no attālajām mašīnām, tā liek MySQL serverim pieņemt savienojumus tikai no localhost. To var iestatīt galvenajā konfigurācijas failā.

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

Sadaļā [mysqld] pievienojiet šādu rindu.

bind-address = 127.0.0.1

3. MySQL atspējojiet LOCAL INFILE

Kā daļu no drošības sacietēšanas jums ir jāatspējo local_infile, lai MySQL iekšienē neļautu piekļūt pamatā esošajai failu sistēmai, izmantojot sadaļas [mysqld] šo direktīvu.

local-infile=0

4. Mainiet MYSQL noklusējuma portu

Mainīgais ports nosaka MySQL porta numuru, kas tiks izmantots, lai klausītos TCP/IP savienojumus. Noklusējuma porta numurs ir 3306, taču to var mainīt sadaļā [mysqld], kā parādīts.

Port=5000

5. Iespējojiet MySQL reģistrēšanu

Žurnāli ir viens no labākajiem veidiem, kā saprast, kas notiek serverī. Jebkuru uzbrukumu gadījumā no žurnālfailiem varat viegli redzēt visas ar ielaušanos saistītās darbības. MySQL reģistrēšanu varat iespējot, sadaļā [mysqld] pievienojot šādu mainīgo.

log=/var/log/mysql.log

6. Iestatiet MySQL failiem atbilstošu atļauju

Pārliecinieties, vai visiem mysql servera failiem un datu direktorijiem ir iestatītas atbilstošas atļaujas. Failam /etc/my.conf jābūt rakstāmam tikai root. Tas bloķē citus lietotājus mainīt datu bāzes servera konfigurācijas.

# chmod 644 /etc/my.cnf

7. Dzēsiet MySQL čaulas vēsturi

Visas komandas, kuras izpildāt MySQL čaulā, mysql klients saglabā vēstures failā: ~/.mysql_history. Tas var būt bīstami, jo visiem jūsu izveidotajiem lietotāju kontiem visi čaulā ierakstītie lietotājvārdi un paroles tiks ierakstīti vēstures failā.

# cat /dev/null > ~/.mysql_history

8. Nepalaidiet MySQL komandas no komandrindas

Kā jūs jau zināt, visas komandas, kuras ievadāt terminālā, tiek saglabātas vēstures failā atkarībā no izmantotās čaulas (piemēram, ~/.bash_history for bash). Uzbrucējs, kuram izdodas piekļūt šim vēstures failam, var viegli redzēt visas tur ierakstītās paroles.

Komandrindā nav ieteicams ierakstīt paroles, kaut kas līdzīgs šim:

# mysql -u root -ppassword_

Pārbaudot komandu vēstures faila pēdējo sadaļu, redzēsiet iepriekš ievadīto paroli.

# history 

Atbilstošs veids, kā izveidot savienojumu ar MySQL, ir.

# mysql -u root -p
Enter password:

9. Definējiet lietojumprogrammu datu bāzes lietotājus

Katrai lietojumprogrammai, kas darbojas serverī, piešķiriet piekļuvi tikai lietotājam, kurš ir atbildīgs par konkrētās lietojumprogrammas datu bāzi. Piemēram, ja jums ir WordPress vietne, izveidojiet konkrētu lietotāju WordPress vietņu datu bāzei šādi.

# mysql -u root -p
MariaDB [(none)]> CREATE DATABASE osclass_db;
MariaDB [(none)]> CREATE USER 'osclassdmin'@'localhost' IDENTIFIED BY '[email %!2';
MariaDB [(none)]> GRANT ALL PRIVILEGES ON osclass_db.* TO 'osclassdmin'@'localhost';
MariaDB [(none)]> FLUSH PRIVILEGES;
MariaDB [(none)]> exit

un atcerieties vienmēr noņemt tos lietotāju kontus, kuri vairs nepārvalda nevienu lietojumprogrammu datu bāzi serverī.

10. Izmantojiet papildu drošības spraudņus un bibliotēkas

MySQL ietver vairākus drošības spraudņus, kas paredzēti: klientu mēģinājumu autentificēt savienojumu ar mysql serveri autentificēšanai, paroles pārbaudei un slepenas informācijas glabāšanas nodrošināšanai, kas visi ir pieejami bezmaksas versijā.

Vairāk varat atrast šeit: https://dev.mysql.com/doc/refman/5.7/en/security-plugins.html

11. Regulāri mainiet MySQL paroles

Šī ir izplatīta informācija/lietojumprogramma/sistēmas drošības padomi. Cik bieži jūs to darīsit, būs pilnībā atkarīgs no jūsu iekšējās drošības politikas. Tomēr tas var neļaut "snooperiem", kuri, iespējams, ir izsekojuši jūsu darbību ilgākā laika posmā, piekļūt jūsu mysql serverim.

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

12. Regulāri atjauniniet MySQL servera pakotni

Ir ļoti ieteicams regulāri atjaunināt mysql/mariadb paketes, lai sekotu līdzi drošības atjauninājumiem un kļūdu labojumiem no pārdevēja krātuves. Parasti pakotnes noklusējuma operētājsistēmas krātuvēs ir novecojušas.

# yum update
# apt update

Pēc jebkādu izmaiņu veikšanas mysql/mariadb serverī vienmēr restartējiet pakalpojumu.

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

Tas ir viss! Mēs labprāt dzirdam no jums, izmantojot zemāk esošo komentāru veidlapu. Kopīgojiet ar mums visus MySQL/MariaDB drošības padomus, kuru trūkst iepriekš minētajā sarakstā.