12 MySQL/MariaDB Sécherheet Best Practices fir Linux


MySQL ass de populärsten Open Source Datebanksystem vun der Welt a MariaDB (eng Gabel vu MySQL) ass de séierst wuessende Open Source Datebanksystem vun der Welt. No der Installatioun vum MySQL Server ass et onsécher a senger Standardkonfiguratioun, an et ass eng vun de wesentlechen Aufgaben am allgemengen Datebankmanagement ze sécheren.

Dëst wäert derzou bäidroen fir d'Gesamt Linux-Serversécherheet ze härten an ze stäerken, well Ugräifer ëmmer Schwachstelle scannen an all Deel vun engem System, an Datenbanken an der Vergaangenheet waren Schlësselzielgebidder. E gemeinsamt Beispill ass d'brute-Forcing vum Root-Passwuert fir d'MySQL-Datebank.

An dësem Guide erkläre mir nëtzlech MySQL/MariaDB Sécherheet Best Praxis fir Linux.

1. Séchert MySQL Installatioun

Dëst ass den éischte recommandéierte Schrëtt no der Installatioun vum MySQL Server, fir den Datebankserver ze sécheren. Dëse Skript erliichtert d'Sécherheet vun Ärem MySQL Server ze verbesseren andeems Dir Iech freet:

  • e Passwuert fir de Root-Kont setzen, wann Dir et während der Installatioun net agestallt hutt.
  • deaktivéiert de Remote Root Benotzer Login andeems Dir Root Konten ewechhuelt, déi vu baussent dem lokalen Host zougänglech sinn.
  • Anonyme Benotzerkonten an Testdatenbank ewechhuelen, déi als Standard vun all Benotzer zougänglech sinn, och anonym Benotzer.

# mysql_secure_installation

Nodeems Dir et ausgefouert hutt, setzt d'Root Passwuert an äntwert d'Serie vu Froen andeems Dir [Jo/Y] gitt an dréckt [Enter].

2. Binden Datebank Server zu Loopback Adress

Dës Konfiguratioun beschränkt den Zougang vu Fernmaschinnen, et seet dem MySQL-Server fir nëmmen Verbindungen aus dem localhost ze akzeptéieren. Dir kënnt et an der Haaptkonfiguratiounsdatei setzen.

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

Füügt déi folgend Zeil ënnert ënner [mysqld] Sektioun.

bind-address = 127.0.0.1

3. Desaktivéiere LOCAL INFILE an MySQL

Als Deel vun der Sécherheetshärung, musst Dir local_infile auszeschalten fir Zougang zum Basisdaten Dateiesystem vu MySQL ze verhënneren andeems Dir déi folgend Direktiv ënner [mysqld] Sektioun benotzt.

local-infile=0

4. Änneren MYSQL Default Port

D'Port Variabel setzt d'MySQL Portnummer fest, déi benotzt gëtt fir op TCP/IP Verbindungen ze lauschteren. D'Standardportnummer ass 3306 awer Dir kënnt et ënner der [mysqld] Sektioun änneren wéi gewisen.

Port=5000

5. Aktivéiert MySQL Logging

Logbicher sinn ee vun de beschte Weeër fir ze verstoen wat op engem Server geschitt, am Fall vun Attacken, kënnt Dir einfach all Intrusiounsbezunnen Aktivitéite vu Logdateien gesinn. Dir kënnt MySQL Logging aktivéieren andeems Dir déi folgend Variabel ënner der [mysqld] Sektioun bäidréit.

log=/var/log/mysql.log

6. Setzt entspriechend Erlaabnis op MySQL Dateien

Vergewëssert Iech datt Dir entspriechend Permissiounen fir all mysql Serverdateien an Dateverzeichnisser gesat hutt. D'Datei /etc/my.conf soll nëmmen op Root schreiwen. Dëst blockéiert aner Benotzer aus der Ännerung vun der Datebankserverkonfiguratioun.

# chmod 644 /etc/my.cnf

7. Läschen MySQL Shell Geschicht

All Kommandoen déi Dir op MySQL Shell ausféiert, ginn vum mysql Client an enger Geschichtdatei gespäichert: ~/.mysql_history. Dëst kann geféierlech sinn, well fir all Benotzerkonten déi Dir erstellt, all Benotzernimm a Passwierder, déi op der Shell getippt sinn, an der Geschichtdatei opgeholl.

# cat /dev/null > ~/.mysql_history

8. Run net MySQL Kommandoen aus Commandline

Wéi Dir scho wësst, sinn all Kommandoen déi Dir um Terminal schreift an enger Geschichtdatei gespäichert, jee no der Shell déi Dir benotzt (zum Beispill ~/.bash_history fir bash). En Ugräifer, deen et fäerdeg bréngt Zougang zu dëser Geschichtdatei ze kréien, kann einfach all Passwierder gesinn, déi do opgeholl goufen.

Et ass staark net recommandéiert Passwierder op der Kommandozeil ze tippen, sou eppes wéi:

# mysql -u root -ppassword_

Wann Dir déi lescht Sektioun vun der Kommandogeschichtdatei kontrolléiert, gesitt Dir d'Passwuert hei uewen.

# history 

De passende Wee fir MySQL ze verbannen ass.

# mysql -u root -p
Enter password:

9. Definéieren Applikatiounsspezifesch Datebank Benotzer

Fir all Applikatioun déi um Server leeft, gitt nëmmen Zougang zu engem Benotzer deen zoustänneg ass fir eng Datebank fir eng bestëmmte Applikatioun. Zum Beispill, wann Dir e Wordpress Site hutt, erstellt e spezifesche Benotzer fir d'Wordpress Site Datebank wéi follegt.

# 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

an erënnert un ëmmer Benotzerkonten ze läschen, déi keng Applikatiounsdatebank méi um Server verwalten.

10. Benotzen Zousätzlech Sécherheet Plugins a Bibliothéiken

MySQL enthält eng Rei vu Sécherheetsplugins fir: Authentifikatiounsversuche vu Clienten fir mam mysql-Server ze verbannen, Passwuertvalidatioun a Sécherheetsspäichere fir sensibel Informatioun, déi all an der gratis Versioun verfügbar sinn.

Dir kënnt méi hei fannen: https://dev.mysql.com/doc/refman/5.7/en/security-plugins.html

11. Änneren MySQL Passwierder regelméisseg

Dëst ass e gemeinsame Stéck Informatioun/Applikatioun/System Sécherheetsberodung. Wéi dacks Dir dëst maacht, hänkt ganz vun Ärer interner Sécherheetspolitik of. Wéi och ëmmer, et kann verhënneren datt Snoopers déi Är Aktivitéit iwwer eng laang Zäit verfollegt hunn, Zougang zu Ärem mysql Server kréien.

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

12. Update MySQL Server Package regelméisseg

Et ass héich recommandéiert mysql/mariadb Packagen regelméisseg ze upgrade fir mat Sécherheetsupdates a Bugfixes ze halen, vum Verkeefer vum Repository. Normalerweis sinn Packagen an Default-Betriebssystem-Repositories veroudert.

# yum update
# apt update

Nodeems Dir Ännerunge vum mysql/mariadb-Server gemaach hutt, de Service ëmmer nei starten.

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

Dat ass alles! Mir héiere gär vun Iech iwwer de Kommentarformular hei drënner. Deelt mat eis all MySQL/MariaDB Sécherheets Tipps déi an der uewe genannter Lëscht fehlen.