12 MySQL/MariaDB Security Best Practices til Linux


MySQL er verdens mest populære open source-databasesystem, og MariaDB (en fork af MySQL) er verdens hurtigst voksende open source-databasesystem. Efter installation af MySQL-server er den usikker i standardkonfigurationen, og sikring af den er en af de væsentligste opgaver i generel databasestyring.

Dette vil bidrage til hærdning og boosting af den generelle Linux-serversikkerhed, da angribere altid scanner sårbarheder i en hvilken som helst del af et system, og databaser har tidligere været vigtige målområder. Et almindeligt eksempel er brutaltvingning af rodadgangskoden til MySQL-databasen.

I denne vejledning vil vi forklare nyttige MySQL/MariaDB sikkerhed bedste praksis for Linux.

1. Sikker MySQL-installation

Dette er det første anbefalede trin efter installation af MySQL-serveren mod sikring af databaseserveren. Dette script letter forbedring af sikkerheden på din MySQL-server ved at bede dig om at:

  • indstil en adgangskode til rodkontoen, hvis du ikke indstillede den under installationen.
  • deaktiver fjernsøgning af root-brugerlogin ved at fjerne rodkonti, der er tilgængelige uden for den lokale vært.
  • fjern anonyme brugerkonti og testdatabase, som som standard er tilgængelig for alle brugere, også anonyme brugere.

# mysql_secure_installation

Når du har kørt det, skal du indstille root-adgangskoden og besvare spørgsmålsserien ved at indtaste [Ja/Y] og trykke på [Enter].

2. Bind databaseserver til Loopback-adresse

Denne konfiguration vil begrænse adgangen fra eksterne maskiner, den fortæller MySQL-serveren at kun acceptere forbindelser fra localhost. Du kan indstille det i hovedkonfigurationsfilen.

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

Tilføj følgende linje nedenfor under [mysqld] sektionen.

bind-address = 127.0.0.1

3. Deaktiver LOKAL INFILE i MySQL

Som en del af sikkerhedshærdning skal du deaktivere local_infile for at forhindre adgang til det underliggende filsystem fra MySQL ved hjælp af følgende direktiv under [mysqld] sektionen.

local-infile=0

4. Skift MYSQL-standardport

Portvariablen indstiller MySQL-portnummeret, der skal bruges til at lytte på TCP/IP-forbindelser. Standardportnummeret er 3306, men du kan ændre det under [mysqld] som vist.

Port=5000

5. Aktivér MySQL-logning

Logfiler er en af de bedste måder at forstå, hvad der sker på en server. I tilfælde af angreb kan du nemt se eventuelle indtrængningsrelaterede aktiviteter fra logfiler. Du kan aktivere MySQL-logning ved at tilføje følgende variabel under [mysqld] sektionen.

log=/var/log/mysql.log

6. Indstil passende tilladelse til MySQL-filer

Sørg for, at du har indstillet passende tilladelser til alle mysql-serverfiler og datakataloger. /Etc/my.conf-filen skal kun kunne skrives til root. Dette forhindrer andre brugere i at ændre databaseserverkonfigurationer.

# chmod 644 /etc/my.cnf

7. Slet MySQL Shell-historik

Alle kommandoer, du udfører på MySQL-shell, gemmes af mysql-klienten i en historikfil: ~/.mysql_history. Dette kan være farligt, for for alle brugerkonti, du opretter, registreres alle brugernavne og adgangskoder, der er skrevet på skallen, i historikfilen.

# cat /dev/null > ~/.mysql_history

8. Kør ikke MySQL-kommandoer fra Commandline

Som du allerede ved, er alle kommandoer, du skriver på terminalen, gemt i en historikfil afhængigt af den shell, du bruger (for eksempel ~/.bash_history for bash). En hacker, der formår at få adgang til denne historikfil, kan let se alle adgangskoder, der er optaget der.

Det anbefales stærkt ikke at skrive adgangskoder på kommandolinjen, noget som dette:

# mysql -u root -ppassword_

Når du kontrollerer det sidste afsnit af kommandoforløbsfilen, vil du se adgangskoden, der er skrevet ovenfor.

# history 

Den rigtige måde at forbinde MySQL på er.

# mysql -u root -p
Enter password:

9. Definer applikationsspecifikke databasebrugere

For hver applikation, der kører på serveren, skal du kun give adgang til en bruger, der har ansvaret for en database for en given applikation. Hvis du f.eks. Har et WordPress-websted, skal du oprette en bestemt bruger til WordPress-webstedets database som følger.

# 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

og husk altid at fjerne brugerkonti, der ikke længere administrerer nogen applikationsdatabase på serveren.

10. Brug yderligere sikkerheds-plugins og biblioteker

MySQL inkluderer et antal sikkerheds-plugins til: godkendelse af klienters forsøg på at oprette forbindelse til mysql-serveren, adgangskodevalidering og sikring af lagring af følsomme oplysninger, som alle er tilgængelige i den gratis version.

Du kan finde mere her: https://dev.mysql.com/doc/refman/5.7/en/security-plugins.html

11. Skift MySQL-adgangskoder regelmæssigt

Dette er et almindeligt råd til information/applikation/systemsikkerhed. Hvor ofte du gør dette, afhænger helt af din interne sikkerhedspolitik. Det kan dog forhindre “snoopere”, der muligvis har sporet din aktivitet i lang tid, i at få adgang til din mysql-server.

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

12. Opdater MySQL Server-pakke regelmæssigt

Det anbefales stærkt at opgradere mysql/mariadb-pakker regelmæssigt for at holde trit med sikkerhedsopdateringer og fejlrettelser fra leverandørens lager. Normalt er pakker i standardoperativsystemlagre forældede.

# yum update
# apt update

Når du har foretaget ændringer på mysql/mariadb-serveren, skal du altid genstarte tjenesten.

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

Det er alt! Vi elsker at høre fra dig via nedenstående kommentarformular. Del med os eventuelle MySQL/MariaDB-sikkerhedstip, der mangler i ovenstående liste.