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
- Tener un servidor Ubuntu 20.04 con MongoDB instalado. En nuestra guía Cómo instalar y configurar MongoDB en Ubuntu 20.04 te enseñamos cómo hacerlo.
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.