Păstrați bazele de date MySQL în siguranță prin crearea de utilizatori și permisiuni separate

Am fost întotdeauna prietenul bunelor practici, cu atât mai mult dacă ne ajută să menținem securitatea serverelor, serviciilor sau pur și simplu informațiilor noastre.

Un obicei (rău obicei) pe care îl au mulți administratori sau utilizatori este acela de a folosi accesul rădăcină pentru toate bazele de date, adică ... instalează un site folosind WordPress CMS și ca date de acces la baza de date (pentru ca WP să folosească serverul MySQL și să-și folosească DB-ul) pun utilizatorului de administrare a serverului MySQL : rădăcină

De asemenea, instalează orice altă aplicație web (chat, paste, forum etc.) și fac același lucru, folosesc întotdeauna utilizatorul root al MySQL ...

EROARE!!!

Acesta este pur și simplu un obicei fatal.

Să presupunem că avem următoarele servicii pe un server:

  1. Un site sau portal care utilizează WordPress.
  2. Forumul nostru de sprijin, discuții, etc ... o întreagă comunitate.
  3. Un FTP care utilizează o bază de date MySQL pentru a stoca utilizatori și parole.
  4. Utilizatorii de e-mail sunt stocate (utilizatori și parole) într-o bază de date MySQL.
  5. Un mic WebChat pe care îl instalăm pentru a discuta cu cineva pe care îl cunoașteți.

Și în toate, în cele 5 servicii folosim utilizatorul root MySQL astfel încât fiecare serviciu să acceseze și să salveze datele în baza sa de date corespunzătoare.

Într-o bună zi, oricare dintre numeroasele trolluri de acolo, dar acesta nu este doar un troll, dar stăpânește și unele exploate, vulnerabilități, hacking, etc ... decide să facă ceva dăunător pentru noi.

Găsiți o eroare în WebChat pe care o folosim, profitând de această eroare, reușește să acceseze fișierele WebChat, inclusiv fișierul de configurare WebChat și ... în acest fișier, evident, este numele de utilizator și parola pe care WebChat le folosește accesați serverul MySQL și ghiciți ce? … Nu este nimic mai mult și nimic mai puțin UTILIZATORUL ROOT!

Obținând aceste informații, într-un mod foarte simplu, trollul poate:

  1. Ștergeți-ne și / sau furați tot ce are legătură cu site-ul sau portalul pe care îl avem (WordPress).
  2. Puteți șterge și / sau fura informații de la noi ȘI de la utilizatorii noștri care folosesc Forumul, comunitatea pe care o creăm.
  3. De asemenea, puteți fura numele de utilizator și parola TOȚI utilizatorii care au un cont de e-mail pe serverul nostru, precum și să furați informațiile din e-mailurile lor, identificați etc.
  4. Și acum, în sfârșit, puteți utiliza un cont pe serverul nostru FTP și puteți încărca orice fișier care conține programe malware, ceea ce vă va permite să obțineți controlul ABSOLUT și TOTAL al serverului nostru.

Ei bine ... ce crezi? ... 🙂

Vedeți tot ce se poate întâmpla doar prin a nu crea utilizatori independenți pentru fiecare bază de date pe care o avem?

Aceasta nu este o exagerare prieteni, acest lucru se poate întâmpla cu o ușurință uimitoare ... ei bine, tot ce este necesar pentru a dezlănțui catastrofa este doar o eroare în una dintre aplicațiile web pe care le-ați instalat.

Acum…

Cum se creează utilizatori MySQL separați pentru fiecare aplicație web?

Mai întâi trebuie să introducem serverul MySQL împreună cu utilizatorul root, deoarece acesta este cel care are privilegiile de a crea baze de date, de a stabili permisiuni, de a crea utilizatori etc.:

mysql -u root -p

Când scriu cele de mai sus și apasă [Introduce] Li se va cere parola utilizatorului root MySQL, o tastează și apasă [Introduce] din nou, vi se va arăta instantaneu așa ceva:

Acum vom crea o bază de date numită «webchatdb„:
CREATE DATABASE webchatdb;

Observați punct și virgula «;»La sfârșitul liniei.

Gata, ați creat deja baza de date, acum să creăm utilizatorul «webchatuser«Cu parola«paroladelputowebchat„:

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

Acum magia ... vom acorda toate privilegiile (citiți și scrieți) webchatuser DOAR în DB webchatdb:

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

Și voilă, utilizatorul are deja permisiunile în baza de date ... acum rămâne doar să reîmprospătați permisiunile către MySQL, adică spuneți MySQL să recitească privilegiile utilizatorilor, deoarece tocmai am făcut o modificare în ele:

FLUSH PRIVILEGES ;

Vă las o captură de ecran:

Și asta a fost totul. Procedând astfel pentru fiecare aplicație web pe care o folosim, garantăm că în cazul în care reușesc să încalce una dintre acele aplicații web, celelalte vor fi în siguranță (cel puțin din punctul de vedere MySQL)

Ce este o bună practică? 😉

Sper că ți-a fost la fel de util pentru mine, pentru că am încercat să-l explic cât de simplu am putut.

În ceea ce priveşte


Lasă comentariul tău

Adresa ta de email nu va fi publicată. Câmpurile obligatorii sunt marcate cu *

*

*

  1. Responsabil pentru date: Miguel Ángel Gatón
  2. Scopul datelor: Control SPAM, gestionarea comentariilor.
  3. Legitimare: consimțământul dvs.
  4. Comunicarea datelor: datele nu vor fi comunicate terților decât prin obligație legală.
  5. Stocarea datelor: bază de date găzduită de Occentus Networks (UE)
  6. Drepturi: în orice moment vă puteți limita, recupera și șterge informațiile.

  1.   Martin el a spus

    Bun post KZKG, dacă ar fi pe forum aș cere un lipicios!

    1.    KZKG ^ Gaara el a spus

      Mulțumesc 😀

      1.    CubaRed el a spus

        Parola pe care ați pus-o pentru webchat este bună, un alt lucru care are legătură cu mysql este utilizarea memoriei sale

  2.   Hyuuga_Neji el a spus

    Hehehe, mulțumesc că mi-ați reamintit de comenzile MySQL. Acum să vedem dacă „am pus oarecare securitate” pe baza de date server World of Warcraft pe care o am pe LAN.

  3.   sieg84 el a spus

    cunoștințele mele despre acest lucru sunt nule, dar este aproape la fel pentru utilizarea MySQL pentru Amarok?
    CREAȚI BAZA DE DATE amarokdb;
    ACORDAȚI TOATE PRIVILEGIILE PE Amarokdb. * LA „Amarokuser” IDENTIFICAT DE „Parolă”; PRIVILEGII DE ÎNVĂȚARE;

    1.    KZKG ^ Gaara el a spus

      Nu am folosit Amarok de mult, mult timp, dar dacă utilizați un DB care este MySQL, în teorie ar trebui să funcționeze și așa.

  4.   Carlos Andres Restrepo el a spus

    Bună ziua, ar fi bine dacă ați crea o intrare pentru securitate împotriva serverelor web în Linux, mulți dintre ei nu au securitatea adecvată, iar administratorul acestora nu este în mod corespunzător un expert, acestea facilitează doar lucrurile, de exemplu, utilizarea linkului simbolic în servere permite citind fișierele de configurare ale altor conturi pe același server, mulți administratori nu știu acest lucru și de aceea proliferează defacțiunile site-ului

    În ceea ce priveşte

    1.    KZKG ^ Gaara el a spus

      Bună ziua acolo,
      Bine ați venit pe site-ul 🙂

      De fapt, nu mă consider un expert în această chestiune, de departe, dar voi încerca să aduc puținele cunoștințe pe care le-am dobândit de-a lungul anilor 🙂

      Un alt lucru pe care nu îl fac mulți administratori de rețea este să acorde privilegii site-urilor cu apache în mod individual, adică utilizatorului și grupului www-data (sau similar), care este unul diferit pentru fiecare site și, la rândul său, cușcă fiecare dintre acestea.

      În ceea ce priveşte

  5.   hackloper775 el a spus

    Bun sfat

    În ceea ce priveşte

    1.    KZKG ^ Gaara el a spus

      Mulțumesc

  6.   nano el a spus

    URASC aspectul terminalului tău, literele de fundal mă scot din concentrare. Ești un nenorocit de nebun xD

    În afară de asta, este interesant, deoarece am văzut cazuri jalnice de întreruperi ale serviciilor din aceste lucruri.

    Acum, nu numai că depinde de asta, securitatea constă în modul în care a fost construită baza de date, mi-a explicat un profesor, dar nu sunt încă foarte scufundat în DB ... ar trebui să ne încurcăm cu MongoDB = D una dintre acestea zile

  7.   Colonelul Carlos el a spus

    tocmai asta mi s-a întâmplat astăzi cu serverul meu închiriat

    Am urmat pașii tăi, am intrat în cpanel și am căutat baza de date MYSQL și îmi spune că este în neregulă.

    Nu știu cum să intru acum sub utilizatorul root
    Sunt un neofit în acest sens, dar citind aici înveți multe, sper să mă ghidezi spre acces

    1.    KZKG ^ Gaara el a spus

      Bună ziua 🙂
      Ceea ce aveți este o găzduire (SharedHosting) sau un VPS (server virtual)?

      Dacă aveți o găzduire și nu un VPS, atunci ar trebui să vedeți dacă găzduirea dvs. are acces SSH (contactați asistența tehnică a companiei care v-a vândut hostingul și întrebați-i cum să acceseze prin SSH), odată ce ați introdus prin SSH, utilizatorul NU va fi root, dar trebuie să utilizați utilizatorul pe care l-ați introdus atunci când ați instalat aplicația web respectivă.

      De fapt, al tău este un subiect complicat, deoarece variantele și posibilitățile sunt atât de multe, îți recomand să deschizi un subiect nou pe forumul nostru, va fi mai confortabil să te ajutăm - » http://foro.desdelinux.net

      Salutări 😀

  8.   bossbrondem el a spus

    bun,

    Înțeleg că este o bună practică să nu acordați toate privilegiile unui utilizator, cu excepția root. Cu toate acestea, de când am instalat phpmyadmin, a fost creat un nou utilizator „phpmyadmin” cu toate privilegiile. Pare logic ca acest lucru să fie cazul, deoarece este doar o versiune grafică pentru gestionarea bazelor de date în MySQL. Oricum aș dori să mă asigur dacă este bine așa cum este sau ar trebui să fac o modificare în privilegiile utilizatorului „phpmyadmin”.

    Salutări și mulțumesc!

  9.   Emmanuel el a spus

    Excelent…
    Sunt unul dintre cei care fac totul cu rădăcină, dar tu mi-ai deschis ochii prietene ..
    Mulțumesc mult…