Comment sécuriser MongoDB sur Ubuntu 20.04 | DigitalOcean

Comment sécuriser MongoDB sur Ubuntu 20.04 | DigitalOcean

Une version antérieure de ce tutoriel a été écrite par Brennan Bearnes. MongoDB , également connu sous le nom de Mongo , est une base de données de documents open-source utilisée dans de nombreuses applications web modernes.

Une version antérieure de ce tutoriel a été écrite par [Brennan Bearnes_](https://www.digitalocean.com/community/users/melissaanderson)._

Introduction

MongoDB , également connu sous le nom de Mongo , est une base de données de documents open-source utilisée dans de nombreuses applications web modernes. Elle est classée comme une base de données NoSQL car elle ne repose pas sur une structure de base de données relationnelle traditionnelle basée sur des tableaux. Elle utilise plutôt des documents de type JSON avec des schémas dynamiques.

MongoDB n'a pas d'authentification activée par défaut, ce qui signifie que tout utilisateur ayant accès au serveur où la base de données est installée peut ajouter et supprimer des données sans restriction. Afin de sécuriser cette vulnérabilité, ce tutoriel vous guidera dans la création d'un administrative user et l'activation de l'authentification. Vous ferez ensuite des tests pour confirmer que seul cet administrative user a accès à la base de données.

Conditions préalables

Pour terminer ce tutoriel, vous aurez besoin des éléments suivants :

  • Un serveur fonctionnant sous Ubuntu 20.04 Ce serveur doit avoir un utilisateur administratif non root et un pare-feu configuré avec UFW. Pour cela, suivez notre guide de configuration initiale du serveur pour Ubuntu 20.04 .
  • MongoDB installé sur votre serveur. Ce tutoriel a été validé en utilisant la version de MongoDB  4.4, bien qu'il devrait généralement fonctionner pour les anciennes versions de MongoDB également. Pour installer Mongo sur votre serveur, suivez notre tutoriel sur Comment installer MongoDB sur Ubuntu 20.04.

Étape 1 - Ajouter un administrative user

Depuis la sortie de la version  3.0, le démon MongoDB est configuré pour n'accepter que les connexions provenant de la socket Unix locale, et il n'est pas automatiquement ouvert à l'Internet dans toute son étendue. Toutefois, l'authentification est toujours désactivée par défaut. Cela signifie que tous les utilisateurs qui ont accès au serveur où MongoDB est installé ont également un accès complet aux bases de données.

Dans un premier temps, pour sécuriser cette vulnérabilité, vous créerez un administrative user. Plus tard, vous activerez l'authentification et vous vous connecterez en tant qu'administrative user pour accéder à la base de données.

Pour ajouter un administrative user, vous devez d'abord vous connecter au shell Mongo. L'authentification étant désactivée, vous pouvez le faire avec la commande mongo, sans aucune autre option :

mongo

Il y aura une sortie au-dessus de l'invite du shell Mongo. Comme vous n'avez pas encore activé l'authentification, vous recevrez un avertissement indiquant que le contrôle d'accès n'est pas activé pour la base de données et que l'accès en lecture et en écriture aux données et la configuration de la base de données ne sont pas restreints :

Output
MongoDB shell version v4.4.0

 . . .

2020-06-09T13:26:51.391+0000 I  CONTROL  [initandlisten] ** WARNING: Access control is not enabled for the database.
2020-06-09T13:26:51.391+0000 I  CONTROL  [initandlisten] **          Read and write access to data and configuration is unrestricted.

 . . .

>

Ces avertissements disparaîtront une fois que vous aurez activé l'authentification, mais pour l'instant, ils signifient que toute personne pouvant accéder à votre serveur Ubuntu pourrait également prendre le contrôle de votre base de données.

Pour illustrer le tout, faites fonctionner la commande show dbs de Mongo :

show dbs

Cette commande renvoie une liste de toutes les bases de données sur le serveur. Cependant, lorsque l'authentification est activée, la liste change en fonction du rôle de l'utilisateur Mongo ou de son niveau d'accès à certaines bases de données. Cependant, comme l'authentification est désactivée, elle renvoie toutes les bases de données actuellement présentes sur le système sans restriction :

Output
admin   0.000GB
config  0.000GB
local   0.000GB

Dans cet exemple de sortie, seules les bases de données par défaut apparaissent. Cependant, si vous avez des bases de données contenant des données sensibles sur votre système, n'importe quel utilisateur pourrait les trouver avec cette commande.

Dans le cadre de l'atténuation de cette vulnérabilité, cette étape est axée sur l'ajout d'un administrative user. Pour ce faire, vous devez d'abord vous connecter à la base de données admin. C'est là que sont stockées les informations sur les utilisateurs, comme leurs noms d'utilisateur, mots de passe et rôles :

use admin
Output
switched to db admin

MongoDB est installé avec un certain nombre de méthodes de shell basées sur JavaScript que vous pouvez utiliser pour gérer votre base de données. L'une d'entre elles, la méthode db.createUser, est utilisée pour créer de nouveaux utilisateurs au sein de la base de données sur laquelle la méthode est exécutée.

Lancez la méthode db.createUser :

db.createUser(

Cette méthode exige que vous spécifiiez un nom d'utilisateur et un mot de passe pour l'utilisateur, ainsi que les rôles que vous souhaitez lui attribuer. Rappelons que MongoDB stocke ses données dans des documents de type JSON. Ainsi, lorsque vous créez un nouvel utilisateur, tout ce que vous faites est de créer un document contenant les données appropriées de l'utilisateur sous forme de champs individuels.

Comme pour les objets dans JSON, les documents dans MongoDB commencent et se terminent par des accolades ( { et } ). Pour commencer à ajouter un utilisateur, entrez une accolade d'ouverture :

Note  : Mongo n'enregistrera pas la méthode db.createUser  comme complète tant que vous n'aurez pas entré une parenthèse de fermeture. En attendant, l'invite passera d'un signe plus grand que ( >  ) à une ellipse ( ...  ).

{

Ensuite, remplissez un champ user: en indiquant entre guillemets le nom d'utilisateur souhaité, suivi d'une virgule. L'exemple suivant précise le nom d'utilisateur AdminSammy, mais vous pouvez entrer le nom d'utilisateur que vous souhaitez :

user: "AdminSammy",

Ensuite, entrez un champ pwd avec la méthode passwordPrompt() comme valeur. Lorsque vous exécutez la méthode db.createUser, la méthode passwordPrompt() vous invite à saisir votre mot de passe. Cette méthode est plus sûre que l'autre, ce qui consiste à taper votre mot de passe en clair comme vous l'avez fait pour votre nom d'utilisateur.

Note  : La méthode passwordPrompt()  est uniquement compatible avec les versions de MongoDB  4.2  et plus récentes. Si vous utilisez une ancienne version de Mongo, vous devrez écrire votre mot de passe en clair, de la même manière que vous avez écrit votre nom d'utilisateur :

pwd: "password",

Veillez également à faire suivre ce champ d'une virgule :

pwd: passwordPrompt(),

Saisissez ensuite les rôles que vous souhaitez attribuer à votre administrative user. Comme vous créez un administrative user, vous devez au minimum lui accorder le rôle de userAdminAnyDatabase par rapport à la base de données admin. Cela permettra à l'administrative user de créer et de modifier de nouveaux utilisateurs et rôles. Comme l'administrative user a ce rôle dans la base de données admin, cela lui donnera également un accès de superuser à l'ensemble du cluster.

En outre, l'exemple suivant accorde également à l'administrative user le rôle de ReadWriteAnyDatabase. Cela donne à l'administrative user la possibilité de lire et de modifier les données de n'importe quelle base de données du cluster, à l'exception des bases de données config et local, qui sont pour la plupart à usage interne :

roles: [ { role: "userAdminAnyDatabase", db: "admin" }, "readWriteAnyDatabase" ]

Puis entrez une accolade de fermeture pour marquer la fin du document :

}

Ensuite, entrez une parenthèse de fermeture pour fermer et exécutez la méthode db.createUser :

)

En résumé, voici à quoi devrait ressembler votre méthode db.createUser :

> db.createUser(
... {
... user: "AdminSammy",
... pwd: passwordPrompt(),
... roles: [ { role: "userAdminAnyDatabase", db: "admin" }, "readWriteAnyDatabase" ]
... }
... )

Si la syntaxe de chaque ligne est correcte, la méthode s'exécutera correctement et vous serez invité(e) à entrer un mot de passe :

Output
Enter password:

Entrez un mot de passe fort de votre choix. Ensuite, vous recevrez une confirmation que l'utilisateur a été ajouté :

Output

Successfully added user: {
    "user" : "AdminSammy",
    "roles" : [
        {
            "role" : "userAdminAnyDatabase",
            "db" : "admin"
        },
        "readWriteAnyDatabase"
    ]
}

Ensuite, vous pouvez quitter le client MongoDB :

exit

À ce stade, votre utilisateur sera autorisé à saisir des informations d'identification. Cependant, il ne sera pas tenu de le faire tant que vou

ubuntu

Bootstrap 5 Complete Course with Examples

Bootstrap 5 Tutorial - Bootstrap 5 Crash Course for Beginners

Nest.JS Tutorial for Beginners

Hello Vue 3: A First Look at Vue 3 and the Composition API

Building a simple Applications with Vue 3

Deno Crash Course: Explore Deno and Create a full REST API with Deno

How to Build a Real-time Chat App with Deno and WebSockets

Convert HTML to Markdown Online

HTML entity encoder decoder Online

How to Install Microsoft Teams on Ubuntu 20.04

In this tutorial, we will show you how to install Microsoft Teams on Ubuntu 20.04 machine. we can install teams using Debian installer file or by adding microsoft repository.

2 Ways to Upgrade Ubuntu 18.04/18.10 To Ubuntu 19.04 (GUI & Terminal)

This tutorial is going to you 2 ways to upgrade Ubuntu 18.04 and Ubuntu 18.10 to 19.04. The first method uses the graphical update manger and the second method uses command line. Usually you use the graphical update manager to upgrade Ubuntu desktop and use command line to upgrade Ubuntu server, but the command-line method works for desktops too.

How to Install TeamViewer on Ubuntu 20.04

In this tutorial, we will walk you through how to install TeamViewer on Ubuntu 20.04 Desktop through the command line using the TeamViewer .deb package.Before continuing with this tutorial, make sure you are logged in as a user with sudo privileges.

How to Install PgAdmin 4 on Ubuntu 20.04

How to Install PgAdmin 4 on Ubuntu 20.04 - We are going to show you how to install pgAdmin4 on Ubuntu 20.04 LTS in Server Mode as a web application using apache2 and Wsgi module.

2 Ways to Upgrade Ubuntu 18.04 To Ubuntu 20.04

2 Ways to Upgrade Ubuntu 18.04 To Ubuntu 20.04 : using the graphical update manager and using the command line. Normally you use ...