Houd uw MySQL-databases veilig door afzonderlijke gebruikers en machtigingen aan te maken

Ik ben altijd een vriend van goede praktijken geweest, veel meer als ze ons helpen de veiligheid van onze servers, services of gewoon onze informatie te behouden.

Een gewoonte (slechte gewoonte) die veel beheerders of gebruikers hebben, is om toegang mee te gebruiken wortel voor alle databases, dat wil zeggen ... ze installeren een site met behulp van het WordPress CMS, en als toegangsgegevens tot de database (voor WP om de MySQL-server te gebruiken en de database ervan te gebruiken) zetten ze de MySQL-serverbeheerder: root

Ze installeren ook elke andere webtoepassing (een chat, plak, forum, enz.) En doen hetzelfde, ze gebruiken altijd de rootgebruiker van MySQL ...

FOUT!!!

Dit is gewoon een fatale gewoonte.

Stel dat we de volgende services op een server hebben:

  1. Een site of portal die WordPress gebruikt.
  2. Ons ondersteuningsforum, lezingen, enz ... een hele gemeenschap.
  3. Een FTP die een MySQL-database gebruikt om gebruikers en wachtwoorden op te slaan.
  4. De e-mailgebruikers worden opgeslagen (gebruikers en wachtwoorden) in een MySQL-database.
  5. Een kleine WebChat die we installeren om te chatten met iemand die je kent.

En in al deze services gebruiken we in de 5 services de rootgebruiker van MySQL, zodat elke service toegang heeft tot de gegevens en deze opslaat in de bijbehorende database.

Op een mooie dag besluit een van de vele trollen die er zijn, maar dit is niet alleen een trol, maar hij beheerst ook enkele exploits, kwetsbaarheden, hacking, enz. ... besluit iets schadelijk voor ons te doen.

Zoek een bug in de WebChat die we gebruiken, gebruikmakend van deze bug, het lukt het om toegang te krijgen tot WebChat-bestanden, inclusief het WebChat-configuratiebestand, en ... in dit bestand zijn uiteraard de gebruikersnaam en het wachtwoord dat de WebChat gebruikt om toegang te krijgen tot de MySQL-server, en wat denk je? … Het is niets meer en niets minder de ROOTGEBRUIKER!

Door deze informatie te verkrijgen, kan de trol op een heel eenvoudige manier:

  1. Verwijder ons en / of steel alles gerelateerd aan de site of portal die we hebben (WordPress).
  2. U kunt informatie van ons EN van onze gebruikers die het forum gebruiken, de community die we maken, verwijderen en / of stelen.
  3. U kunt ook de gebruikersnaam en het wachtwoord stelen van ALLE gebruikers die een e-mailaccount op onze server hebben, evenals de informatie uit hun e-mails stelen, zich nabootsen, enz.
  4. En nu kunt u eindelijk een account op onze FTP-server gebruiken en elk bestand uploaden dat malware bevat, waardoor u ABSOLUTE en TOTALE controle over onze server krijgt.

Nou, wat denk jij? … 🙂

Zie je wat er allemaal kan gebeuren door niet voor elke database die we hebben onafhankelijke gebruikers te maken?

Dit is GEEN overdrijving vrienden, dit kan met verbazingwekkend gemak gebeuren ... nou, alles wat nodig is om de catastrofe te veroorzaken, is slechts een bug in sommige van de webtoepassingen die je hebt geïnstalleerd.

Nu…

Hoe afzonderlijke MySQL-gebruikers aanmaken voor elke webtoepassing?

Eerst moeten we de MySQL-server invoeren met de rootgebruiker, aangezien hij degene is die de rechten heeft om databases te maken, machtigingen vast te stellen, gebruikers aan te maken, enz.:

mysql -u root -p

Wanneer ze het bovenstaande schrijven en op drukken [Enter] Ze zullen om het wachtwoord van de MySQL-rootgebruiker worden gevraagd, ze typen het en drukken op [Enter] nogmaals, je krijgt onmiddellijk zoiets te zien:

Nu gaan we een database maken met de naam «webchatdb":
CREATE DATABASE webchatdb;

Let op de puntkomma «;»Aan het einde van de lijn.

Klaar, je hebt de database al aangemaakt, laten we nu de gebruiker aanmaken «webchatgebruiker«Met het wachtwoord«wachtwoorddelputowebchat":

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

Nu de magie ... we zullen alle privileges (lezen en schrijven) aan webchatgebruiker ALLEEN in de DB webchatdb:

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

En voila, de gebruiker heeft al de permissies in die database ... nu blijft het alleen om de permissies voor MySQL te vernieuwen, dat wil zeggen, vertel MySQL om de privileges van de gebruikers opnieuw te lezen omdat we er zojuist een wijziging in hebben aangebracht:

FLUSH PRIVILEGES ;

Ik laat een screenshot achter:

En dit is alles geweest. Door dit te doen voor elke webapplicatie die we gebruiken, garanderen we dat als ze erin slagen een van die webapplicaties te schenden, de andere veilig zijn (tenminste vanuit MySQL-oogpunt)

Wat is een goede praktijk? 😉

Ik hoop dat het voor jou net zo nuttig is geweest als voor mij, want ik heb geprobeerd het zo eenvoudig mogelijk uit te leggen.

groeten


Laat je reactie achter

Uw e-mailadres wordt niet gepubliceerd. Verplichte velden zijn gemarkeerd met *

*

*

  1. Verantwoordelijk voor de gegevens: Miguel Ángel Gatón
  2. Doel van de gegevens: Controle SPAM, commentaarbeheer.
  3. Legitimatie: uw toestemming
  4. Mededeling van de gegevens: De gegevens worden niet aan derden meegedeeld, behalve op grond van wettelijke verplichting.
  5. Gegevensopslag: database gehost door Occentus Networks (EU)
  6. Rechten: u kunt uw gegevens op elk moment beperken, herstellen en verwijderen.

  1.   Martin zei

    Goed bericht KZKG, als het op het forum was, zou ik om een ​​plakker vragen!

    1.    KZKG ^ Gaara zei

      Bedankt 😀

      1.    CubaRood zei

        Het wachtwoord dat je invoert voor de webchat is goed, een ander ding dat te maken heeft met mysql is het gebruik van het geheugen

  2.   Hyuuga_Neji zei

    Hehehe, bedankt dat je me herinnert aan de MySQL-commando's. Laten we nu eens kijken of "ik wat beveiliging heb gezet" op de World of Warcraft-serverdatabase die ik op mijn LAN heb.

  3.   sieg84 zei

    mijn kennis hierover is nihil, maar het is bijna hetzelfde voor het gebruik van MySQL voor Amarok?
    DATABASE MAKEN amarokdb;
    VERLEENT ALLE VOORRECHTEN OP amarokdb. * AAN 'amarokuser' GEÏDENTIFICEERD DOOR 'wachtwoord'; VOORRECHTEN VOOR SPOELEN;

    1.    KZKG ^ Gaara zei

      Ik heb Amarok al heel lang niet gebruikt, maar als je een DB gebruikt die MySQL is, zou het in theorie ook zo moeten werken.

  4.   Carlos Andres Restrepo zei

    Hallo, het zou goed zijn als je een item zou maken voor beveiliging tegen webservers in Linux, veel van hen hebben niet de juiste beveiliging en de beheerder ervan is niet echt een expert, ze vergemakkelijken alleen dingen, bijvoorbeeld het gebruik van symlink in de servers maakt het mogelijk om de configuratiebestanden van andere accounts op dezelfde server te lezen, veel beheerders zijn zich hier niet van bewust en dat is de reden waarom website-defaces zich verspreiden

    groeten

    1.    KZKG ^ Gaara zei

      Hallo daar,
      Welkom op de site 🙂

      Ik beschouw mezelf bij lange na niet echt als een expert op dit gebied, maar ik zal proberen de weinige kennis die ik in de loop der jaren heb opgedaan bij te dragen 🙂

      Een ander ding dat niet veel netwerkbeheerders doen, is het geven van privileges aan sites met afzonderlijk apache, dat wil zeggen, de gebruiker en de groep www-data (of vergelijkbaar), die voor elke site een andere is, en op hun beurt elk van deze .

      groeten

  5.   hackloper775 zei

    Goed advies

    groeten

    1.    KZKG ^ Gaara zei

      Bedankt

  6.   nano zei

    Ik HAAT het uiterlijk van je terminal, de achtergrondletters halen me uit mijn concentratie. Je bent een verdomde gekke xD

    Buiten dat is het interessant omdat ik zielige gevallen van serviceonderbreking van die dingen heb gezien.

    Nu, het hangt er niet alleen van af, de veiligheid zit hem in de manier waarop de database is gebouwd, legde een leraar me uit, maar ik ben nog niet erg ondergedompeld in de database ... we zouden moeten rommelen met MongoDB = D een van deze dagen

  7.   Carlos Kolonel zei

    net dat is mij vandaag overkomen met mijn gehuurde server

    Ik volgde je stappen, ik ging naar cpanel en zocht de MYSQL-database en het vertelt me ​​dat het niet werkt.

    Ik weet niet hoe ik nu moet invoeren onder de rootgebruiker
    Ik ben hierin een neofiet, maar als je hier leest, leer je veel, ik hoop dat je me helpt toegang te krijgen

    1.    KZKG ^ Gaara zei

      Hallo 🙂
      Wat je hebt is een Hosting (SharedHosting) of een VPS (virtuele server)?

      Als je een Hosting hebt en geen VPS, dan zou je moeten kijken of je Hosting SSH-toegang heeft (neem contact op met de technische ondersteuning van het bedrijf dat u de hosting heeft verkocht en vraag hen hoe u toegang kunt krijgen via SSH), als je eenmaal binnenkomt via SSH, zal de gebruiker GEEN root zijn, maar je moet de gebruiker gebruiken die je hebt ingevoerd toen je die webtoepassing installeerde.

      Eigenlijk is het jouwe een gecompliceerd onderwerp, omdat de varianten en mogelijkheden zoooooo veel zijn, raad ik je aan een nieuw onderwerp op ons forum te openen, daar zal het gemakkelijker zijn om je te helpen - » http://foro.desdelinux.net

      Groeten 😀

  8.   bossbrondem zei

    goed,

    Ik begrijp dat het een goede gewoonte is om niet alle rechten aan een gebruiker te geven behalve aan root. Sinds ik phpmyadmin heb geïnstalleerd, is er echter een nieuwe gebruiker "phpmyadmin" gemaakt met alle rechten. Het lijkt logisch dat dit het geval is, aangezien het slechts een grafische versie is om de databases in MySQL te beheren. Hoe dan ook, ik zou er zeker van willen zijn of het in orde is zoals het is of dat ik een wijziging moet aanbrengen in de rechten van de gebruiker "phpmyadmin".

    Groetjes en bedankt!

  9.   Emmanuel zei

    Uitstekend…
    Ik ben een van degenen die alles met root doen, maar je hebt mijn ogen geopend vriend ..
    hartelijk dank…