Ya había hablado sobre la instalación y el uso de MongoDB, pero seguramente muchos se preguntaran como le dan seguridad a MongoDB para que solo algunos usuarios puedan acceder, e inclusive algunos usuarios solo puedan leer/escribir una sola base de datos, ahora bien, eso es posible, pero no esta activada por defecto.
Seguridad en MongoDB
A la hora de poner en producción algún servicio uno debe asegurar dicho servicio al máximo para evitar malos ratos posteriormente, en el caso de MongoDB es tan sencillo como su propia instalación.
Creando un usuario administrador
Para comenzar, hay que definir un super usuario, para hacerlo, abrimos la shell de MongoDB, nos cambiamos a la BD “admin” (use admin) y agregamos un usuario.
1 2 3 4 5 6 7 8 9 10 11 12 13 | yograterol@localhost ~$ mongo MongoDB shell version: 2.2.3 connecting to: test > use admin switched to db admin > db.addUser("admin", "admin") { "_id" : ObjectId("5105af4b0527307f8210ca6a"), "pwd" : "7c67ef13bbd4cae106d959320af3f704", "readOnly" : false, "user" : "admin" } > |
Activando autenticación
Para activar la autenticación hay que modificar el archivo /etc/mongodb.conf
1 | yograterol@localhost ~$ sudovim/etc/mongodb.conf |
Des comentamos “#auth = true” y reiniciamos el servicio.
1 2 | yograterol@localhost system$ sudo service mongod restart Redirecting to /bin/systemctl restart mongod.service |
Accediendo a la BD admin
1 2 3 4 5 6 7 8 9 10 11 12 | yograterol@localhost system$ mongo MongoDB shell version: 2.2.3 connecting to: test > use admin switched to db admin > show collections Sat Mar 917:35:43exec error: src/mongo/shell/query.js:128 error: { "$err" : "unauthorized db:admin ns:admin.system.namespaces lock type:0 client:127.0.0.1", "code" : 10057 } throw "error: " + tojson( ret ); ^ |
Se accede de manera que siempre lo hacemos, pero si tratamos de ver las colecciones nos lanza un error, por no estar autorizado.
Iniciando Sesión
Para iniciar sesión, hay que ubicarse en la bd de datos y usar el comando db.auth(“usuario”, “pass”)
En el caso anterior
1 2 3 4 5 6 | > db.auth("admin", "admin") 1 > show collections system.indexes system.users > |
LISTO! Ya nuestro usuario administrador puede ver todo en la BD.
Ahora creamos otra BD y agregamos un documento.
1 2 3 4 5 6 | > use prueba switched to db prueba > db.prueba.insert({texto: "hola"}); > db.prueba.find() {"_id" : ObjectId("513bb3d23c88facd892eff78"), "texto" : "hola"} > |
Tratamos de acceder
1 2 3 4 5 6 7 8 9 10 11 | yograterol@localhost system$ mongo MongoDB shell version: 2.2.3 connecting to: test > use prueba switched to db prueba > db.prueba.find() error: { "$err" : "unauthorized db:prueba ns:prueba.prueba lock type:0 client:127.0.0.1", "code" : 10057 } > |
Ya no se puede hacer nada sin tener un usuario.
Creando usuarios comunes
Para crear usuarios hay que iniciar sesión como administrador y luego nos ubicamos en la BD y creamos un usuario.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | yograterol@localhost system$ mongo MongoDB shell version: 2.2.3 connecting to: test > use admin switched to db admin > db.auth("admin", "admin") 1 > use prueba switched to db prueba > db.addUser("prueba", "prueba") { "user" : "prueba", "readOnly" : false, "pwd" : "509ab3f5423ef6c5d3f22cd6f0b7b817", "_id" : ObjectId("513bb4b19ea036e88ddacd3e") } > show collections prueba system.indexes system.users > |
Testeando el usuario
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | yograterol@localhost system$ mongo MongoDB shell version: 2.2.3 connecting to: test > use prueba switched to db prueba > db.auth("prueba", "prueba") 1 > use admin switched to db admin > show collections Sat Mar 917:47:23exec error: src/mongo/shell/query.js:128 error: { "$err" : "unauthorized db:admin ns:admin.system.namespaces lock type:0 client:127.0.0.1", "code" : 10057 } throw "error: " + tojson( ret ); ^ > use prueba switched to db prueba > show collections prueba system.indexes system.users > |
Aquí iniciamos como usuario prueba y vemos que en la BD admin no podemos hacer nada
Finalizando
Así de fácil se configura el control de acceso por autenticación en MongoDB, así que seguridad para sus servicios.