Mantieni i tuoi database MySQL protetti creando utenti e permessi separati

Sono sempre stato amico delle buone pratiche, molto di più se ci aiutano a mantenere la sicurezza dei nostri server, servizi o semplicemente delle nostre informazioni.

Un'abitudine (cattiva abitudine) che hanno molti amministratori o utenti è quella di utilizzare l'accesso con radice per tutti i database, cioè ... installano un sito utilizzando il CMS di WordPress e come dati di accesso al database (affinché WP utilizzi il server MySQL e utilizzi il suo DB) inseriscono l'utente di amministrazione del server MySQL : radice

Inoltre, installano qualsiasi altra applicazione web (chat, paste, forum, ecc.) E fanno lo stesso, usano sempre l'utente root di MySQL ...

ERRORE!!!

Questa è semplicemente un'abitudine fatale.

Supponiamo di avere i seguenti servizi su un server:

  1. Un sito o un portale che utilizza WordPress.
  2. Il nostro forum di supporto, i colloqui, ecc ... un'intera comunità.
  3. Un FTP che utilizza un database MySQL per memorizzare utenti e password.
  4. Gli utenti di posta elettronica vengono memorizzati (utenti e password) in un database MySQL.
  5. Una piccola WebChat che installiamo per chattare con qualcuno che conosci.

E in tutti, nei 5 servizi utilizziamo l'utente root di MySQL in modo che ogni servizio acceda e salvi i dati nel database corrispondente.

Un bel giorno, uno dei tanti troll che sono in rete, ma questo non è solo un troll, ma anche padrone di alcuni exploit, vulnerabilità, hacking, ecc ... decide di fare qualcosa di dannoso per noi.

Trova un bug nella WebChat che stiamo utilizzando, approfittando di questo bug, riesce ad accedere ai file WebChat, incluso il file di configurazione di WebChat, e ... in questo file, ovviamente, c'è il nome utente e la password che WebChat usa per accedere al server MySQL e indovina cosa? … Non è niente di più e niente di meno l'UTENTE ROOT!

Ottenendo queste informazioni, in un modo molto semplice il troll può:

  1. Eliminaci e / o ruba tutto ciò che riguarda il sito o il portale che abbiamo (WordPress).
  2. Puoi eliminare e / o rubare informazioni da noi E dai nostri utenti che utilizzano il Forum, la comunità che creiamo.
  3. Puoi anche rubare il nome utente e la password di TUTTI gli utenti che hanno un account e-mail sul nostro server, nonché rubare le informazioni dalle loro e-mail, impersonare, ecc.
  4. E ora finalmente puoi utilizzare un account sul nostro server FTP e caricare qualsiasi file che contenga malware, che ti consentirebbe di ottenere il controllo TOTALE e ASSOLUTO del nostro server.

Bene ... cosa ne pensi? ... 🙂

Vedi tutto ciò che può accadere semplicemente non creando utenti indipendenti per ogni database che abbiamo?

Questa NON è un'esagerazione amici, può succedere con una facilità sorprendente ... beh, tutto ciò che serve per innescare la catastrofe è solo un bug in alcune delle applicazioni web che hai installato.

Adesso…

Come creare utenti MySQL separati per ciascuna applicazione web?

Per prima cosa dobbiamo entrare nel server MySQL con l'utente root, poiché è lui che ha i privilegi per creare database, stabilire permessi, creare utenti, ecc:

mysql -u root -p

Quando scrivono quanto sopra e premono [Accedere] verrà richiesta la password dell'utente root di MySQL, la scriveranno e premeranno [Accedere] di nuovo, ti verrà immediatamente mostrato qualcosa del genere:

Ora creeremo un database denominato «webchatdb":
CREATE DATABASE webchatdb;

Notare il punto e virgola «;»Alla fine della riga.

Pronto, hai già creato il database, ora creiamo l'utente «utente di chat«Con la password«passworddelputwebchat":

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

Ora la magia ... daremo tutti i privilegi (leggere e scrivere) a utente di chat SOLO nel DB webchatdb:

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

E voilà, l'utente ha già i permessi in quel database ... ora non resta che aggiornare i permessi a MySQL, cioè dire a MySQL di rileggere i privilegi degli utenti perché abbiamo appena apportato una modifica in loro:

FLUSH PRIVILEGES ;

Vi lascio uno screenshot:

E questo è stato tutto. In questo modo per ogni applicazione web che utilizziamo, garantiamo che nel caso in cui riescano a violare una di quelle applicazioni web, le altre saranno al sicuro (almeno dal punto di vista di MySQL)

Qual è una buona pratica? 😉

Spero che ti sia stato utile quanto lo è a me, perché ho cercato di spiegarlo nel modo più semplice possibile.

saluti


Lascia un tuo commento

L'indirizzo email non verrà pubblicato. I campi obbligatori sono contrassegnati con *

*

*

  1. Responsabile dei dati: Miguel Ángel Gatón
  2. Scopo dei dati: controllo SPAM, gestione commenti.
  3. Legittimazione: il tuo consenso
  4. Comunicazione dei dati: I dati non saranno oggetto di comunicazione a terzi se non per obbligo di legge.
  5. Archiviazione dati: database ospitato da Occentus Networks (UE)
  6. Diritti: in qualsiasi momento puoi limitare, recuperare ed eliminare le tue informazioni.

  1.   martyn suddetto

    Buon post KZKG, se fosse nel forum chiederei un appiccicoso!

    1.    KZKG ^ Gaara suddetto

      Grazie 😀

      1.    CubaRosso suddetto

        La password che hai impostato per la webchat è buona, un'altra cosa che ha a che fare con mysql è l'uso della sua memoria

  2.   Hyuga_Neji suddetto

    Hehehe, grazie per avermi ricordato i comandi MySQL, ora vediamo se "ho messo un po 'di sicurezza" sul database del server di World of Warcraft che ho sulla mia LAN.

  3.   sig84 suddetto

    la mia conoscenza su questo è nulla, ma è quasi la stessa per quando si utilizza MySQL per Amarok?
    CREA DATABASE amarokdb;
    GARANTIRE TUTTI I PRIVILEGI SU amarokdb. * A "amarokuser" IDENTIFICATO DA "password"; PRIVILEGI DI FLUSH;

    1.    KZKG ^ Gaara suddetto

      Non uso Amarok da molto, molto tempo, ma se usi un DB che è MySQL, in teoria dovrebbe funzionare anche in questo modo.

  4.   Carlos Andrés Restrepo suddetto

    Ciao, sarebbe bene se creassi una voce per la sicurezza contro i server web in Linux, molti di loro non hanno la sicurezza adeguata e l'amministratore degli stessi non è propriamente un esperto, facilitano solo le cose, ad esempio l'uso del collegamento simbolico nei server consente leggendo i file di configurazione di altri account sullo stesso server molti amministratori non ne sono consapevoli ed è per questo che proliferano i defaces dei siti web

    saluti

    1.    KZKG ^ Gaara suddetto

      Ciao a tutti,
      Benvenuto nel sito 🙂

      In realtà, non mi considero di gran lunga un esperto in materia, ma cercherò di contribuire con la poca conoscenza che ho acquisito negli anni 🙂

      Un'altra cosa che non molti amministratori di rete fanno è dare privilegi ai siti con apache individualmente, cioè l'utente e il gruppo www-data (o simili), che è diverso per ogni sito, e a sua volta gabbia ognuno di questi.

      saluti

  5.   hacker775 suddetto

    Bel consiglio

    saluti

    1.    KZKG ^ Gaara suddetto

      Grazie

  6.   nano suddetto

    ODIO l'aspetto del tuo terminale, le lettere sullo sfondo mi portano fuori dalla mia concentrazione. Sei un fottuto pazzo xD

    A parte questo, è interessante perché ho visto casi patetici di interruzioni del servizio da queste cose.

    Ora, non solo dipende da quello, la sicurezza sta nel modo in cui è stato costruito il database, mi ha spiegato un insegnante, ma non sono ancora molto immerso nel DB ... dovremmo scherzare con MongoDB = D uno di questi giorni

  7.   Carlos Colonnello suddetto

    proprio quello che è successo a me oggi con il mio server noleggiato

    Ho seguito i tuoi passi, sono andato su cpanel e ho cercato il database MYSQL e mi dice che è fuori servizio.

    Non so come entrare ora sotto l'utente root
    Sono un neofita in questo, ma leggendo qui si impara molto, spero mi guidi ad accedere

    1.    KZKG ^ Gaara suddetto

      Ciao 🙂
      Quello che hai è un Hosting (SharedHosting) o un VPS (server virtuale)?

      Se hai un hosting e non un VPS, dovresti vedere se il tuo hosting ha accesso SSH (contatta il supporto tecnico dell'azienda che ti ha venduto l'hosting e chiedi loro come accedere tramite SSH), una volta che si accede tramite SSH, l'utente NON sarà root, ma è necessario utilizzare l'utente immesso durante l'installazione dell'applicazione web.

      In realtà il tuo è un argomento complicato, perché le varianti e le possibilità sono tantissime, ti consiglio di aprire un nuovo argomento nel nostro forum, lì sarà più comodo aiutarti - » http://foro.desdelinux.net

      Saluti 😀

  8.   bossbrondem suddetto

    buona,

    Capisco che sia una buona pratica non dare tutti i privilegi a nessun utente eccetto root. Tuttavia, da quando ho installato phpmyadmin, è stato creato un nuovo utente "phpmyadmin" con tutti i privilegi. Sembra logico che sia così, dato che è solo una versione grafica per gestire i database in MySQL. Comunque vorrei essere sicuro se va bene così com'è o devo apportare qualche modifica ai privilegi dell'utente "phpmyadmin".

    Saluti e grazie!

  9.   Emmanuel suddetto

    Eccellente…
    Sono uno di quelli che fanno tutto con root, ma mi hai aperto gli occhi amico ..
    Molte grazie…