[RESOLU] Sécurité de la Base De Donnée

Information importante

En raison d'un grand nombre d'inscriptions de spammers sur notre site, polluant sans relache notre forum, nous suspendons la création de compte via le formulaire de "sign up".

Il est néanmoins toujours possible de devenir adhérent•e en faisant la demande sur cette page, rubrique "Inscription" : https://www.drupal.fr/contact


De plus, le forum est désormais "interdit en écriture". Il n'est plus autorisé d'y écrire un sujet/billet/commentaire.

Pour contacter la communauté, merci de rejoindre le slack "drupalfrance".

Si vous voulez contacter le bureau de l'association, utilisez le formulaire disponible ici, ou envoyez-nous un DM sur twitter.

Bonjour à tous,

Mes question vont peut être paraître idiotes mais le fait que je sois débutant sur Drupal et la création de site internet pourrais peut être les excuser ;)

Avant l'installation de Drupal 6.14 en local au moyen de WampServer 2.0i, j'ai créer une base de donnée avec PHPMyAdmin omme prescrit dans le tutorial.
Il se trouve que cette base de donnée avait 2 utilisateurs référencés, un "Root" en "Localhost" et un "Root" sur une adresse IP.
J'ai donc créer un nouvel utilisateur avec un nom d'administrateur et un mot de passe que j'ai utilisé dans les champs demandé lors de l'installation de Drupal 6.14.

Mes questions sont les suivantes :
- A quoi servent ces deux utilisateur "Root" créer par défaut ?
- Ces utilisateurs ayant quasiment tous les droits (d'après ce que j'ai vu) et pas de mot de passe propre, n'est ce pas un moyen simple d'entrer dans la base de donnée sans autorisation préalable lors de la mise en ligne future de ce site ? (Je ne sais pas comment d'ailleurs...)

Merci d'avances pour vos réponses à ces questions qui peuvent paraître naïves mais qui ont pour vocation de me tranquilliser ;),
Cordialement,

Thib

Version de Drupal : 

Arf non, la question n'est pas idiote du tout :)

Déjà il faut se demande quels sont les risques liés à un service de base de donnée (mysql ou autre). Le premier serait qu'elle soit configuré pour "écouter" une interface réseau "publique" (cad accessible de l'extérieur). Généralement personne ne fais une chose pareil sans un besoin très particulier. Donc en standard, le service écoute l'interface local (localhost/127.0.0.1) ce qui le rend inaccessible de l'extérieur.

Le second risque possible c'est qu'un vilain arrive à "casser" apache (ou un autre service connecté à une interface réseau publique), à s'introduire sur le serveur. De là, il peut se connecter au service de base de données d'où l'intérêt des mots de passe. Intérêt pour le peu illusoire si l'utilisateur "apache" peut lire directement le dossier contenant les données "mysql". Disons que ces données soit super bien protégées (appartenant exclusivement au process mysql)... Mais admettons, le vilain n'a que les droits d'apache, se connecte à la base et est donc bloqué car il y a un mot de passe super sécurisé, tout ça.

Troisième risque, Drupal est une passoire, et le vilain arrive à faire passer une SQL Injection. Les dégâts seront donc limités si l'utilisateur SGBD qu'utilise Drupal a des droits limités... à ses données. Dans ce cas, on ne se protège de pas grand chose sauf si l'on a eu la mauvaise idée de mettre dans la base de donnée Drupal des tables "métier" critiques (généralement on met cela dans une autre base).

Bref, à mon humble opinion, tout ceci est de la tetrapilectomie tendance capilotractée proche de l'histoire de la morsure de la chauve-souris. Si le serveur est proprement construit, que les droits sont proprements réglés, que les ports sont proprement protégés, que les bases sont proprement séparés, qu'elles écoutent uniquement le local, il n'y aucun intérêt à mon sens à ne plus utiliser un simple et bête "mysql://root@localhost/ma_db". Pas de mot de passes qui cassent les pieds, pas d'utilisateur spécifiques, bref, keep it simple and stupid :)

Ceci n'engage que moi, bien évidement, et si j'ai laissé un trou à la chauve-souris, je suis très intéressé à savoir lequel !!

Salut Yoran,

Merci pour ta réponse rapide qui me rassure.

Donc si j'ai bien compris, j'aurais même pu me passer de créer un nouvel utilisateur et prendre celui crée par défaut avec la BDD "Root" sans mot de passe pour faire accéder Drupal à cette même BDD.
D'ailleurs je peux peut être rectifier ça dans la section administrateur de drupal et supprimer l'utilisateur précédemment crée ?

Cordialement,

Thib.

PS: C'est marrant que ce soit toi qui réponde, j'ai commandé ton ouvrage ce matin même sur Amazon... :)

Je tempèrerais quand même les ardeurs...
Généralement chez les hébergeurs (et les SI professionels) on sépare la partie frontale / application de la partie base de données.
En clair, on a les serveurs apache+PHP+Drupal sur des machines et les bases sur d'autres machines, qui n'écoutent donc pas sur le localhost...

Si on arrive à se connecter sur le serveur apache, on peut avoir accès aux fichiers settings, sauf que souvent le compte sous lequel est lancé apache n'a pas accès au shell (pas de possibilité de se connecter sur la machine avec ce compte), et que le settings.php n'est accessible en lecture seule que pour le compte apache.

Donc à moins d'avoir une connexion Root sur la machine, impossible de connaitre la db_url utilisée.
Maintenant, le compte "root" MySQL est souvent créé à l'installation, sans mot de passe. Si on laisse ce compte tel quel - compte privilégié s'il en est - une personne mal intentionnée va commencer par tester ce compte. Il faut donc généralement toujours mettre un mot de passe au compte root.

Et utiliser un autre compte avec des privilèges retreints à une seule base MySQL, le compte root ayant accès à toutes les bases.

Pour une installation mono-instance drupal sur une seule machine, tout cela n'est pas forcément nécessaire, dans un environnement mutualisé, c'est quasiment obligatoire pour ne pas risquer d'avoir des soucis entre les "propriétaires" des différentes bases...

Salut à tous,

J'ai eu des soucis pour tenter de mettre un mot de passe sur les deux utilisateurs "root" crées par defaut sur ma BDD mySQL en effet, aucun problème pour le "root" en 127.0.0.1 mais lors de la modification du compte "root" en localhost , ça a planté PHPMyAdmin que j'ai dû réinstaller. Du coup j'ai laissé les deux "root" sans mot passe.

Je me pose alors une question : quand je placerai mon site chez un hébergeur, si comme le dit vincent59 il sépare les bases, en hébergement mutualisé, du reste il va certainement me transmettre une IP d'adressage pour ma base cela pourrait-il quand même poser problème avec les autres "propriétaires" ? le nom de ma base n'étant pas connus de ceux ci...

Cordialement,

Thib'

Un hébergeur te fournit :

  • L'IP ou le nom DNS du serveur de base de données
  • Le nom de l'instance
  • Un nom d'utilisateur (souvent lié au login/nom du compte)
  • Le mot de passe

En renseignant correctement les informations dans le fichier settings.php, tout doit se passer correctement.

Le db_url étant de la forme utilisateur:motdepasse@serveur_de_base/instance, tu as toutes les informations nécessaires.