12 MySQL/MariaDB sigurnosnih najboljih praksi za Linux


MySQL je najpopularniji svjetski sustav baze podataka otvorenog koda, a MariaDB (račva MySQL-a) je najbrže rastući sustav baze podataka otvorenog koda na svijetu. Nakon instaliranja MySQL poslužitelja, nesiguran je u svojoj zadanoj konfiguraciji, a njegovo osiguranje jedan je od bitnih zadataka u općem upravljanju bazom podataka.

Pročitajte također: Naučite MySQL/MariaDB za početnike – 1. dio

To će pridonijeti ojačavanju i jačanju ukupne sigurnosti Linux poslužitelja, jer napadači uvijek skeniraju ranjivosti u bilo kojem dijelu sustava, a baze podataka su u prošlosti bile ključna ciljna područja. Čest primjer je grubo forsiranje root lozinke za MySQL bazu podataka.

U ovom ćemo vodiču objasniti korisne najbolje prakse MySQL/MariaDB sigurnosti za Linux.

1. Sigurna MySQL instalacija

Ovo je prvi preporučeni korak nakon instalacije MySQL poslužitelja, prema osiguravanju poslužitelja baze podataka. Ova skripta olakšava poboljšanje sigurnosti vašeg MySQL poslužitelja tražeći od vas da:

  • postavite lozinku za root račun, ako je niste postavili tijekom instalacije.
  • onemogućite udaljenu root korisničku prijavu uklanjanjem root računa koji su dostupni izvan lokalnog računala.
  • uklonite anonimne korisničke račune i testirajte bazu podataka kojoj prema zadanim postavkama mogu pristupiti svi korisnici, čak i anonimni korisnici.
mysql_secure_installation

Nakon što ga pokrenete, postavite root lozinku i odgovorite na niz pitanja unosom [Yes/Y] i pritisnite [Enter].

2. Povežite poslužitelj baze podataka s povratnom adresom

Ova konfiguracija će ograničiti pristup s udaljenih strojeva, govori MySQL poslužitelju da prihvaća samo veze unutar lokalnog hosta. Možete ga postaviti u glavnoj konfiguracijskoj datoteci.

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

Dodajte sljedeći red ispod u odjeljak [mysqld].

bind-address = 127.0.0.1

3. Onemogućite LOCAL INFILE u MySQL-u

Kao dio pojačanja sigurnosti, trebate onemogućiti local_infile kako biste spriječili pristup osnovnom datotečnom sustavu iz MySQL-a pomoću sljedeće direktive u odjeljku [mysqld].

local-infile=0

4. Promijenite MYSQL zadani port

Varijabla Port postavlja broj MySQL priključka koji će se koristiti za slušanje TCP/IP veza. Zadani broj porta je 3306 ali ga možete promijeniti u odjeljku [mysqld] kao što je prikazano.

Port=5000

5. Omogućite MySQL bilježenje

Dnevnici su jedan od najboljih načina da shvatite što se događa na poslužitelju, u slučaju bilo kakvih napada, možete lako vidjeti sve aktivnosti povezane s upadom iz datoteka dnevnika. Možete omogućiti MySQL bilježenje dodavanjem sljedeće varijable u odjeljak [mysqld].

log=/var/log/mysql.log

6. Postavite odgovarajuću dozvolu za MySQL datoteke

Provjerite imate li odgovarajuća dopuštenja postavljena za sve datoteke mysql poslužitelja i direktorije podataka. Datoteku /etc/my.conf treba moći pisati samo za root. Ovo blokira druge korisnike u mijenjanju konfiguracije poslužitelja baze podataka.

chmod 644 /etc/my.cnf

7. Izbrišite MySQL povijest ljuske

Sve naredbe koje izvršavate na MySQL ljusci mysql klijent sprema u datoteku povijesti: ~/.mysql_history. Ovo može biti opasno, jer za sve korisničke račune koje stvorite, sva korisnička imena i lozinke unesene u ljusku bit će zabilježene u datoteci povijesti.

cat /dev/null > ~/.mysql_history

8. Nemojte pokretati MySQL naredbe iz naredbenog retka

Kao što već znate, sve naredbe koje upišete na terminalu pohranjuju se u datoteku povijesti, ovisno o ljusci koju koristite (na primjer ~/.bash_history za bash). Napadač koji uspije dobiti pristup ovoj povijesnoj datoteci može lako vidjeti sve lozinke koje su tamo zabilježene.

Strogo se ne preporučuje upisivanje lozinki u naredbeni redak, otprilike ovako:

mysql -u root -ppassword_

Kada provjerite posljednji odjeljak datoteke povijesti naredbi, vidjet ćete lozinku upisanu iznad.

history 

Odgovarajući način povezivanja MySQL-a je.

mysql -u root -p
Enter password:

9. Definirajte korisnike baze podataka specifične za aplikaciju

Za svaku aplikaciju koja se izvodi na poslužitelju dopustite pristup samo korisniku koji je zadužen za bazu podataka za određenu aplikaciju. Na primjer, ako imate web mjesto za wordpress, stvorite određenog korisnika za bazu podataka za web mjesto za wordpress kako slijedi.

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 ne zaboravite uvijek ukloniti korisničke račune koji više ne upravljaju bazom podataka aplikacija na poslužitelju.

10. Koristite dodatne sigurnosne dodatke i biblioteke

MySQL uključuje niz sigurnosnih dodataka za: provjeru autentičnosti pokušaja klijenata da se povežu na mysql poslužitelj, provjeru valjanosti lozinke i osiguravanje pohrane osjetljivih informacija, koji su svi dostupni u besplatnoj verziji.

Više možete pronaći ovdje: https://dev.mysql.com/doc/refman/5.7/en/security-plugins.html

11. Redovito mijenjajte MySQL lozinke

Ovo je uobičajeni savjet o sigurnosti informacija/aplikacija/sustava. Koliko često ćete to činiti u potpunosti će ovisiti o vašoj internoj sigurnosnoj politici. Međutim, može spriječiti "njuškale" koji su možda pratili vašu aktivnost tijekom dugog vremenskog razdoblja da dobiju pristup vašem mysql poslužitelju.

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

12. Redovito ažurirajte paket MySQL poslužitelja

Toplo se preporučuje redovito nadograđivati pakete mysql/mariadb kako biste bili u toku sa sigurnosnim ažuriranjima i ispravcima grešaka iz repozitorija dobavljača. Obično su paketi u zadanim spremištima operativnog sustava zastarjeli.

yum update
apt update

Nakon bilo kakvih promjena na poslužitelju mysql/mariadb, uvijek ponovno pokrenite uslugu.

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

Pročitajte također: 15 korisnih savjeta za podešavanje i optimizaciju performansi MySQL/MariaDB

To je sve! Volimo čuti vaše mišljenje putem obrasca za komentare u nastavku. Podijelite s nama sve sigurnosne savjete za MySQL/MariaDB koji nedostaju na gornjem popisu.