12 najboljših praks varnosti MySQL/MariaDB za Linux


MySQL je najbolj priljubljen odprtokodni sistem zbirk podatkov na svetu, MariaDB (vilica MySQL) pa najhitreje rastoči sistem odprtokodnih baz podatkov na svetu. Po namestitvi strežnika MySQL ni več varen v privzeti konfiguraciji, zavarovanje pa je ena od bistvenih nalog pri splošnem upravljanju baz podatkov.

To bo prispevalo k utrjevanju in povečanju splošne varnosti strežnika Linux, saj napadalci vedno skenirajo ranljivosti v katerem koli delu sistema, baze podatkov pa so bile v preteklosti ključna ciljna področja. Pogost primer je brutalno vsiljevanje korenskega gesla za bazo podatkov MySQL.

V tem priročniku bomo razložili koristne varnostne prakse MySQL/MariaDB za Linux.

1. Zaščitna namestitev MySQL

To je prvi priporočeni korak po namestitvi strežnika MySQL proti zaščiti strežnika baz podatkov. Ta skript olajša izboljšanje varnosti vašega strežnika MySQL tako, da vas prosi, da:

  • nastavite geslo za korenski račun, če ga niste nastavili med namestitvijo.
  • onemogočite prijavo oddaljenega uporabnika root z odstranitvijo korenskih računov, ki so dostopni zunaj lokalnega gostitelja.
  • odstranite anonimne uporabniške račune in preskusno zbirko podatkov, do katere lahko privzeto dostopajo vsi uporabniki, tudi anonimni.

# mysql_secure_installation

Ko ga zaženete, nastavite geslo root in odgovorite na vrsto vprašanj tako, da vnesete [Yes/Y] in pritisnete [Enter].

2. Povežite strežnik zbirke podatkov z naslovom povratne zanke

Ta konfiguracija bo omejila dostop z oddaljenih strojev, strežniku MySQL pa sporoči, naj sprejema samo povezave znotraj lokalnega gostitelja. Nastavite ga lahko v glavni konfiguracijski datoteki.

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

Spodnjo vrstico dodajte pod razdelek [mysqld] .

bind-address = 127.0.0.1

3. Onemogočite LOCAL INFILE v MySQL

Kot del krepitve varnosti morate onemogočiti local_infile, da preprečite dostop do osnovnega datotečnega sistema iz MySQL z uporabo naslednje direktive v razdelku [mysqld] .

local-infile=0

4. Spremenite privzeta vrata MYSQL

Spremenljivka Port določa številko vrat MySQL, ki bo uporabljena za poslušanje povezav TCP/ IP. Privzeta številka vrat je 3306, vendar jo lahko spremenite v razdelku [mysqld], kot je prikazano.

Port=5000

5. Omogoči beleženje MySQL

Dnevniki so eden najboljših načinov za razumevanje dogajanja na strežniku. V primeru napadov lahko preprosto vidite vse dejavnosti, povezane z vdori, iz datotek dnevnika. Zapisovanje MySQL lahko omogočite tako, da v razdelek [mysqld] dodate naslednjo spremenljivko.

log=/var/log/mysql.log

6. Nastavite ustrezno dovoljenje za datoteke MySQL

Prepričajte se, da imate nastavljena ustrezna dovoljenja za vse strežniške datoteke in imenike podatkov mysql. Datoteko /etc/my.conf je treba zapisati samo v root. To drugim uporabnikom preprečuje spreminjanje konfiguracij strežnika baz podatkov.

# chmod 644 /etc/my.cnf

7. Izbrišite zgodovino lupin MySQL

Vse ukaze, ki jih izvedete v lupini MySQL, odjemalec mysql shrani v zgodovinsko datoteko: ~/.mysql_history. To je lahko nevarno, saj bodo za vse uporabniške račune, ki jih boste ustvarili, vsa uporabniška imena in gesla, vnesena v lupino, zabeležena v datoteki zgodovine.

# cat /dev/null > ~/.mysql_history

8. Ne zaženite ukazov MySQL iz ukazne vrstice

Kot že veste, so vsi ukazi, ki jih vnesete v terminal, shranjeni v datoteki zgodovine, odvisno od lupine, ki jo uporabljate (na primer ~/.bash_history za bash). Napadalec, ki mu uspe dostop do te datoteke zgodovine, lahko zlahka vidi vsa gesla, ki so tam zapisana.

Gesla v ukazno vrstico ni priporočljivo vnašati, na primer:

# mysql -u root -ppassword_

Ko preverite zadnji del datoteke zgodovine ukazov, boste videli zgoraj vneseno geslo.

# history 

Ustrezen način za povezovanje MySQL je.

# mysql -u root -p
Enter password:

9. Določite uporabnike zbirke podatkov, specifične za aplikacijo

Za vsako aplikacijo, ki se izvaja na strežniku, omogočite dostop samo uporabniku, ki je zadolžen za zbirko podatkov za določeno aplikacijo. Če imate na primer spletno mesto wordpress, ustvarite določenega uporabnika za bazo podatkov spletnega mesta wordpress na naslednji način.

# 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

in ne pozabite vedno odstraniti uporabniških računov, ki ne upravljajo več nobene baze aplikacij na strežniku.

10. Uporabite dodatne varnostne vtičnike in knjižnice

MySQL vključuje številne varnostne vtičnike za: preverjanje pristnosti poskusov strank, da se povežejo s strežnikom mysql, preverjanje gesla in zavarovanje shrambe za občutljive podatke, ki so na voljo v brezplačni različici.

Več najdete tukaj: https://dev.mysql.com/doc/refman/5.7/en/security-plugins.html

11. Redno spreminjajte gesla MySQL

To je običajen podatek/varnostni nasvet o aplikacijah/sistemu. Kako pogosto boste to počeli, bo v celoti odvisno od vaše notranje varnostne politike. Lahko pa prepreči, da bi "" vohljači ", ki bi lahko dolgo časa spremljali vašo dejavnost, pridobili dostop do vašega strežnika mysql.

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

12. Redno posodabljajte strežniški paket MySQL

Zelo priporočljivo je, da pakete mysql/mariadb redno nadgrajujete, da boste v koraku z varnostnimi posodobitvami in popravki napak iz skladišča prodajalca. Običajno so paketi v privzetih skladiščih operacijskih sistemov zastareli.

# yum update
# apt update

Po spremembah strežnika mysql/mariadb storitev vedno znova zaženite.

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

To je vse! Radi bi vas slišali preko spodnjega obrazca za komentar. Delite z nami vse varnostne nasvete MySQL/MariaDB, ki manjkajo na zgornjem seznamu.