MySQL är ett av de mest populära relationsdatabashanteringssystemen som är en jackpott för angripare som försöker smyga sig in i databaserna. En nyinstallerad MySQL-databasserver kan ha många sårbarheter och kryphål. Eftersom datasäkerhet är av stor vikt är det obligatoriskt att förstå alla aspekter av MySQL-säkerhet.

Den här artikeln fokuserar på granskning och säkerhet för din MySQL-databas och ger nio tips för att stärka dess säkerhet.

1. Undvik onödiga privilegiebidrag

MySQL tillåter flera privilegiesatser som när de tilldelas i onödan till en underprivilegierad användare kan leda till att läsa/skriva filer och undergräva andra användarprivilegier. Några av de mest potentiellt riskfyllda privilegiesatserna är FILE, GRANT, SUPER, ALTER, DELETE, SHUTDOWN, och så vidare. Du kan läsa mer om dessa från MySQL officiella dokumentation. Tilldela därför inte superanvändarprivilegier som FILE, GRANT, SUPER och PROCESS till icke-administrativa konton. Du kan återkalla dessa onödiga behörigheter på global nivå, databas och tabellnivå enligt följande:

instagram viewer
REVOKE ALL ON *.* FROM 'user_name'@'host_name'; #Globala privilegier
REVOKE CREATE, DROP ON database_name.* FRÅN 'user_name'@'host_name'; #Databasrättigheter
REVOKE INSERT, UPDATE, DELETE ON database_name.table_name FRÅN 'användarnamn'@'värdnamn'; #Bordsprivilegier
spola privilegier;

2. Begränsa fjärrinloggningar

Fjärråtkomst underlättar jobbet för databasadministratörer, men det riskerar servern för potentiella sårbarheter och utnyttjande. Du kan inaktivera fjärråtkomst för alla typer av MySQl-användarkonton genom att lägga till en skip-nätverksvariabel till huvudkonfigurationsfilen och starta om tjänsten.

[mysqld]
hoppa över nätverk
sudo service mysql omstart

På samma sätt måste du inaktivera root-kontoåtkomst, om inte allt för att begränsa fjärrinloggningar för root-kontot. Denna försiktighetsåtgärd förhindrar bruteforcing av MySQL-rotkontot.

mysql> ta bort från mysql.user där user='root' och värd inte är med ('localhost', '127.0.0.1', '::1'); mysql> spola privilegier; 

3. Inaktivera funktioner (load_file, outfile, dumpfile)

En annan försiktighetsåtgärd för att säkra MySQL mot lokal filinjektion är att inaktivera funktioner som endast är tillgängliga via FILE-behörigheten. FIL är ett alternativ som gör det möjligt för användare med låg privilegie med globala kommandoalternativ att läsa eller skriva filer på servern.

  • ladda_fil

Funktionen load_file laddar filinnehållet från servern som en sträng. Till exempel kommer följande kommando att ladda allt innehåll från /etc/passwd fil enligt följande:

välj load_file('/etc/passwd')
  • utfil

På liknande sätt skriver outfile-funktionen innehåll till de lokala serverfilerna. Angripare kan använda den här funktionen för att skriva en nyttolast till filen på servern, enligt följande:

välj 'Local File SQL Injection' i outfilen '/tmp/file.txt';
cat /tmp/fil.txt

Produktion:

Lokal fil SQL-injektion
  • dumpfil

Den här funktionen använder valorsaken för att skriva till filen utan att returnera utdata till skärmen.

cat /tmp/fil.txt
välj "Hej värld!" till dumpfilen '/tmp/world';

Produktion:

Fråga OK, 1 rad påverkad (0,001 sek)

Du kan inaktivera dessa funktioner genom att återkalla FILE-privilegiet enligt följande:

återkalla FIL på *.* från 'användarnamn'@'localhost';

Relaterad: En nybörjarguide till Metasploit i Kali Linux (med praktiska exempel)

4. Inaktivera standardport

Vi vet att MySQL-tjänster körs på port 3306, och angripare skannar portarna för att kontrollera tjänster som körs på nätverket. För att lägga till säkerhet genom otydlighet och ändra MySQL-standardporten genom att redigera portsystemvariabeln i dess huvudkonfigurationsfil, måste du ange följande:

vim /etc/mysql/my.cnf
port=XXXX
sudo service mysql omstart

5. Undvik jokertecken i kontonamn

Kontonamn i MySQL består av två delar som är en användare och ett värdnamn "användarnamn"@"värdnamn". Det gör det möjligt för administratören att skapa konton för användare med samma namn som ansluter från olika värdar. Värddelen av ett kontonamn tillåter dock jokerteckenkonventioner som kan vara en åtkomstpunkt till databasen var som helst.

Den valfria användningen av värdnamnet eller IP-adressvärdet motsvarar 'user_name'@'%' där % matchar MySQL-mönster som matchar LIKE-operationen och % betyder vilket värdnamn som helst. Samtidigt betyder åtkomst från '192.168.132.%' alla försök från klass C-nätverket. Dessutom kan vem som helst komma åt databasen genom att namnge värddelen som '192.18.132.mysql.com'.

För att undvika sådana försök tillåter MySQL att definiera en nätmask med värdvärdet för att identifiera nätverksbitarna för en IP-adress:

client-ip_add & nätmask = host_name

Syntaxen för att skapa ett värdnamn är host_ip/netmask:

SKAPA ANVÄNDARE 'jhon'@'192.168.132.0/255.255.255.0'; 

Ovanstående värdvärde gör det möjligt för användaren john för att komma åt databasen från vilken IP-adress som helst inom intervallet 192.168.132.0-192.168.132.255. På liknande sätt tillåter värdvärdena 192.168.132.0/255.0.0.0, 192.168.132.0/255.255.0.0 värdar från klass A- och B-nätverken. Medan 192.168.132.5 endast tillåter åtkomst från den specifika IP-adressen.

6. Inaktivera explicit åtkomst

Användarnamnet i MySQL är antingen ett namn med vilket databaserna accepterar inkommande anslutningar eller ett tomt användarnamn "@"värdnamn" som skapar en anonym användare. Däremot kan närvaron av en anonym användare utnyttja angripare för att komma åt databasservern. Dessutom skapar MySQL-versioner före MySQL 5.7 en anonym uppsättning användare, och installation efter versionsuppgradering lägger fortfarande till dessa användare.

välj användare, värd, lösenord från mysql.user där användaren gillar '';

Du kan notera att användar- och lösenordskolumnerna är tomma och åtkomsten är begränsad till localhost. Du vill dock inte att någon ska komma åt databasen. Använd följande kommando för att ta bort anonyma användare:

släpp användaren " "@"localhost"
spola privilegier;

7. Ställ in icke-rootkonto som ägare eller grupp

Att ställa in ett icke-rootanvändarkonto är inte relaterat till MySQL-rootanvändaren. MySQL-installation i Linux/Unix-system från tar och tar.gz-paket tillåter servern att köras av alla underprivilegierade användare. Detta är en säkerhetsnack eftersom alla användare med alternativet FIL-beviljande kan redigera eller skapa filer på servern. Det returnerar dock ett fel när en användare försöker komma åt det utan -användare=rot fel.

Du kan undvika detta genom att öva på tumregeln att komma åt databasservern som en separat Linux-användare. För att köra mysqld som en vanlig Linuxanvändare, stoppa servern och ändra läs-/skrivbehörigheter av MySQl-servern till mysql, enligt följande:

chown -R mysql /sökväg/till/mysql/datadir

Öppna MySQL-huvudkonfigurationsfilen, lägg till en ny mysql-användare och starta om tjänsten för att undvika onödig serveråtkomst:

vim /etc/mysql/my.cnf
user=mysql
sudo service mysql omstart

8. Ange lösenord för rotkonto

MySQL-installation via ett interaktivt skal i Debian-baserade Linux-distributioner skapar root-användarkontot och ber dig ställa in ett lösenord. Detta händer dock inte i icke-interaktiv skalinstallation och Red-Hat-baserade distributioner. Som nämnts ovan kan en icke-root-användare av en Linux-maskin komma åt mysql root-användarkonto genom att använda -användare=rot alternativ. Du kan undvika det genom att ställa in lösenordet enligt följande:

sudo mysqladmin lösenord
vim /etc/mysql/my.cnf
lösenord=
sudo service mysql omstart

9. Säkerställ datakryptering i transit och i vila

Den okrypterade standardkommunikationen mellan klienten och servern utgör en risk för dataavlyssning av vilken man som helst i mitten. På samma sätt riskerar okrypterad användardata i databasen användarens konfidentialitet och integritet. MySQL stöder datakryptering mellan klienten och servern över TLS/SSL-protokoll, medan okrypterad kommunikation endast är acceptabel när båda kommunicerande parter är inom samma nätverk.

MySQL stöder nu kryptering i vila för att skydda data som lagras på servern även när systemet bryts.

MySQL Advanced Security: Skydda dig själv

Att se till att du har de högsta nivåerna av onlinesäkerhet är avgörande, och den här artikeln kommer att ha gett dig några användbara tips i rätt riktning. Ovanstående steg är användbara för att säkra din databasserver, men det är också viktigt att lära sig hur man tilldelar minimibehörigheter till icke-administrativa användare.

Nybörjarguide för att skriva mySQL-databasscheman

Skapa din egen mySQL-databas med bara en textredigerare och denna grundläggande strukturkontur, eller "schema".

Läs Nästa

Dela med sigTweetE-post
Relaterade ämnen
  • Programmering
  • säkerhet
  • Programmering
  • Säkerhetstips
  • säkerhet
Om författaren
Rumaisa Niazi (15 publicerade artiklar)

Rumaisa är frilansskribent på MUO. Hon har burit många hattar, från en matematiker till en informationssäkerhetsentusiast, och arbetar nu som SOC-analytiker. Hennes intressen inkluderar att läsa och skriva om ny teknik, Linux-distributioner och allt kring informationssäkerhet.

Mer från Rumaisa Niazi

Prenumerera på vårt nyhetsbrev

Gå med i vårt nyhetsbrev för tekniska tips, recensioner, gratis e-böcker och exklusiva erbjudanden!

Klicka här för att prenumerera