Håll dina MySQL-databaser säkra genom att skapa separata användare och behörigheter

Jag har alltid varit en vän med god praxis, mycket mer om de hjälper oss att upprätthålla säkerheten för våra servrar, tjänster eller helt enkelt vår information.

En vana (dålig vana) som många administratörer eller användare har är att använda åtkomst med rot för alla databaser, det vill säga ... de installerar en webbplats med WordPress CMS och som åtkomstdata till databasen (för att WP ska använda MySQL-servern och använda dess DB) sätter de MySQL-serveradministrationsanvändaren: root

Dessutom installerar de alla andra webbapplikationer (en chatt, klistra in, forum, etc) och gör detsamma, de använder alltid rotanvändaren av MySQL ...

FEL!!!

Detta är helt enkelt en dödlig vana.

Antag att vi har följande tjänster på en server:

  1. En webbplats eller portal som använder WordPress.
  2. Vårt supportforum, samtal, etc ... en hel gemenskap.
  3. En FTP som använder en MySQL-databas för att lagra användare och lösenord.
  4. E-postanvändarna lagras (användare och lösenord) i en MySQL-databas.
  5. En liten WebChat som vi installerar för att chatta med någon du känner.

Och i alla av dem, i de 5 tjänsterna använder vi rotanvändaren av MySQL så att varje tjänst får åtkomst till och sparar data i motsvarande databas.

En skön dag, någon av de många troll där ute, men det här är inte bara ett troll, utan det bemästrar också vissa exploateringar, sårbarheter, hacking osv ... beslutar att göra något skadligt för oss.

Hitta ett fel i WebChat som vi använder, utnyttjar detta fel, det lyckas komma åt WebChat-filer, inklusive WebChat-konfigurationsfilen, och ... i den här filen är uppenbarligen användarnamnet och lösenordet som WebChat använder för att komma åt MySQL-server och gissa vad? ... Det är inget mer och inget mindre ROTTANVÄNDAREN!

Genom att få denna information på ett mycket enkelt sätt kan trollet:

  1. Ta bort oss och / eller stjäla allt som har med den webbplats eller portal som vi har (WordPress).
  2. Du kan radera och / eller stjäla information från oss OCH från våra användare som använder forumet, den gemenskap vi skapar.
  3. Du kan också stjäla användarnamnet och lösenordet för ALLA användare som har ett e-postkonto på vår server, samt stjäla informationen från deras e-postmeddelanden, efterlikna etc.
  4. Och nu kan du äntligen använda ett konto på vår FTP-server och ladda upp alla filer som innehåller skadlig kod, vilket gör att du kan få ABSOLUT och TOTAL kontroll över vår server.

Tja ... vad tycker du? ... 🙂

Ser du allt som kan hända bara genom att inte skapa oberoende användare för varje databas vi har?

Detta är INTE en överdrift vänner, detta kan hända med otrolig lätthet ... ja, allt som behövs för att släppa loss katastrofen är bara ett fel i en av de webbapplikationer som du har installerat.

Nu…

Hur skapar jag separata MySQL-användare för varje webbapplikation?

Först måste vi gå in i MySQL-servern med rotanvändaren, eftersom han är den som har behörighet att skapa databaser, skapa behörigheter, skapa användare, etc:

mysql -u root -p

När de skriver ovanstående och trycker på [Stiga på] De kommer att bli ombedda om lösenordet för MySQL-rotanvändaren, de skriver det och trycker på [Stiga på] igen kommer du omedelbart att visas något så här: Nu skapar vi en databas med namnet «webbchatdb':
CREATE DATABASE webchatdb;

Lägg märke till semikolonet «;»I slutet av raden.

Klar, du har redan skapat databasen, nu ska vi fortsätta skapa användaren «webbchatanvändare«Med lösenordet«lösenorddelputowebchat':

CREATE USER 'webchatuser'@'localhost' IDENTIFIED BY 'passworddelputowebchat';

Nu magiken ... vi kommer att ge alla privilegier (läs och skriv) att webbchatanvändare ENDAST i DB webbchatdb:

GRANT ALL PRIVILEGES ON webchatdb.* TO 'webchatuser'@'localhost' WITH GRANT OPTION;

Och voila, användaren har redan behörigheterna i den databasen ... det återstår bara att uppdatera behörigheterna till MySQL, det vill säga säga till MySQL att läsa igenom användarnas behörigheter eftersom vi just har gjort en förändring i dem:

FLUSH PRIVILEGES ;

Jag lämnar en skärmdump: Och det här har varit allt. Genom att göra detta för varje webbapplikation som vi använder garanterar vi att om de lyckas bryta mot en av dessa webbapplikationer, kommer de andra att vara säkra (åtminstone ur MySQL-synvinkel)

Vad är en bra praxis? 😉

Jag hoppas att det har varit så användbart för dig som det är för mig, eftersom jag försökte förklara det så enkelt som jag kunde.

hälsningar


Innehållet i artikeln följer våra principer om redaktionell etik. Klicka på för att rapportera ett fel här.

15 kommentarer, lämna din

Lämna din kommentar

Din e-postadress kommer inte att publiceras.

*

*

  1. Ansvarig för uppgifterna: Miguel Ángel Gatón
  2. Syftet med uppgifterna: Kontrollera skräppost, kommentarhantering.
  3. Legitimering: Ditt samtycke
  4. Kommunikation av uppgifterna: Uppgifterna kommer inte att kommuniceras till tredje part förutom enligt laglig skyldighet.
  5. Datalagring: databas värd för Occentus Networks (EU)
  6. Rättigheter: När som helst kan du begränsa, återställa och radera din information.

  1.   Martin sade

    Bra inlägg KZKG, om det var i forumet skulle jag be om en klibbig!

    1.    KZKG ^ Gaara sade

      Tack 😀

      1.    Kubaröd sade

        Lösenordet du lägger till för webbchatten är bra, en annan sak som har att göra med mysql är användningen av dess minne

  2.   Hyuuga_Neji sade

    Hehehe, tack för att du påminner mig om MySQL-kommandona. Låt oss nu se om "jag lägger lite säkerhet" på World of Warcraft-serverdatabasen som jag har på mitt LAN.

  3.   sieg84 sade

    min kunskap om detta är noll, men det är nästan detsamma för när jag använder MySQL för Amarok?
    SKAPA DATABAS amarokdb;
    BEVILJA ALLA PRIVILEGER PÅ amarokdb. * TILL 'amarokuser' IDENTIFIERAT MED 'lösenord'; FLUSH PRIVILEGES;

    1.    KZKG ^ Gaara sade

      Jag har inte använt Amarok på länge, men om du använder en DB som är MySQL, ska det i teorin också fungera så.

  4.   Carlos Andres Restrepo sade

    Hej, det skulle vara bra om du skapade en post för säkerhet mot webbservrar i Linux, många av dem har inte rätt säkerhet och administratören av samma sak är inte en expert, de gör bara saker lättare för dem, till exempel användning av symlink på servrarna gör det möjligt att läsa konfigurationsfilerna för andra konton på samma server många administratörer är inte medvetna om detta och det är därför webbplatsens defaces sprids

    hälsningar

    1.    KZKG ^ Gaara sade

      Hallå där,
      Välkommen till sajten 🙂

      Egentligen betraktar jag mig inte som en expert i denna fråga, men jag kommer att försöka bidra med den lilla kunskap som jag har fått genom åren 🙂

      En annan sak som inte många nätverksadministratörer gör är att ge behörigheter till webbplatser med apache individuellt, det vill säga användaren och gruppera www-data (eller liknande), vilket är en annan för varje webbplats, och i sin tur bur varje av dessa .

      hälsningar

  5.   hackloper775 sade

    Bra tips

    hälsningar

    1.    KZKG ^ Gaara sade

      Tack

  6.   nano sade

    Jag hatar utseendet på din terminal, bakgrundsbokstäverna tar mig ur min koncentration. Du är en jävla galen xD

    Utanför det är det intressant eftersom jag har sett patetiska fall av serviceavbrott från dessa saker.

    Nu beror det inte bara på det, säkerheten ligger i hur databasen byggdes, förklarade en lärare för mig, men jag är inte mycket nedsänkt i DB ännu ... vi borde röra med MongoDB = D en av dessa dagar

  7.   Carlos överste sade

    just det hände mig idag med min hyrda server

    Jag följde dina steg, jag gick till cpanel och letade efter MYSQL-databasen och den säger att den inte är i ordning.

    Jag vet inte hur jag ska gå in nu under rotanvändaren
    Jag är en neofyt i detta, men när du läser här lär du dig mycket, jag hoppas att du vägleder mig att komma åt

    1.    KZKG ^ Gaara sade

      Hej 🙂
      Vad du har är ett Hosting (SharedHosting) eller en VPS (virtuell server)?

      Om du har en webbhotell och inte en VPS, bör du se om din webbhotell har SSH-åtkomst (kontakta den tekniska supporten för företaget som sålde värd för dig och fråga dem hur du kommer åt via SSH), när du har angett via SSH kommer användaren INTE att vara root, men du måste använda den användare du angav när du installerade webbapplikationen.

      Egentligen ditt är ett komplicerat ämne, för varianterna och möjligheterna är såååå många, jag rekommenderar att du öppnar ett nytt ämne i vårt forum, där blir det bekvämare att hjälpa dig - » http://foro.desdelinux.net

      Hälsningar 😀

  8.   bossbrondem sade

    bra,

    Jag förstår att det är bra praxis att inte ge alla användare behörigheter utom root. Men eftersom jag installerade phpmyadmin har en ny användare "phpmyadmin" skapats med alla behörigheter. Det verkar logiskt att så är fallet, eftersom det bara är en grafisk version att hantera databaser i MySQL. Hur som helst skulle jag vilja se till om det är bra som det är eller ska jag göra några ändringar i privilegierna för användaren "phpmyadmin".

    Hälsningar och tack!

  9.   emmanuel sade

    Excellent…
    Jag är en av dem som gör allt med rot, men du har öppnat mina ögon vän ..
    Tack så mycket…