12 MySQL/MariaDB sikkerhetsbestemmelser for Linux


MySQL er verdens mest populære databasesystem for åpen kildekode, og MariaDB (en gaffel av MySQL) er verdens raskest voksende databasesystem med åpen kildekode. Etter å ha installert MySQL-serveren, er den usikker i sin standardkonfigurasjon, og sikring av den er en av de essensielle oppgavene i generell databasebehandling.

Les også: Lær MySQL/MariaDB for nybegynnere – del 1

Dette vil bidra til å styrke og øke den generelle Linux-serversikkerheten, ettersom angripere alltid skanner sårbarheter i alle deler av et system, og databaser har tidligere vært sentrale målområder. Et vanlig eksempel er brute-forcing av root-passordet for MySQL-databasen.

I denne veiledningen vil vi forklare nyttig MySQL/MariaDB-sikkerhetspraksis for Linux.

1. Sikker MySQL-installasjon

Dette er det første anbefalte trinnet etter installasjon av MySQL-serveren, mot å sikre databaseserveren. Dette skriptet gjør det lettere å forbedre sikkerheten til MySQL-serveren din ved å be deg om å:

  • angi et passord for root-kontoen, hvis du ikke satte det under installasjonen.
  • deaktiver ekstern rotbrukerpålogging ved å fjerne rotkontoer som er tilgjengelige utenfor den lokale verten.
  • fjerne anonyme brukerkontoer og testdatabase som som standard kan nås av alle brukere, også anonyme brukere.
mysql_secure_installation

Etter å ha kjørt det, angi root-passordet og svar på spørsmålsserien ved å skrive inn [Yes/Y] og trykk [Enter].

2. Bind databaseserveren til tilbakekoblingsadressen

Denne konfigurasjonen vil begrense tilgangen fra eksterne maskiner, den forteller MySQL-serveren å bare akseptere tilkoblinger fra den lokale verten. Du kan angi den i hovedkonfigurasjonsfilen.

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

Legg til følgende linje under under [mysqld]-delen.

bind-address = 127.0.0.1

3. Deaktiver LOKAL INFILE i MySQL

Som en del av sikkerhetsherdingen må du deaktivere local_infile for å forhindre tilgang til det underliggende filsystemet fra MySQL ved å bruke følgende direktiv under [mysqld]-delen.

local-infile=0

4. Endre MYSQL-standardport

Port-variabelen angir MySQL-portnummeret som skal brukes til å lytte på TCP/IP-tilkoblinger. Standard portnummer er 3306, men du kan endre det under [mysqld]-delen som vist.

Port=5000

5. Aktiver MySQL-logging

Logger er en av de beste måtene å forstå hva som skjer på en server, i tilfelle angrep kan du enkelt se alle inntrengningsrelaterte aktiviteter fra loggfiler. Du kan aktivere MySQL-logging ved å legge til følgende variabel under [mysqld]-delen.

log=/var/log/mysql.log

6. Angi passende tillatelse på MySQL-filer

Sørg for at du har riktige tillatelser satt for alle mysql-serverfiler og datakataloger. /etc/my.conf-filen skal bare kunne skrives til root. Dette blokkerer andre brukere fra å endre databaseserverkonfigurasjoner.

chmod 644 /etc/my.cnf

7. Slett MySQL Shell History

Alle kommandoer du utfører på MySQL-skall lagres av mysql-klienten i en historiefil: ~/.mysql_history. Dette kan være farlig, fordi for alle brukerkontoer du oppretter, vil alle brukernavn og passord som er skrevet på skallet bli registrert i historikkfilen.

cat /dev/null > ~/.mysql_history

8. Ikke kjør MySQL-kommandoer fra kommandolinjen

Som du allerede vet, lagres alle kommandoer du skriver på terminalen i en historiefil, avhengig av skallet du bruker (for eksempel ~/.bash_history for bash). En angriper som klarer å få tilgang til denne historiefilen kan enkelt se alle passord som er registrert der.

Det anbefales på det sterkeste ikke å skrive passord på kommandolinjen, noe som dette:

mysql -u root -ppassword_

Når du sjekker den siste delen av kommandohistorikkfilen, vil du se passordet som er skrevet ovenfor.

history 

Den riktige måten å koble til MySQL er.

mysql -u root -p
Enter password:

9. Definer applikasjonsspesifikke databasebrukere

For hver applikasjon som kjører på serveren, gi kun tilgang til en bruker som er ansvarlig for en database for en gitt applikasjon. For eksempel, hvis du har et wordpress-nettsted, oppretter du en spesifikk bruker for wordpress-nettstedets database som følger.

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

og husk å alltid fjerne brukerkontoer som ikke lenger administrerer noen applikasjonsdatabase på serveren.

10. Bruk ekstra sikkerhetstillegg og biblioteker

MySQL inkluderer en rekke sikkerhetsplugins for: autentisering av klienters forsøk på å koble til mysql-server, passordvalidering og sikring av lagring for sensitiv informasjon, som alle er tilgjengelige i gratisversjonen.

Du finner mer her: https://dev.mysql.com/doc/refman/5.7/en/security-plugins.html

11. Endre MySQL-passord regelmessig

Dette er et vanlig informasjons-/applikasjons-/systemsikkerhetsråd. Hvor ofte du gjør dette vil helt avhenge av din interne sikkerhetspolicy. Det kan imidlertid hindre "snoopers" som kan ha sporet aktiviteten din over lang tid, fra å få tilgang til mysql-serveren din.

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

12. Oppdater MySQL-serverpakken regelmessig

Det anbefales sterkt å oppgradere mysql/mariadb-pakker regelmessig for å holde tritt med sikkerhetsoppdateringer og feilrettinger, fra leverandørens depot. Normalt er pakker i standardlager for operativsystem utdaterte.

yum update
apt update

Etter å ha gjort endringer på mysql/mariadb-serveren, start alltid tjenesten på nytt.

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

Les også: 15 nyttige MySQL/MariaDB ytelsesjusterings- og optimaliseringstips

Det er alt! Vi elsker å høre fra deg via kommentarskjemaet nedenfor. Del med oss eventuelle MySQL/MariaDB-sikkerhetstips som mangler i listen ovenfor.