Protégez vos bases de données MySQL en créant des utilisateurs et des autorisations distincts

J'ai toujours été un ami des bonnes pratiques, bien plus si elles nous aident à maintenir la sécurité de nos serveurs, services ou simplement nos informations.

Une habitude (mauvaise habitude) que de nombreux administrateurs ou utilisateurs ont est d'utiliser l'accès avec racine pour toutes les bases de données, c'est-à-dire ... ils installent un site à l'aide du CMS WordPress, et en tant que données d'accès à la base de données (pour que WP utilise le serveur MySQL et utilise sa base de données), ils mettent l'utilisateur d'administration du serveur MySQL : racine

Aussi, ils installent n'importe quelle autre application web (un chat, un collage, un forum, etc) et font de même, ils utilisent toujours l'utilisateur root de MySQL ...

ERREUR!!!

C'est simplement une habitude fatale.

Supposons que nous ayons les services suivants sur un serveur:

  1. Un site ou un portail utilisant WordPress.
  2. Notre forum de soutien, nos discussions, etc ... toute une communauté.
  3. Un FTP qui utilise une base de données MySQL pour stocker les utilisateurs et les mots de passe.
  4. Les utilisateurs de messagerie sont stockés (utilisateurs et mots de passe) dans une base de données MySQL.
  5. Un petit WebChat que nous installons pour discuter avec quelqu'un que vous connaissez.

Et dans chacun d'eux, dans les 5 services, nous utilisons l'utilisateur root MySQL afin que chaque service accède et enregistre les données dans sa base de données correspondante.

Un beau jour, l'un des nombreux trolls là-bas, mais ce n'est pas seulement un troll, mais il maîtrise également certains exploits, vulnérabilités, piratage, etc ... décide de nous faire quelque chose de nuisible.

Trouvez un bogue dans le WebChat que nous utilisons, en profitant de ce bogue, il parvient à accéder aux fichiers WebChat, y compris le fichier de configuration WebChat, et… dans ce fichier, comme il est évident, se trouve le nom d'utilisateur et le mot de passe que le WebChat utilise pour accéder au serveur MySQL, et devinez quoi? … Ce n’est ni plus ni moins l’UTILISATEUR ROOT!

En obtenant ces informations, de manière très simple, le troll peut:

  1. Supprimez-nous et / ou volez tout ce qui concerne le site ou le portail que nous avons (WordPress).
  2. Vous pouvez supprimer et/ou voler des informations de notre part ET de nos utilisateurs qui utilisent le Forum, la communauté que nous créons.
  3. Vous pouvez également voler le nom d'utilisateur et le mot de passe de TOUS les utilisateurs qui ont un compte de messagerie sur notre serveur, ainsi que voler les informations de leurs e-mails, usurper l'identité, etc.
  4. Et maintenant, enfin, vous pouvez utiliser un compte sur notre serveur FTP, et télécharger tout fichier contenant des logiciels malveillants, ce qui vous permettrait d'obtenir un contrôle ABSOLU et TOTAL de notre serveur.

Bien, qu'en pensez-vous? …

Voyez-vous tout ce qui peut arriver simplement en ne créant pas d'utilisateurs indépendants pour chaque base de données que nous avons?

Ce n'est PAS une exagération mes amis, cela peut arriver avec une facilité incroyable ... eh bien, tout ce qui est nécessaire pour déclencher la catastrophe est juste un bogue dans certaines des applications Web que vous avez installées.

Maintenant…

Comment créer des utilisateurs MySQL séparés pour chaque application Web?

Il faut d'abord entrer dans le serveur MySQL avec l'utilisateur root, car c'est lui qui a les privilèges pour créer des bases de données, établir des permissions, créer des utilisateurs, etc:

mysql -u root -p

Quand ils écrivent ce qui précède et appuient sur [Entrer] Il leur sera demandé le mot de passe de l'utilisateur root MySQL, ils le saisissent et appuient sur [Entrer] encore une fois, vous verrez instantanément quelque chose comme ceci:

Nous allons maintenant créer une base de données nommée «webchatdb":
CREATE DATABASE webchatdb;

Remarquez le point-virgule «;»À la fin de la ligne.

Prêt, vous avez déjà créé la base de données, créons maintenant l'utilisateur «utilisateur de chat Web«Avec le mot de passe«mot de passedelputowebchat":

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

Maintenant, la magie ... nous allons donner tous les privilèges (lecture et écriture) à utilisateur de chat Web UNIQUEMENT dans la DB webchatdb:

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

Et voilà, l'utilisateur a déjà les autorisations dans cette base de données ... il ne reste plus qu'à actualiser les autorisations sur MySQL, c'est-à-dire à dire à MySQL de relire les privilèges des utilisateurs car nous venons de les modifier:

FLUSH PRIVILEGES ;

Je vous laisse une capture d'écran:

Et cela a été tout. En faisant cela pour chaque application Web que nous utilisons, nous garantissons qu'au cas où ils parviendraient à enfreindre l'une de ces applications Web, les autres seront en sécurité (au moins du point de vue MySQL)

Qu'est-ce qu'une bonne pratique? 😉

J'espère que cela vous a été aussi utile qu'à moi, car j'ai essayé de l'expliquer aussi simplement que possible.

salutations


Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont marqués avec *

*

*

  1. Responsable des données: Miguel Ángel Gatón
  2. Finalité des données: Contrôle du SPAM, gestion des commentaires.
  3. Légitimation: votre consentement
  4. Communication des données: Les données ne seront pas communiquées à des tiers sauf obligation légale.
  5. Stockage des données: base de données hébergée par Occentus Networks (EU)
  6. Droits: à tout moment, vous pouvez limiter, récupérer et supprimer vos informations.

  1.   Martin dit

    Bon post KZKG, si c'était dans le forum je demanderais un sticky!

    1.    KZKG ^ Gaara dit

      Merci 😀

      1.    CubaRouge dit

        Le mot de passe que vous définissez pour le webchat est bon, une autre chose qui a à voir avec mysql est l'utilisation de sa mémoire

  2.   Hyuga_Neji dit

    Hehehe, merci de m'avoir rappelé les commandes MySQL. Voyons maintenant si "j'ai mis un peu de sécurité" sur la base de données du serveur World of Warcraft que j'ai sur mon LAN.

  3.   sieg84 dit

    ma connaissance à ce sujet est nulle, mais c'est presque la même chose lorsque vous utilisez MySQL pour Amarok?
    CRÉER UNE BASE DE DONNÉES amarokdb;
    Accordez tous les privilèges sur amarokdb. * À 'amarokuser' IDENTIFIÉ PAR 'mot de passe'; PRIVILÈGES DE RINÇAGE;

    1.    KZKG ^ Gaara dit

      Je n'ai pas utilisé Amarok depuis très, très longtemps, mais si vous utilisez une base de données qui est MySQL, en théorie, cela devrait également fonctionner de cette façon.

  4.   Carlos Andrés Restrepo dit

    Bonjour, ce serait bien si vous créiez une entrée pour la sécurité contre les serveurs Web sous Linux, beaucoup d'entre eux n'ont pas la sécurité appropriée et l'administrateur du même n'est pas un expert, ils ne font que leur faciliter les choses, par exemple l'utilisation du lien symbolique sur les serveurs permet lire les fichiers de configuration d'autres comptes sur le même serveur de nombreux administrateurs ne le savent pas et c'est pourquoi les failles de sites Web prolifèrent

    salutations

    1.    KZKG ^ Gaara dit

      Bonjour à tous,
      Bienvenue sur le site 🙂

      Je ne me considère pas vraiment comme un expert en la matière de loin, mais je vais essayer d'apporter le peu de connaissances que j'ai acquises au fil des ans 🙂

      Une autre chose que peu d'administrateurs réseau font, est d'accorder des privilèges aux sites avec Apache individuellement, c'est-à-dire à l'utilisateur et au groupe www-data (ou similaire), qui est différent pour chaque site, et à son tour cage chacun de ceux-ci.

      salutations

  5.   pirate informatique775 dit

    Bon conseil

    salutations

    1.    KZKG ^ Gaara dit

      Merci

  6.   nano dit

    Je déteste le look de votre terminal, les lettres de fond me sortent de ma concentration. Tu es un putain de xD fou

    En dehors de cela, c'est intéressant parce que j'ai vu des cas pathétiques de pannes de service à cause de ces choses.

    Maintenant, non seulement cela dépend de cela, la sécurité réside dans la façon dont la base de données a été construite, m'a expliqué un enseignant, mais je ne suis pas encore très immergé dans la base de données ... nous devrions jouer avec MongoDB = D l'un de ces journées

  7.   Carlos Colonel dit

    juste cela m'est arrivé aujourd'hui avec mon serveur loué

    J'ai suivi vos pas, je suis allé sur cpanel et je cherche la base de données MYSQL et cela me dit qu'elle est en panne.

    Je ne sais pas comment entrer maintenant sous l'utilisateur root
    Je suis un néophyte dans ce domaine, mais en lisant ici, vous apprenez beaucoup, j'espère que vous me guidez pour accéder

    1.    KZKG ^ Gaara dit

      Bonjour 🙂
      Qu'est-ce que vous avez est un hébergement (SharedHosting) ou un VPS (serveur virtuel)?

      Si vous avez un hébergement et non un VPS, vous devriez voir si votre hébergement a un accès SSH (contactez le support technique de la société qui vous a vendu l'hébergement et demandez-leur comment y accéder via SSH), une fois que vous entrez via SSH, l'utilisateur ne sera PAS root, mais vous devez utiliser l'utilisateur que vous avez entré lors de l'installation de cette application Web.

      En fait, le vôtre est un sujet compliqué, car les variantes et les possibilités sont tellement nombreuses, je vous recommande d'ouvrir un nouveau sujet dans notre forum, là il sera plus confortable de vous aider - » http://foro.desdelinux.net

      Salutations 😀

  8.   bossbrondem dit

    bon,

    Je comprends que c'est une bonne pratique de ne donner tous les privilèges à aucun utilisateur sauf root. Cependant, depuis que j'ai installé phpmyadmin, un nouvel utilisateur "phpmyadmin" a été créé avec tous les privilèges. Il semble logique que ce soit le cas, puisqu'il ne s'agit que d'une version graphique pour gérer les bases de données dans MySQL. Quoi qu'il en soit, je voudrais m'assurer que tout va bien tel quel ou devrais-je faire quelques modifications dans les privilèges de l'utilisateur "phpmyadmin".

    Salutations et merci!

  9.   Emmanuel dit

    Excellent…
    Je suis de ceux qui font tout avec root, mais tu m'as ouvert les yeux ami ..
    Merci beaucoup…