Chronique de l'Admin-Sys - 7 : Installer et sécuriser MongoDB sur Debian 8

Aujourd’hui, on va s’intéresser à l’installation et surtout la sécurisation par l’authentification obligatoire de MongoDB qui n’est pas proposé de base à l’installation contrairement aux SGBD classiques tel que MySQL et son fork MariaDB ou encore PostgreSQL, qui eux créent un utilisateur root et vous demandent un mot de passe lors de l’installation.

Les références utilisées

L’installation

  1. On importe la clé publique de MongoDB
    • sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv EA312927
  2. On ajoute le dépôt MongoDB dans le fichier /etc/sources.list
    • echo "deb http://repo.mongodb.org/apt/debian wheezy/mongodb-org/3.2 main" | sudo tee /etc/apt/sources.list.d/mongodb-org-3.2.list
  3. On update la liste des packages et on installe MongoDB
sudo apt-get update  
sudo apt-get install -y mongodb-org # meta-package qui comprends le serveur, le shell, le daemon, et les outils  
  1. On lance le daemon
    • sudo service mongod start

Créer le SuperAdmin

En lignes de commandes tapez la commande mongo
vous serez ainsi dans le shell MongoDB.

Ensuite tapez les commandes suivantes

use admin  
db.createUser(  
    { 
        user: "root",
        pwd: "password",
        roles: [ "userAdminAnyDatabase" ] 
    }
)
quit()  

Adapter la configuration

maintenant stoppez le service mongodb : sudo service mongod stop

Dans le fichier /etc/mongod.conf décommentez la ligne security: et fait en sorte d’avoir cette section dans le fichier:

security:  
  authorization: enabled

puis redémarrez le service sudo service mongod restart

Verifiez la connexion

dans le shell mongo (mongo)

show dbs // si ça fait une erreur c'est bien !

use admin  
db.auth('root', 'password')  
show dbs // la vous allez voir les bases de données créé  

Et voila tout est OK

Maintenant les bonnes choses à faire.

Bon, je préviens tout de suite, j'ai pas la science infuse, il y a sûrement de meilleures techniques, mais celle-ci reste simple et comporte toujours moins de risques que celle souvent utilisé, cad utiliser le superuser dans toutes les applications pour toutes les bases de données.

Le principe sera assez basique : Une application <-> une base de donnée.

Pour chacune de vos applications, vous créez une base de donnée, avec un utilisateur qui est administrateur de celle-ci.

Donc imaginons que vous souhaitiez utiliser une base de donnée « MyBlog » dans une application de votre cru : BlogCMS

// shell mongo
use admin  
db.auth('root', 'password')  
use MyBlog  
db.createUser(  
   { 
      user: "utilisateur",
      pwd: "password",
      roles: [ "dbOwner" ]
   }
)
db.auth('utilisateur', 'password')  

Ainsi votre utilisateur sera admin de sa propre database. Ensuite rien ne vous empêche de restreindre au maximum les permissions de votre appuser à ces besoins minimaux. Pour cela je vous invite à vous renseigner sur les builts-in roles de mongodb voir à vous créer vos propres rôles en vous aidant de cette page.

Purexo

Developpeur et AdminSys sur Antarka

IN DA FACKIN KLOOD https://purexo.eu/