Por defecto MongoDB no tiene activada la autenticación. Esto significa que cualquiera puede entrar a MongoDB, incluso remotamente si el firewall no tiene el puerto 27017 bloqueado.
Bien, esto es muy cómodo durante el desarrollo, no hay que preocuparse de usuarios y contraseñas, y podemos usar Robomongo para administrar MongoDB remotamente y de forma visual. Pero a la hora de salir a la luz es cuando menos un suicidio en toda regla. Vamos a activar la autenticación y a configurar un par de usuarios.
Doy por supuesto que MongoDB está instalado, sea manualmente o vía gestor de paquetes tipo apt-get. Si aun no tienes MongoDB instalado, en la web oficial tienen varios tutoriales, como por ejemplo éste para Ubuntu: Instalar MongoDB en Ubuntu
Bien, vamos a empezar por crear un usuario administrador, algo así como el usuario root pero para mongo. Este usuario podrá a su vez crear y modificar otros usuarios, sus permisos, etc. Muy sencillo:
- Entramos en la consola de MongoDB escribiendo mongo
- Seleccionamos la base de datos admin escribiendo use admin
- Creamos el usuario. Necesitamos usuario y contraseña, por ejemplo “admin” y “mipassword”, escribiendo:
12345db.addUser({user:"admin",pwd: "mipassword",roles:["clusterAdmin","readAnyDatabase","readWriteAnyDatabase","userAdminAnyDatabase","dbAdminAnyDatabase"]}); - Ok, ahora vamos a editar el archivo de configuración /etc/mongodb.conf para activar la autenticación. Basta con descomentar la línea #auth = true
- Finalmente reiniciamos mongo, en Ubuntu si hemos instalado MongoDB vía apt-get bastará con escribir: service mongodb restart
Bien, ya tenemos nuestro usuario superadministrador, y MongoDB ya solo permite entrar con ese usuario salvo que estemos en local. Por defecto cualquier usuario local puede entrar en MongoDB, así que nuestro cambio solo habrá afectado a los accesos remotos. Si no queremos que mongo autorice ninguna conexión local sin autenticar, deberemos añadir
enableLocalhostAuthBypass=0 al archivo de configuración de MongoDB.
Pues vamos a probarlo, entramos como administradores a la consola de MongoDB:
1 |
mongo localhost/admin -u admin -p |
Bien, nos pide la pass y estamos dentro. Esta era la primera parte del tutorial, crear un usuario admin y activar la autenticación. Sin embargo nos queda otra parte. Ahora vamos a crear un usuario con poderes más reducidos, concretamente para que trabaje solo sobre la base de datos “proyecto”, vamos a ello.
- Entramos a la consola de MongoDB con un usuario con permisos de admin, como acabamos de ver: mongo localhost/admin -u admin -p
- Seleccionamos la base de datos en la que vayamos a crear un usuario: use proyecto
- Agregamos un usuario con permisos para leer, escribir y administrar esta DB:
12345db.addUser({user:"salva",pwd:"mipassword",roles:["readWrite","dbAdmin"]}) - Reiniciamos MongoDB, service mongodb restart
- Ya solo nos falta modificar nuestra aplicación. Si estamos usando Mongoose por ejemplo, cambiaremos el acceso inseguro de antes por el acceso con usuario y contraseña:
1234module.exports = {//'url': 'mongodb://127.0.0.1:27017/proyecto' //esto ya no sirve'url': 'mongodb://salva:mipassword@127.0.0.1:27017/proyecto'};
Bien pues con esto ya hemos terminado. Si queréis saber más sobre los usuarios y los permisos en MongoDB os remito a la documentación oficial:
http://docs.mongodb.org/manual/tutorial/add-user-to-database/
http://docs.mongodb.org/manual/reference/user-privileges/