sql >> Database >  >> RDS >> Mysql

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. Nadat de MySQL-server is geïnstalleerd, is deze onveilig in de standaardconfiguratie, en het beveiligen ervan is een van de essentiële taken in algemeen databasebeheer.

Dit zal bijdragen aan het versterken en verbeteren van de algehele Linux-serverbeveiliging, aangezien aanvallers altijd kwetsbaarheden in elk deel van een systeem scannen en databases in het verleden belangrijke doelwitgebieden waren. Een bekend voorbeeld is het brute forceren van het root-wachtwoord voor de MySQL-database.

In deze handleiding leggen we nuttige MySQL/MariaDB . uit best practice voor beveiliging voor Linux.

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 om:

  • stel een wachtwoord in voor het root-account, als je dit niet hebt ingesteld tijdens de installatie.
  • schakel het inloggen van rootgebruikers op afstand uit door rootaccounts te verwijderen die van buiten de lokale host toegankelijk zijn.
  • verwijder anonieme gebruikersaccounts en testdatabase die standaard toegankelijk is voor alle gebruikers, zelfs anonieme gebruikers.
# mysql_secure_installation

Nadat u het hebt uitgevoerd, stelt u het root-wachtwoord in en beantwoordt u de reeks vragen door [Ja/J . in te voeren ] en druk op [Enter] .

2. Bind databaseserver aan loopback-adres

Deze configuratie beperkt de toegang van externe machines, het vertelt de MySQL-server om alleen verbindingen van binnen de localhost te accepteren. U kunt het 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 [mysqld] sectie.

bind-address = 127.0.0.1

3. LOKAAL INFILE uitschakelen 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 instructie onder [mysqld] sectie.

local-infile=0

4. MYSQL-standaardpoort wijzigen

De Poort variabele stelt het MySQL-poortnummer in dat wordt gebruikt om te luisteren op TCP/IP-verbindingen. Het standaard poortnummer is 3306 maar je kunt het veranderen onder de [mysqld] sectie zoals weergegeven.

Port=5000

5. MySQL-logboekregistratie inschakelen

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

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. De /etc/my.conf bestand zou alleen naar root moeten kunnen worden geschreven. Dit blokkeert andere gebruikers van het wijzigen van databaseserverconfiguraties.

# chmod 644 /etc/my.cnf

7. MySQL Shell-geschiedenis verwijderen

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

# cat /dev/null > ~/.mysql_history

8. Voer geen MySQL-opdrachten uit vanaf de opdrachtregel

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

Het wordt sterk afgeraden om wachtwoorden op de opdrachtregel te typen, zoiets als 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 te verbinden is.

# mysql -u root -p
Enter password:

9. Definieer toepassingsspecifieke 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, maakt u als volgt een specifieke gebruiker voor de wordpress-sitedatabase aan.

# mysql -u root -p
MariaDB [(none)]> CREATE DATABASE osclass_db;
MariaDB [(none)]> CREATE USER 'osclassdmin'@'localhost' IDENTIFIED BY '[email protected]%!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. Extra beveiligingsplug-ins en bibliotheken gebruiken

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

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

11. Verander regelmatig MySQL-wachtwoorden

Dit is een veelvoorkomend advies voor informatie/applicaties/systeembeveiliging. Hoe vaak u dit doet, hangt volledig 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-serverpakket regelmatig

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

# yum update
# apt update

Start de service altijd opnieuw nadat u wijzigingen heeft aangebracht aan de mysql/mariadb-server.

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

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.


  1. De functie lower() voor internationale tekens in postgresql

  2. Introductie van nieuwe functie:Always On-beschikbaarheidsgroep

  3. Hoe mysql JOIN te gebruiken zonder ON-voorwaarde?

  4. AMD EPYC-processors in virtuele Azure-machines