Zoeken op website

12 Best practices voor MySQL/MariaDB-beveiliging voor Linux


MySQL is 's werelds populairste open source databasesysteem en MariaDB (een afsplitsing van MySQL) is 's werelds snelst groeiende open source databasesysteem. Na het installeren van de MySQL-server is deze onveilig in de standaardconfiguratie, en het beveiligen ervan is een van de essentiële taken bij algemeen databasebeheer.

Lees ook: Leer MySQL/MariaDB voor beginners – Deel 1

Dit zal bijdragen aan het versterken en versterken van de algemene beveiliging van Linux-servers, omdat aanvallers altijd kwetsbaarheden in welk deel van een systeem dan ook scannen en databases in het verleden belangrijke doelgebieden zijn geweest. Een veelvoorkomend voorbeeld is het brute forceren van het root-wachtwoord voor de MySQL-database.

In deze handleiding leggen we nuttige MySQL/MariaDB beveiligingsbest practices voor Linux uit.

1. Veilige MySQL-installatie

Dit is de eerste aanbevolen stap na het installeren van de MySQL-server, om de databaseserver te beveiligen. Dit script vergemakkelijkt het verbeteren van de beveiliging van uw MySQL-server door u te vragen:

  • stel een wachtwoord in voor het root-account, als u dit tijdens de installatie niet hebt ingesteld.
  • schakel externe rootgebruikeraanmelding uit door rootaccounts te verwijderen die toegankelijk zijn van buiten de lokale host.
  • verwijder anonieme gebruikersaccounts en test de database die standaard toegankelijk is voor alle gebruikers, zelfs voor anonieme gebruikers.
mysql_secure_installation

Nadat u het programma hebt uitgevoerd, stelt u het rootwachtwoord in en beantwoordt u de reeks vragen door [Ja/Y] in te voeren en op [Enter] te drukken.

2. Bind de databaseserver aan het loopback-adres

Deze configuratie beperkt de toegang vanaf externe machines en vertelt de MySQL-server om alleen verbindingen van binnen de localhost te accepteren. U kunt dit instellen in het hoofdconfiguratiebestand.

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

Voeg de volgende regel hieronder toe onder de sectie [mysqld].

bind-address = 127.0.0.1

3. Schakel LOKAAL INFILE uit in MySQL

Als onderdeel van de beveiliging moet u local_infile uitschakelen om toegang tot het onderliggende bestandssysteem vanuit MySQL te voorkomen met behulp van de volgende richtlijn in de sectie [mysqld].

local-infile=0

4. Wijzig de MYSQL-standaardpoort

De variabele Port stelt het MySQL-poortnummer in dat wordt gebruikt om te luisteren naar TCP/IP-verbindingen. Het standaardpoortnummer is 3306, maar u kunt dit wijzigen onder de sectie [mysqld], zoals weergegeven.

Port=5000

5. Schakel MySQL-logboekregistratie in

Logboeken zijn een van de beste manieren om te begrijpen wat er op een server gebeurt. In het geval van een aanval kunt u eenvoudig alle inbraakgerelateerde activiteiten zien in logbestanden. U kunt MySQL-logboekregistratie inschakelen door de volgende variabele toe te voegen onder de sectie [mysqld].

log=/var/log/mysql.log

6. Stel de juiste toestemming in voor MySQL-bestanden

Zorg ervoor dat u de juiste machtigingen hebt ingesteld voor alle mysql-serverbestanden en gegevensmappen. Het bestand /etc/my.conf zou alleen schrijfbaar moeten zijn voor root. Hierdoor kunnen andere gebruikers de databaseserverconfiguratie niet wijzigen.

chmod 644 /etc/my.cnf

7. Verwijder de MySQL Shell-geschiedenis

Alle opdrachten die u uitvoert op de MySQL-shell worden door de mysql-client opgeslagen in een geschiedenisbestand: ~/.mysql_history. Dit kan gevaarlijk zijn, omdat voor alle gebruikersaccounts die u aanmaakt, alle gebruikersnamen en wachtwoorden die op de shell worden getypt, in het geschiedenisbestand worden vastgelegd.

cat /dev/null > ~/.mysql_history

8. Voer geen MySQL-opdrachten uit vanaf de opdrachtregel

Zoals je al weet, worden alle opdrachten die je op de terminal typt opgeslagen in een geschiedenisbestand, afhankelijk van de shell die je gebruikt (bijvoorbeeld ~/.bash_history voor bash). Een aanvaller die erin slaagt toegang te krijgen tot dit geschiedenisbestand, kan gemakkelijk de daarin opgeslagen wachtwoorden zien.

Het wordt ten zeerste afgeraden om wachtwoorden op de opdrachtregel te typen, bijvoorbeeld dit:

mysql -u root -ppassword_

Wanneer u het laatste gedeelte van het opdrachtgeschiedenisbestand controleert, ziet u het hierboven getypte wachtwoord.

history 

De juiste manier om MySQL aan te sluiten is.

mysql -u root -p
Enter password:

9. Definieer applicatiespecifieke databasegebruikers

Geef voor elke applicatie die op de server draait alleen toegang aan een gebruiker die verantwoordelijk is voor een database voor een bepaalde applicatie. Als u bijvoorbeeld een WordPress-site heeft, kunt u als volgt een specifieke gebruiker voor de database van de WordPress-site maken.

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

en vergeet niet om altijd gebruikersaccounts te verwijderen die niet langer een applicatiedatabase op de server beheren.

10. Gebruik aanvullende beveiligingsplug-ins en bibliotheken

MySQL bevat een aantal beveiligingsplug-ins voor: het verifiëren van pogingen van clients om verbinding te maken met de MySQL-server, wachtwoordvalidatie en het beveiligen van opslag voor gevoelige informatie, die allemaal beschikbaar zijn in de gratis versie.

Meer kunt u hier vinden: https://dev.mysql.com/doc/refman/5.7/en/security-plugins.html

11. Wijzig regelmatig MySQL-wachtwoorden

Dit is een veelvoorkomend stukje informatie/applicatie/systeembeveiligingsadvies. Hoe vaak u dit doet, hangt geheel af van uw interne veiligheidsbeleid. Het kan echter voorkomen dat “snoopers” die uw activiteit gedurende een lange periode hebben gevolgd, toegang krijgen tot uw 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. Update het MySQL Server-pakket regelmatig

Het wordt ten zeerste aanbevolen om mysql/mariadb-pakketten regelmatig te upgraden om op de hoogte te blijven van beveiligingsupdates en bugfixes uit de repository van de leverancier. Normaal gesproken zijn pakketten in de standaardrepository's van het besturingssysteem verouderd.

yum update
apt update

Nadat u wijzigingen heeft aangebracht aan de mysql/mariadb-server, moet u de service altijd opnieuw opstarten.

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

Lees ook: 15 nuttige tips voor het afstemmen en optimaliseren van MySQL/MariaDB-prestaties

Dat is alles! We horen graag van je via het onderstaande reactieformulier. Deel met ons alle MySQL/MariaDB-beveiligingstips die ontbreken in de bovenstaande lijst.