Cómo asegurar MongoDB para producción

Cómo asegurar MongoDB para producción

Luego de haber instalado MongoDB con la guía anterior, aprendiste cómo acceder a la consola de la herramienta, crear una base de datos, insertar registros y consultarlos. Hasta este momento, cualquier persona que tenga acceso a la línea de comandos de Linux del servidor podrá hacer lo mismo. Con el objetivo de asegurar MongoDB para un ambiente de producción, en este artículo explicaremos cómo restringir la utilización por usuario y agregar autenticación en el proceso.

Requisitos previos

Paso 1: Crear un usuario para tareas administrativas

Para comenzar, ingresa a la consola de Mongo utilizando el comando mongo. Si observas el mensaje que aparece a continuación, confirmarás que no se ha habilitado la autenticación por usuario y que el acceso a los datos y a la configuración no presenta ninguna restricción. Para ilustrar esto, show dbs (del inglés show databases o mostrar bases de datos) devolverá las existentes (entre las que se encuentra sistema que creaste en el artículo anterior).

La información sobre las credenciales de usuario (nombre de cada cuenta y contraseña) junto con los roles correspondientes se encuentran en una base de datos especial llamada admin. Para hacer cambios en la misma, ejecuta en la consola de MongoDB:

use admin

Si por casualidad tienes familiaridad con JavaScript, notarás que la sintaxis para crear un nuevo usuario tiene la forma de una función cuyo argumento es un objeto. En ese lugar agregarás los valores correspondientes a la nueva cuenta. Además, recuerda que db representa la base de datos actual, mientras que createUser es la función propiamente dicha. Para su visualización en esta guía, el código de abajo se encuentra formateado en un mismo bloque. Sin embargo, te recomendamos ejecutarlo línea por línea presionando Enter al finalizar cada una. MongoDB no correrá la función hasta que ingreses el paréntesis final.

Por otro lado, la función passwordPrompt() te presentará un prompt para ingresar la contraseña, mientras que la lista de roles indica los permisos que tendrá el usuario y sobre qué recursos. En este caso, el usuario adminsistema tendrá control completo sobre todas las bases de datos. Esto incluye no solamente las operaciones de lectura y escritura, sino también la posibilidad de crear y modificar otros usuarios y roles.

db.createUser({  
  user: "adminsistema",
  pwd: passwordPrompt(),
  roles: [{ role: "userAdminAnyDatabase", db: "admin" }, "readWriteAnyDatabase"]
})

Si todo sale como esperamos, deberías recibir una confirmación de que la cuenta se agregó correctamente como muestra la imagen de arriba. Sal de la consola de MongoDB con Ctrl + C o empleando la función quit().

Paso 2: Habilitar y testear la autenticación

Para completar este paso, edita el archivo de configuración /etc/mongod.conf que mostramos en la guía anterior:

sudo nano /etc/mongod.conf

Cuando localices la siguiente línea, borra el caracter numeral para habilitar la sección:

#security

A continuación, agrega la directiva authorization con el valor "enabled":

security:
   authorization: "enabled"

Simple, ¿verdad? Todo lo que necesitas hacer ahora para aplicar los cambios es guardar el archivo y reiniciar el servicio:

sudo systemctl restart mongod

Si ahora ingresas nuevamente a la consola de MongoDB, verás que el mensaje de autenticación no disponible ya no aparece más. Sin embargo, al ejecutar show dbs no verás la información que antes aparecía. Compara la imagen que aparece debajo con la primera de este artículo para verificar.

En otras palabras, aun cuando alguien logre acceder a la consola de MongoDB a través de la línea de comandos de Linux, no podrá ejecutar ninguna acción. Para terminar de confirmar que la autenticación está habilitada, sal de la consola y vuelve a ingresar pero de la siguiente manera:

mongo -u adminsistema -p --authenticationDatabase admin

Al ejecutar nuevamente show dbs verás nuevamente las bases de datos:

Conclusión

En este artículo aprendiste cómo asegurar MongoDB para producción al agregar autenticación para cualquier operación. A partir de este momento puedes tener la seguridad de que ninguna persona podrá acceder a las bases de datos sin los debidos permisos. La cuenta que creaste también te permitirá administrar usuarios y roles para cuestiones o aplicaciones específicas.

¿Te resultó útil esta guía?

Imagen por defecto
Gabriel Cánepa
Gabriel trabaja actualmente como desarrollador full-stack en Scalar, una firma que se dedica a hacer valuaciones de empresas. Es Administrador de Sistemas certificado por la Fundación Linux y previamente ha escrito un gran número de artículos y contenidos técnicos sobre el tema para: DigitalOcean, Linode, Carrera Linux Argentina y Tecmint. Tiene una certificación en programación de la Universidad de Brigham Young-Idaho, y está completando las carreras de programador y analista de sistemas en la Universidad Nacional de Villa Mercedes (UNViMe). En su tiempo libre, Gabriel disfruta leyendo libros de Stephen R. Covey, tocando piano y guitarra, y enseñando conocimientos de programación a su dos hijas.