Comment prendre le contrôle de la sécurité de votre MongoDB

Les pirates deviennent de plus en plus sophistiqués et savent comment exploiter les vulnérabilités. Si vous avez des données sensibles dans votre base de données MongoDB, il est crucial de prendre la sécurité au sérieux. Mais comment ? Ne vous inquiétez pas ! Ce tutoriel vous couvre !

Dans ce tutoriel, vous apprendrez à protéger vos bases de données MongoDB et à repousser les pirates en mettant en place des mesures de sécurité.

Lisez la suite et commencez à prendre le contrôle de la sécurité de votre MongoDB !

Prérequis

  • Ce tutoriel sera une démonstration pratique. Pour suivre, assurez-vous d’avoir ce qui suit :
  • A non-root user with sudo privileges.

Création d’un utilisateur administratif dédié

MongoDB n’a pas de système d’authentification intégré. Par défaut, toute personne ayant accès à la base de données dispose de privilèges administratifs complets, ce qui est trop dangereux ! Comment sécuriser votre base de données ? Vous allez créer un utilisateur avec des privilèges administratifs et verrouiller les bases de données sur cet utilisateur administratif.

Ce paramétrage vous permet de fournir un seul point d’accès utilisateur avec des privilèges administratifs tout en restreignant les actions que chaque utilisateur peut effectuer dans la base de données. Par exemple, les développeurs devraient avoir un accès en lecture seule aux bases de données, tandis que les administrateurs peuvent créer et modifier des données.

1. Ouvrez votre terminal et exécutez la commande mongo ci-dessous sans aucun argument. Cette commande vous permet de vous connecter à votre shell MongoDB en tant qu’utilisateur administrateur par défaut.

Cet utilisateur administrateur est puissant car il a un accès complet en lecture/écriture à toutes les bases de données sur le serveur, et il est préférable de ne pas utiliser cet utilisateur pour le travail quotidien.

mongo

Vous recevrez un avertissement indiquant que le contrôle d’accès n’est pas activé…, comme indiqué ci-dessous.

Cet avertissement indique que toute personne ayant accès au serveur MongoDB peut effectuer les actions qu’elle souhaite sur les bases de données. Ces actions comprennent, entre autres, la suppression, la suppression, la mise à jour des bases de données.

Cet avertissement apparaît car vous n’avez pas encore activé le contrôle d’accès. Ne vous inquiétez pas pour le moment. Vous apprendrez comment activer le contrôle d’accès dans la section suivante.

Connecting to your MongoDB shell

2. Ensuite, exécutez la commande show dbs pour afficher toutes les bases de données sur le serveur, y compris les bases de données admin que l’utilisateur normal ne devrait pas voir.

show dbs
Showing all databases on the server

3. Exécutez la commande use admin ci-dessous pour passer à la base de données d’administration puisque votre objectif est de créer un utilisateur administratif dédié. Cette commande modifie le contexte de votre base de données actuelle pour utiliser la base de données d’administration, comme indiqué ci-dessous.

MongoDB utilise la base de données d’administration pour stocker les règles de contrôle d’accès et fournir une authentification intégrée, des noms d’utilisateur et des mots de passe pour les utilisateurs et leurs rôles. Vous ne pouvez pas supprimer ou renommer la base de données d’administration car elle est essentielle au fonctionnement de la base de données.

use admin
Switching to the admin database

4. Maintenant, copiez et collez le code ci-dessous dans l’interpréteur de commandes mongo et appuyez sur Entrée. Ce code crée un utilisateur appelé AdminATA, avec un mot de passe de LDWbPf6Fy9Ezs3Mv, mais vous pouvez utiliser des informations d’identification différentes si vous préférez.

Ce nouvel utilisateur a un accès lecture/écriture (readWriteAnyDatabase) à toutes les bases de données et un accès administrateur à toutes les collections. Mais cet utilisateur n’a pas de privilèges pour supprimer ou supprimer des bases de données et ne peut pas supprimer ou modifier les privilèges d’autres utilisateurs.

Après avoir exécuté la commande et si vous obtenez une erreur, vérifiez à nouveau votre code et réessayez.

# La méthode db.createUser() crée un nouveau utilisateur dans la base de données actuelle, avec les privilèges spécifiés par les rôles.
db.createUser(
{
# Spécifiez le nom d'utilisateur AdminATA, mais vous pouvez entrer n'importe quel nom d'utilisateur que vous souhaitez.
user: "AdminATA",
# La méthode passwordPrompt() est une fonction d'aide universelle 
# qui indique à l'interpréteur de commandes MongoDB de vous demander un mot de passe pour l'utilisateur AdminATA.
pwd: passwordPrompt(),
# Spécifiez les rôles que vous souhaitez attribuer à votre utilisateur AdminATA.
roles: [ { role: "userAdminAnyDatabase", db: "admin" }, "readWriteAnyDatabase" ]
}
)

5. Fournissez un mot de passe sécurisé lorsqu’on vous le demande, comme indiqué ci-dessous, et appuyez sur Entrée.

Providing a secure password

Ci-dessous, vous pouvez voir un message Utilisateur ajouté avec succès. Cette sortie confirme que vous avez créé avec succès un utilisateur avec des privilèges administratifs et que vous les avez restreints aux privilèges minimum requis.

À ce stade, vous disposez déjà d’un utilisateur administratif appelé AdminATA qui peut effectuer toutes les opérations nécessaires sur la base de données sans donner accès à tout le monde.

Verifying Successful Admin User Creation in MongoDB

6. Enfin, exécutez la commande exit pour quitter l’interpréteur de commandes mongo.

exit
Leaving the mongo shell

Ajout de sécurité en activant l’authentification

Maintenant que vous avez un utilisateur administratif, vous ajouterez une autre couche de sécurité en activant l’authentification. Cela donne accès à la base de données uniquement aux utilisateurs disposant des bonnes informations d’identification.

L’authentification fait référence au processus de validation d’une connexion, généralement en fournissant un nom d’utilisateur et un mot de passe ou en utilisant un jeton d’authentification. L’authentification garantit que vous êtes bien la personne que vous prétendez être et non un imposteur tentant d’accéder à des ressources.

1. Activez l’authentification en éditant le fichier de configuration de MongoDB avec les éléments suivants et enregistrez les modifications :

  • Ouvrez le fichier /etc/mongod.conf dans votre éditeur de texte préféré. Le fichier /etc/mongod.conf contient la configuration de votre cluster MongoDB.
  • Recherchez et décommentez la directive #security en supprimant le symbole # devant la directive, comme indiqué ci-dessous. Cette directive indique à MongoDB de rechercher le paramètre de sécurité dans le fichier de configuration.
  • Ajoutez une nouvelle ligne sous la directive security qui indique authorization: enabled. Notez que la ligne authorization: enabled est indentée (a deux espaces au début), comme indiqué ci-dessous.
Adding the authorization parameter

2. Ensuite, exécutez la commande systemctl suivante pour redémarrer le serveur MongoDB et appliquer les modifications.

sudo systemctl restart mongod

3. Enfin, exécutez la commande ci-dessous pour afficher l’état de votre service MongoDB.

sudo systemctl status mongod

Ci-dessous, vous pouvez voir une ligne qui dit Active : actif (en cours d’exécution) en texte vert, ce qui indique que votre serveur MongoDB fonctionne et est prêt à accepter des connexions.

Viewing MongoDB Service Status

Vérification du fonctionnement de l’authentification

Vous venez d’activer l’authentification, mais comment savoir si elle fonctionne ? Vous allez vous connecter en tant qu’utilisateur administratif pour tester et vous assurer que votre authentification fonctionne en consultant les bases de données.

1. Exécutez les commandes suivantes pour accéder à l’invite de commande mongo comme vous l’avez fait dans la section « Création d’un utilisateur administratif dédié » (étape un).

mongo

Comme vous pouvez le voir ci-dessous, vous ne recevez plus le Avertissement : le contrôle d’accès n’est pas activé… concernant l’activation de l’authentification. Au lieu de cela, vous obtiendrez un message qui vous indique la version de votre serveur MongoDB et du shell MongoDB.

Connecting to the MongoDB Shell

2. Ensuite, réexécutez la commande show dbs pour vérifier si vous pouvez toujours accéder à la base de données.

show dbs

La commande devrait vous montrer toutes les bases de données, y compris la base de données admin. Mais comme vous pouvez le voir ci-dessous, rien n’apparaît. Pourquoi ? La visualisation de la liste des bases de données est un privilège réservé aux utilisateurs administratifs uniquement.

Vous n’avez pas authentifié votre shell mongo pour utiliser le rôle Admin, donc vous n’êtes pas autorisé à voir la liste des bases de données.

Listing All Databases (empty)

Avec l’authentification activée, la connexion échouera si quelqu’un essaie d’accéder à la base de données en utilisant une chaîne de connexion qui ne contient pas les identifiants corrects.

Vérifier les chaînes de connexion est une partie essentielle de la sécurité de MongoDB, et vous devriez mettre en œuvre l’authentification à tous les niveaux de l’application. Toutes les connexions à MongoDB doivent utiliser une chaîne d’authentification composée d’informations d’identification. Ces informations d’identification incluent le nom d’utilisateur et le mot de passe corrects.

3. Exécutez la commande exit pour quitter le shell MongoDB.

exit

4. Maintenant, exécutez la commande ci-dessous pour vous connecter au shell MongoDB avec le nom d’utilisateur (-u) et le mot de passe (-p) de votre utilisateur administratif nouvellement créé. Remplacez AdminATA par le nom d’utilisateur que vous avez créé dans la section « Création d’un utilisateur administratif dédié » (étape quatre).

Le paramètre --authenticationDatabase indique au shell MongoDB de s’authentifier contre la base de données admin.

mongo -u AdminATA -p --authenticationDatabase admin

5. Fournissez votre mot de passe pour votre utilisateur administratif lorsqu’on vous le demande.

Providing administrative password
logging into the MongoDB shell as an administrator

6. Enfin, relancez la commande show dbs pour voir si vous pouvez afficher toutes les bases de données.

show dbs

Cette fois-ci, comme vous le voyez ci-dessous, la liste des bases de données s’affiche puisque vous êtes un utilisateur administrateur.

Listing all databases as admin user

Conclusion

Dans ce tutoriel, vous avez appris comment vous connecter pour créer un utilisateur administratif et activer l’authentification. Vous avez appris à prendre le contrôle de la sécurité de votre MongoDB et à imposer des restrictions sur qui peut accéder aux bases de données sur votre serveur.

À ce stade, c’est à vous de décider qui peut accéder à quoi. Alors, quelle est la prochaine étape pour vous? Peut-être apprendre comment utiliser de manière sécurisée un conteneur MongoDB?

Source:
https://adamtheautomator.com/mongodb-security/