Comment sécuriser MongoDB avec nom d'utilisateur et mot de passe

377

Je souhaite configurer l'authentification par nom d'utilisateur et mot de passe pour mon instance MongoDB, de sorte que tout accès à distance demande le nom d'utilisateur et le mot de passe. J'ai essayé le tutoriel sur le site MongoDB et j'ai fait ce qui suit:

use admin
db.addUser('theadmin', '12345');
db.auth('theadmin','12345');

Après cela, je suis sorti et j'ai couru à nouveau mongo. Et je n'ai pas besoin de mot de passe pour y accéder. Même si je me connecte à la base de données à distance, je ne suis pas invité à entrer le nom d'utilisateur et le mot de passe.


MISE À JOUR Voici la solution que j'ai fini par utiliser

1) At the mongo command line, set the administrator:

    use admin;
    db.addUser('admin','123456');

2) Shutdown the server and exit

    db.shutdownServer();
    exit

3) Restart mongod with --auth

  $ sudo ./mongodb/bin/mongod --auth --dbpath /mnt/db/

4) Run mongo again in 2 ways:

   i) run mongo first then login:

        $ ./mongodb/bin/mongo localhost:27017
        use admin
        db.auth('admin','123456');

  ii) run & login to mongo in command line.

        $ ./mongodb/bin/mongo localhost:27017/admin -u admin -p 123456

Le nom d'utilisateur et le mot de passe fonctionneront de la même manière pour mongodumpet mongoexport.

murvinlai
la source
4
ceci pour MongDB version 2.2.x
Tom Imrei
23
Dans Mongo 3.0.4, la commande pour créer un utilisateur est db.createUser () .
chronologos
4
Veuillez suivre ceci pour créer un utilisateur administrateur sur Mongodb 3.0 docs.mongodb.org/v3.0/tutorial/add-user-administrator
Sul Aga
3
Une mise à jour pour MongoDB 3.0+: comment configurer l'authentification dans MongoDB 3.0 .
Dan Dascalescu
1
Juste pour être clair, cela ne crypte pas les octets qui passent sur le fil. C'est uniquement pour le contrôle d'accès.
Daniel F

Réponses:

118

Vous devez commencer mongod avec l' --authoption après avoir configuré l'utilisateur.

Depuis le site MongoDB:

Exécutez la base de données (processus mongod) avec l' --authoption pour activer la sécurité. Vous devez soit avoir ajouté un utilisateur à la base de données d'administration avant de démarrer le serveur avec--auth , soit ajouter le premier utilisateur à partir de l'interface localhost.

Authentification MongoDB

Alexandru Petrescu
la source
1
J'ai essayé cela et j'ai suivi l'exemple. maintenant .. je peux le configurer après avoir redémarré le serveur avec --auth. Cependant, lorsque j'essaye de me connecter (./mongo -u theadmin -p 12345) j'échoue. Je ne peux pas me connecter.
murvinlai
Si après cela, vous ne pouvez pas vous connecter, c'est parce que vous essayez de vous connecter sur la adminbase de données, utilisez une autre base de données et réessayez. Seul un userAdmin (AnyDatabase) peut se connecter admin.
Vadorequest
80

Wow tant de réponses compliquées / déroutantes ici.

C'est à partir de la v3.4 .

Réponse courte.

1) Démarrez MongoDB sans contrôle d'accès.

mongod --dbpath /data/db

2) Connectez-vous à l'instance.

mongo

3) Créez l'utilisateur.

use some_db
db.createUser(
  {
    user: "myNormalUser",
    pwd: "xyz123",
    roles: [ { role: "readWrite", db: "some_db" },
             { role: "read", db: "some_other_db" } ]
  }
)

4) Arrêtez l'instance MongoDB et redémarrez-la avec le contrôle d'accès.

mongod --auth --dbpath /data/db

5) Connectez-vous et authentifiez-vous en tant qu'utilisateur.

use some_db
db.auth("myNormalUser", "xyz123")
db.foo.insert({x:1})
use some_other_db
db.foo.find({})

Réponse longue: lisez ceci si vous voulez bien comprendre.

C'est vraiment simple. Je vais abrutir ce qui suit https://docs.mongodb.com/manual/tutorial/enable-authentication/

Si vous voulez en savoir plus sur ce que les rôles font réellement, lisez plus ici: https://docs.mongodb.com/manual/reference/built-in-roles/

1) Démarrez MongoDB sans contrôle d'accès.

mongod --dbpath /data/db

2) Connectez-vous à l'instance.

mongo

3) Créez l'administrateur utilisateur. Ce qui suit crée un administrateur utilisateur dans la adminbase de données d'authentification. L'utilisateur est dbOwnersur la some_dbbase de données et NON sur la adminbase de données, c'est important de se rappeler.

use admin
db.createUser(
  {
    user: "myDbOwner",
    pwd: "abc123",
    roles: [ { role: "dbOwner", db: "some_db" } ]
  }
)

Ou si vous souhaitez créer un administrateur qui est administrateur sur n'importe quelle base de données:

use admin
db.createUser(
  {
    user: "myUserAdmin",
    pwd: "abc123",
    roles: [ { role: "userAdminAnyDatabase", db: "admin" } ]
  }
)

4) Arrêtez l'instance MongoDB et redémarrez-la avec le contrôle d'accès.

mongod --auth --dbpath /data/db

5) Connectez-vous et authentifiez-vous en tant qu'administrateur utilisateur vers la adminbase de données d'authentification, PAS vers la some_dbbase de données d'authentification. L'administrateur utilisateur a été créé dans la adminbase de données d'authentification, l'utilisateur n'existe pas dans la some_dbbase de données d'authentification.

use admin
db.auth("myDbOwner", "abc123")

Vous êtes maintenant authentifié en tant que dbOwnersur la some_dbbase de données. Alors maintenant, si vous souhaitez lire / écrire / faire des trucs directement vers la some_dbbase de données, vous pouvez y changer.

use some_db
//...do stuff like db.foo.insert({x:1})
// remember that the user administrator had dbOwner rights so the user may write/read, if you create a user with userAdmin they will not be able to read/write for example.

Plus d'informations sur les rôles: https://docs.mongodb.com/manual/reference/built-in-roles/

Si vous souhaitez créer des utilisateurs supplémentaires qui ne sont pas des administrateurs d'utilisateurs et qui ne sont que des utilisateurs normaux, continuez à lire ci-dessous.

6) Créez un utilisateur normal. Cet utilisateur sera créé dans la some_dbbase de données d'authentification ci-dessous.

use some_db
db.createUser(
  {
    user: "myNormalUser",
    pwd: "xyz123",
    roles: [ { role: "readWrite", db: "some_db" },
             { role: "read", db: "some_other_db" } ]
  }
)

7) Quittez le shell mongo, reconnectez-vous, authentifiez-vous en tant qu'utilisateur.

use some_db
db.auth("myNormalUser", "xyz123")
db.foo.insert({x:1})
use some_other_db
db.foo.find({})
K - La toxicité du SO augmente.
la source
2
Enfin, j'ai eu une idée de ce qui se passe réellement.
départ le
stackoverflow.com/questions/41615574/…
K - La toxicité du SO augmente.
3
Je me retrouve à souhaiter que les réponses acceptées puissent être actualisées sur SO. C'est la solution la plus pertinente en juillet 2017.
azatar
1
Veuillez mettre à jour votre réponse! Je ne sais pas d'où vous avez obtenu userAdminAnyDatabase mais cela ne fonctionne pas. Le rôle est root pour l'accès administrateur sur tous les dbs.
Aakash Verma
@AakashVerma docs.mongodb.com/manual/reference/built-in-roles/… ;) N'utilisez JAMAIS ROOT, sauf à des fins de développement où vous savez que vous ne pouvez pas être compromis! (tbh ne jamais utiliser de racine lol)
K - La toxicité du SO augmente.
63

Tout d'abord, #auth=truedécommentez la ligne qui commence par dans votre fichier de configuration mongod (chemin par défaut /etc/mongo.conf). Cela activera l'authentification pour mongodb.

Ensuite, redémarrez mongodb: sudo service mongod restart

Shnkc
la source
10
le chemin par défaut n'est /etc/mongod.confpas/etc/mongo.conf
Mithril
2
ou, tout d'abord décommenter, puis redémarrer :)))
GioMac
2
Mise à jour: maintenant, redémarrez le service avec: sudo service mongodb restart
sharafjaffri
l'emplacement et le nom du fichier de configuration sont les suivants: /etc/mongodb.conf
HGMamaci
46

Cette réponse est pour Mongo 3.2.1 Référence

Terminal 1:

$ mongod --auth

Terminal 2:

db.createUser({user:"admin_name", pwd:"1234",roles:["readWrite","dbAdmin"]})

si vous souhaitez ajouter sans rôles (facultatif):

db.createUser({user:"admin_name", pwd:"1234", roles:[]})

pour vérifier si authentifié ou non:

db.auth("admin_name", "1234")

cela devrait vous donner:

1

autre :

Error: Authentication failed.
0
Sdembla
la source
2
les anciennes versions telles que 2.4 utiliseraient db.addUser
arviman
J'ai dû taper use adminavant createUsersinon ça donnait une erreur.
Guillaume F.
28

Voici un code javascript pour ajouter des utilisateurs.

  1. Commencez mongodavec--auth = true

  2. Accédez à la base de données d'administration à partir du shell mongo et passez le fichier javascript.

    mongo admin "Filename.js"

    "Filename.js"

    // Adding admin user
    db.addUser("admin_username", " admin_password");
    // Authenticate admin user
    db.auth("admin_username ", " admin_password ");
    // use  database code from java script
    db = db.getSiblingDB("newDatabase");
    // Adding newDatabase database user  
    db.addUser("database_username ", " database_ password ");
  3. L'ajout de l'utilisateur est maintenant terminé, nous pouvons vérifier l'accès à la base de données à partir du shell mongo

Bharadvaj
la source
1
La définition du nom d'utilisateur et du mot de passe dans un fichier ne semble pas très sécurisée.
Explorer le
Javascript. Pas un "script java".
Camilo Martin
quel est le but du fichier javascript ici?
Ravi
@CamiloMartin JavaScript, pas "Javascript".
Madbreaks
10

Exécutez d'abord mongoDB sur le terminal en utilisant

mongod

maintenant exécutez le shell mongo utilisez les commandes suivantes

    use admin
db.createUser(
  {
    user: "myUserAdmin",
    pwd: "abc123",
    roles: [ { role: "userAdminAnyDatabase", db: "admin" } ]
  }
)

Redémarrez l'instance MongoDB avec le contrôle d'accès.

mongod --auth

Maintenant, authentifiez-vous à partir de la ligne de commande en utilisant

mongo --port 27017 -u "myUserAdmin" -p "abc123" --authenticationDatabase "admin"

Je l'ai lu

https://docs.mongodb.com/manual/tutorial/enable-authentication/

PRAVESH kumar
la source
1
j'ai défini un utilisateur, avec root, puis j'ajoute de plus en plus jusqu'à ce que je vous trouve, l' MongoDB Enterprise > db.system.users.find() { "_id" : "admin.admin", "user" : "admin", "db" : "admin", "credentials" : { "SC RAM-SHA-1" : { "iterationCount" : 10000, "salt" : "k96PCEflidMY5seVju+gAw==", "s toredKey" : "CabQTnJtny7cv0wT5X8oX9QOn3A=", "serverKey" : "RJyCdnlIhyIfj2+d44L61 bYK+MU=" } }, "roles" : [ { "role" : "userAdminAnyDatabase", "db" : "admin" }, { "role" : "dbAdmin", "db" : "admin" }, { "role" : "userAdmin", "db" : "admin" }, { "role" : "root", "db" : "admin" } ] }authentification échoue toujours
deadManN
j'ai même utilisé db.changeUserPassword (), ou quoi que ce soit, même après cela, quand j'appelle db.auth ('admin', 'my pass') ou la façon dont vous l'avez fait, il dit que l'authentification a échoué pour l'administrateur de l'utilisateur
deadManN
Utilisez le rootrôle pour donner accès aux opérations et à toutes les ressources des rôles suivants combinés ... racine du rôle
Laode Muhammad Al Fatih
8

C'est ce que j'ai fait sur Ubuntu 18.04:

$ sudo apt install mongodb
$ mongo
> show dbs
> use admin
> db.createUser({  user: "root",  pwd: "rootpw",  roles: [ "root" ]  })  // root user can do anything
> use lefa
> db.lefa.save( {name:"test"} )
> db.lefa.find()
> show dbs
> db.createUser({  user: "lefa",  pwd: "lefapw",  roles: [ { role: "dbOwner", db: "lefa" } ]  }) // admin of a db
> exit
$ sudo vim /etc/mongodb.conf
auth = true
$ sudo systemctl restart mongodb
$ mongo -u "root" -p "rootpw" --authenticationDatabase  "admin"
> use admin
> exit
$ mongo -u "lefa" -p "lefapw" --authenticationDatabase  "lefa"
> use lefa
> exit
Jinmin
la source
8

Tu pourrais changer /etc/mongod.conf.

Avant

#security:

Après

security:
    authorization: "enabled"

alors sudo service mongod restart

deusxmachine
la source
5

Suivez les étapes ci-dessous pour

  • Créer un utilisateur à l'aide de la CLI
use admin
db.createUser(
  {
    user: "admin",
    pwd: "admin123",
    roles: [ { role: "userAdminAnyDatabase", db: "admin" }, "readWriteAnyDatabase" ]
  }
)
  • Activez l'authentification, la façon dont vous le faites diffère en fonction de votre système d'exploitation, si vous utilisez Windows, vous pouvez simplement mongod --authen cas de Linux, vous pouvez modifier le /etc/mongod.conffichier à ajoutersecurity.authorization : enabled , puis redémarrer le service mongd
  • Pour se connecter via cli mongo -u "admin" -p "admin123" --authenticationDatabase "admin". C'est ça

Vous pouvez consulter ce post pour entrer dans plus de détails et apprendre à vous y connecter à l'aide de mangouste.

rahil471
la source
4

Création d'utilisateur avec mot de passe pour une base de données spécifique pour sécuriser l'accès à la base de données:

use dbName

db.createUser(
   {
     user: "dbUser",
     pwd: "dbPassword",
     roles: [ "readWrite", "dbAdmin" ]
   }
)
Hasib Kamal
la source
3

Ces étapes ont fonctionné sur moi:

  1. écrire mongod --port 27017 sur cmd
  2. puis connectez-vous à mongo shell: mongo --port 27017
  3. créer l'utilisateur admin: utilisez admin db.createUser ({user: "myUserAdmin", pwd: "abc123", rôles: [{role: "userAdminAnyDatabase", db: "admin"}]}))
  4. déconnecter la coquille mongo
  5. redémarrez le mongodb: mongod --auth --port 27017
  6. démarrer le shell mongo: mongo --port 27017 -u "myUserAdmin" -p "abc123" --authenticationDatabase "admin"
  7. Pour vous authentifier après la connexion, connectez le shell mongo au mongod: mongo --port 27017
  8. basculez vers la base de données d'authentification: utilisez admin db.auth ("myUserAdmin", "abc123"
Kevin Niasta
la source
3

La meilleure pratique pour se connecter à mongoDB comme suit:

  1. Après l'installation initiale,

    use admin

  2. Exécutez ensuite le script suivant pour créer un utilisateur administrateur

    db.createUser( { user: "YourUserName", pwd: "YourPassword", roles: [ { role: "userAdminAnyDatabase", db: "admin" }, { role: "readWriteAnyDatabase", db: "admin" }, { role: "dbAdminAnyDatabase", db: "admin" }, { role: "clusterAdmin", db: "admin" } ] })

le script suivant créera l'utilisateur admin pour la base de données.

  1. connectez-vous à db.admin en utilisant

    mongo -u YourUserName -p YourPassword admin

  2. Après la connexion, vous pouvez créer le numéro N de la base de données avec les mêmes informations d'identification d'administrateur ou différentes en répétant les 1 à 3.

Cela vous permet de créer différents utilisateurs et mots de passe pour les différentes collections que vous créez dans MongoDB

Balaji.JB
la source
après cela, allez sur sudo nano /etc/mongod.conf et mettez cette ligne security.authorization: activé, vous pouvez voir le lien de référence ici: stackoverflow.com/a/57384027/3904109
DragonFire
2

après avoir créé un nouvel utilisateur, n'oubliez pas d' grant read/write/rootautoriser l'utilisateur. vous pouvez essayer le

cmd: db.grantRolesToUser('yourNewUsername',[{ role: "root", db: "admin" }])

Haisheng Yu
la source