Come proteggere MongoDB con nome utente e password


377

Voglio impostare l'autenticazione con nome utente e password per la mia istanza MongoDB, in modo che qualsiasi accesso remoto richieda il nome utente e la password. Ho provato il tutorial dal sito MongoDB e ho fatto quanto segue:

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

Dopo di ciò, sono uscito e ho corso di nuovo mongo. E non ho bisogno di password per accedervi. Anche se mi collego al database in remoto, non mi viene richiesto il nome utente e la password.


AGGIORNAMENTO Ecco la soluzione che ho finito per usare

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

Il nome utente e la password funzioneranno allo stesso modo per mongodumpe mongoexport.


4
questo per MongDB versione 2.2.x
— Tom Imrei

23
In Mongo 3.0.4 il comando per la creazione di un utente è db.createUser () .
— chronologos,

4
Seguire questa procedura per creare un utente amministratore su Mongodb 3.0 docs.mongodb.org/v3.0/tutorial/add-user-administrator
— Sul Aga,

3
Un aggiornamento per MongoDB 3.0+: come impostare l'autenticazione in MongoDB 3.0 .
— Dan Dascalescu,

1
Per essere chiari, questo non crittografa i byte che passano sul filo. È solo per il controllo degli accessi.
— Daniel F,

Risposte:


118

È necessario iniziare mongodcon l' --authopzione dopo aver impostato l'utente.

Dal sito MongoDB:

Eseguire il database (processo mongod) con l' --authopzione per abilitare la sicurezza. È necessario aver aggiunto un utente al db admin prima di avviare il server --autho aggiungere il primo utente dall'interfaccia localhost.

Autenticazione MongoDB


1
L'ho provato e ho seguito l'esempio. ora .. posso impostarlo dopo aver riavviato il server con --auth. Tuttavia, quando provo ad accedere (./mongo -u theadmin -p 12345) non riesco. Non riesco ad accedere.
— Murvinlai,

Se dopo non è stato possibile connettersi, è perché si sta tentando di connettersi sul admindb, utilizzare un altro db e riprovare. Solo un userAdmin (AnyDatabase) può connettersi admin.
— Vadorequest,

80

Wow così tante risposte complicate / confuse qui.

Questo è dalla v3.4 .

Risposta breve.

1) Avviare MongoDB senza controllo di accesso.

mongod --dbpath /data/db

2) Connettersi all'istanza.

mongo

3) Creare l'utente.

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

4) Arrestare l'istanza MongoDB e avviarla nuovamente con il controllo di accesso.

mongod --auth --dbpath /data/db

5) Connettiti e autenticati come utente.

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

Risposta lunga: leggi questo se vuoi capire correttamente.

È davvero semplice Mi stupirò di seguito https://docs.mongodb.com/manual/tutorial/enable-authentication/

Se vuoi saperne di più su ciò che i ruoli effettivamente fanno, leggi di più qui: https://docs.mongodb.com/manual/reference/built-in-roles/

1) Avviare MongoDB senza controllo di accesso.

mongod --dbpath /data/db

2) Connettersi all'istanza.

mongo

3) Creare l'amministratore utente. Di seguito viene creato un amministratore utente nel admindatabase di autenticazione. L'utente è dbOwnersul some_dbdatabase e NON sul admindatabase, questo è importante da ricordare.

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

O se si desidera creare un amministratore che è admin su qualsiasi database:

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

4) Arrestare l'istanza MongoDB e avviarla nuovamente con il controllo di accesso.

mongod --auth --dbpath /data/db

5) Connettersi e autenticarsi come amministratore utente verso il admindatabase di autenticazione, NON verso il some_dbdatabase di autenticazione. L'amministratore utente è stato creato nel admindatabase di autenticazione, l'utente non esiste nel some_dbdatabase di autenticazione.

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

Ora sei autenticato come dbOwnersopra il some_dbdatabase. Quindi ora se desideri leggere / scrivere / fare cose direttamente nel some_dbdatabase puoi cambiarlo.

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.

Altre informazioni sui ruoli: https://docs.mongodb.com/manual/reference/built-in-roles/

Se desideri creare altri utenti che non sono amministratori utenti e che sono solo utenti normali, continua a leggere di seguito.

6) Creare un utente normale. Questo utente verrà creato nel some_dbdatabase di autenticazione in basso.

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

7) Esci dalla shell mongo, riconnetti, autentica come utente.

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

2
Finalmente ho avuto un'idea di ciò che sta realmente accadendo.
— partì il


3
Mi ritrovo a desiderare che le risposte accettate possano essere aggiornate su SO. Questa è la soluzione più rilevante a partire da luglio 2017.
— azatar,

1
Aggiorna la tua risposta! Non so da dove hai preso userAdminAnyDatabase ma non funziona. Il ruolo è root per l'accesso dell'amministratore su tutti i dbs.
— Aakash Verma,

@AakashVerma docs.mongodb.com/manual/reference/built-in-roles/… ;) Inoltre NON USARE MAI ROOT se non per scopi di sviluppo in cui sai che non puoi essere compromesso! (semplicemente non usano mai root lol)
— K - La tossicità in SO sta crescendo.

63

Per prima cosa, #auth=trueannulla la commento della riga che inizia con nel file di configurazione di mongod (percorso predefinito /etc/mongo.conf). Ciò consentirà l'autenticazione per mongodb.

Quindi, riavvia mongodb: sudo service mongod restart


10
il percorso predefinito /etc/mongod.confnon è/etc/mongo.conf
— Mithril

2
oppure, prima decommenta, quindi riavvia :)))
— GioMac

2
Aggiornamento: Ora riavvia il servizio con: sudo service mongodb restart
— sharafjaffri

il percorso e il nome del file di configurazione sono: /etc/mongodb.conf
— HGMamaci

46

Questa risposta è per Mongo 3.2.1 Riferimento

Terminale 1:

$ mongod --auth

Terminale 2:

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

se si desidera aggiungere senza ruoli (facoltativo):

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

per verificare se autenticato o meno:

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

dovrebbe darti:

1

altro :

Error: Authentication failed.
0

2
le versioni precedenti come 2.4 userebbero db.addUser
— arviman il

Ho dovuto digitare use adminprima createUseraltrimenti avrebbe dato un errore.
— Guillaume F.

28

Ecco un codice javascript per aggiungere utenti.

  1. Inizia mongodcon--auth = true

  2. Accedi al database di amministrazione dalla shell mongo e passa il file javascript.

    mongo admin "Nomefile.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. Ora l'aggiunta dell'utente è completa, possiamo verificare l'accesso al database dalla shell mongo


1
L'impostazione del nome utente e della password in un file non sembra molto sicura.
— Esplorazione del

Javascript. Non "java script".
— Camilo Martin,

qual è lo scopo del file javascript qui?
— Ravi,

@CamiloMartin JavaScript, non "Javascript".
— Madbreaks


10

Eseguire prima mongoDB sul terminale usando

mongod

ora esegui mongo shell usa i seguenti comandi

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

Riavvia l'istanza MongoDB con controllo degli accessi.

mongod --auth

Ora autenticati dalla riga di comando utilizzando

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

L'ho letto da

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


1
ho definito un utente, con root, quindi aggiungo sempre di più finché non ti trovo, 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" } ] }autenticazione fallisce ancora
— deadManN

ho persino usato db.changeUserPassword () o qualsiasi altra cosa, anche dopo, quando chiamo db.auth ('admin', 'my pass') o il modo in cui l'hai fatto, dice che l'autenticazione non è riuscita per l'amministratore utente
— deadManN,

Usa il rootruolo per fornire l'accesso alle operazioni e tutte le risorse dei seguenti ruoli combinati ... root del ruolo
— Laode Muhammad Al Fatih

8

Questo è quello che ho fatto su 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

8

Si potrebbe cambiare /etc/mongod.conf.

Prima

#security:

Dopo

security:
    authorization: "enabled"

Poi sudo service mongod restart


5

Seguire i passaggi seguenti in ordine

  • Creare un utente utilizzando l'interfaccia della riga di comando
use admin
db.createUser(
  {
    user: "admin",
    pwd: "admin123",
    roles: [ { role: "userAdminAnyDatabase", db: "admin" }, "readWriteAnyDatabase" ]
  }
)
  • Abilita l'autenticazione, il modo in cui lo fai differisce in base al tuo sistema operativo, se stai usando Windows puoi semplicemente mongod --authin caso di Linux puoi modificare il /etc/mongod.conffile da aggiungere security.authorization : enablede quindi riavviare il servizio mongd
  • Per connettersi tramite cli mongo -u "admin" -p "admin123" --authenticationDatabase "admin". Questo è tutto

Puoi dare un'occhiata a questo post per entrare in maggiori dettagli e per imparare a collegarti usando la mangusta.


4

Creazione utente con password per un database specifico per proteggere l'accesso al database:

use dbName

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


3

Questi passaggi hanno funzionato su di me:

  1. scrivi mongod --port 27017 su cmd
  2. quindi connettersi alla shell mongo: mongo --port 27017
  3. crea l'utente admin: usa admin db.createUser ({utente: "myUserAdmin", pwd: "abc123", ruoli: [{ruolo: "userAdminAnyDatabase", db: "admin"}]})
  4. scollegare la shell mongo
  5. riavviare il mongodb: mongod --auth --port 27017
  6. avvia mongo shell: mongo --port 27017 -u "myUserAdmin" -p "abc123" --authenticationDatabase "admin"
  7. Per eseguire l'autenticazione dopo la connessione, collegare la shell mongo al mongod: mongo --port 27017
  8. passare al database di autenticazione: utilizzare admin db.auth ("myUserAdmin", "abc123"

3

Le migliori pratiche per connettersi a mongoDB come segue:

  1. Dopo l'installazione iniziale,

    use admin

  2. Quindi eseguire il seguente script per creare l'utente amministratore

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

il seguente script creerà l'utente admin per il DB.

  1. accedi a db.admin usando

    mongo -u YourUserName -p YourPassword admin

  2. Dopo l'accesso, è possibile creare un numero N del database con le stesse credenziali di amministratore o diverso ripetendo da 1 a 3.

Ciò consente di creare diversi utenti e password per la diversa raccolta che si sta creando in MongoDB


dopo questo vai sudo nano /etc/mongod.conf e mettere questa riga security.authorization: abilitato, è possibile vedere il link di riferimento qui: stackoverflow.com/a/57384027/3904109
— DragonFire

2

dopo aver creato un nuovo utente, non dimenticare di grant read/write/rootautorizzare l'utente. puoi provare il

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

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.