Cómo Tomar Control de la Seguridad de Tu MongoDB

Los hackers se están volviendo más sofisticados y saben cómo aprovechar las vulnerabilidades. Si tienes datos sensibles en tu base de datos MongoDB, es crucial tomar en serio la seguridad. ¿Pero cómo? ¡No te preocupes! ¡Este tutorial te tiene cubierto!

En este tutorial, aprenderás a proteger tus bases de datos MongoDB y a alejar a los hackers configurando medidas de seguridad.

¡Sigue leyendo y comienza a tomar el control de la seguridad de tu MongoDB!

Prerrequisitos

  • Este tutorial será una demostración práctica. Para seguirlo, asegúrate de tener lo siguiente:
  • A non-root user with sudo privileges.

Creación de un usuario administrativo dedicado

MongoDB no tiene ningún sistema de autenticación integrado. Por defecto, cualquiera con acceso a la base de datos tiene privilegios administrativos completos, ¡demasiado peligroso! ¿Cómo asegurar tu base de datos? Crearás un usuario con privilegios administrativos y cerrarás las bases de datos a ese usuario administrativo.

Esta configuración te permite proporcionar un único punto de acceso de usuario con privilegios administrativos, al tiempo que restringe lo que cada usuario puede hacer dentro de la base de datos. Por ejemplo, los desarrolladores deben tener acceso de solo lectura a las bases de datos, mientras que los administradores pueden crear y editar datos.

1. Abre tu terminal y ejecuta el siguiente comando mongo sin argumentos. Este comando te permite conectarte a tu shell de MongoDB como el usuario administrador predeterminado.

Este usuario administrador es poderoso ya que tiene acceso completo de lectura/escritura a todas las bases de datos del servidor, y es mejor evitar utilizar este usuario para el trabajo diario.

mongo

Recibirás una advertencia que dice No se ha habilitado el control de acceso…, como se muestra a continuación.

Esta advertencia indica que cualquier persona que pueda acceder al servidor de MongoDB puede realizar las acciones que desee con las bases de datos. Estas acciones incluyen, pero no se limitan a, eliminar, eliminar, actualizar bases de datos.

Esta advertencia aparece porque aún no has habilitado el control de acceso. No te preocupes por ahora. Aprenderás cómo habilitar el control de acceso en la siguiente sección.

Connecting to your MongoDB shell

2. A continuación, ejecuta el comando show dbs para mostrar todas las bases de datos en el servidor, incluidas las bases de datos admin que un usuario normal no debería ver.

show dbs
Showing all databases on the server

3. Ejecute el comando use admin a continuación para cambiar a la base de datos de administración ya que su enfoque está en crear un usuario administrativo dedicado. Este comando cambia el contexto de su base de datos actual para usar la base de datos de administración, como se muestra a continuación.

MongoDB utiliza la base de datos de administración para almacenar reglas de control de acceso y proporcionar autenticación incorporada, nombres de usuario y contraseña para los usuarios y sus roles. No puede eliminar ni cambiar el nombre de la base de datos de administración porque es esencial para la funcionalidad de la base de datos.

use admin
Switching to the admin database

4. Ahora, copie y pegue el código a continuación en el shell de mongo y presione Enter. Este código crea un usuario llamado AdminATA, con una contraseña de LDWbPf6Fy9Ezs3Mv, pero puede usar credenciales diferentes si lo prefiere.

Este nuevo usuario tiene acceso de lectura/escritura (readWriteAnyDatabase) a todas las bases de datos y acceso de administrador a todas las colecciones. Pero este usuario no tiene privilegios para eliminar bases de datos y no puede eliminar ni cambiar privilegios de otros usuarios.

Después de ejecutar el comando y si recibe un error, vuelva a verificar su código e inténtelo nuevamente.

# El método db.createUser() crea un nuevo usuario en la base de datos actual, con los privilegios especificados por los roles.
db.createUser(
{
# Especificando el nombre de usuario AdminATA, pero puedes ingresar el nombre de usuario que desees
user: "AdminATA",
# El método passwordPrompt() es una función auxiliar universal 
# que indica al shell de MongoDB que te solicite una contraseña para el usuario AdminATA.
pwd: passwordPrompt(),
# Especificando los roles que deseas que tenga tu usuario AdminATA.
roles: [ { role: "userAdminAnyDatabase", db: "admin" }, "readWriteAnyDatabase" ]
}
)

5. Proporcione una contraseña segura cuando se le solicite, como se muestra a continuación, y presione Enter.

Providing a secure password

A continuación, puede ver un mensaje de Usuario añadido correctamente. Esta salida confirma que ha creado correctamente un usuario con privilegios administrativos y los ha restringido a los privilegios mínimos requeridos.

En este punto, ya tienes un usuario administrativo llamado AdminATA que puede hacer todo lo que necesitas en la base de datos sin dar acceso a todos.

Verifying Successful Admin User Creation in MongoDB

6. Por último, ejecute el comando exit para salir del shell de mongo.

exit
Leaving the mongo shell

Agregando seguridad mediante la activación de la autenticación

Ahora que tienes un usuario administrativo, agregarás otra capa de seguridad activando la autenticación. Al hacerlo, se otorga acceso a la base de datos solo a los usuarios con las credenciales correctas.

La autenticación se refiere al proceso de validar una conexión, generalmente proporcionando un nombre de usuario y contraseña o utilizando un token de autenticación. La autenticación asegura que eres quien dices ser y no un impostor intentando acceder a recursos.

1. Habilita la autenticación editando el archivo de configuración de MongoDB con lo siguiente y guarda los cambios:

  • Abre el archivo /etc/mongod.conf en tu editor de texto favorito. El archivo /etc/mongod.conf contiene la configuración de tu clúster MongoDB.
  • Busca y descomenta la directiva #security eliminando el símbolo # delante de la directiva, como se muestra a continuación. Esta directiva le indica a MongoDB que busque la configuración de seguridad en el archivo de configuración.
  • Añade una nueva línea debajo de la directiva security que diga authorization: enabled. Ten en cuenta que la línea authorization: enabled está sangrada (tiene dos espacios al principio), como se muestra a continuación.
Adding the authorization parameter

2. A continuación, ejecuta el siguiente comando systemctl para reiniciar el servidor MongoDB y que los cambios surtan efecto.

sudo systemctl restart mongod

3. Por último, ejecuta el siguiente comando para ver el estado de tu servicio MongoDB.

sudo systemctl status mongod

A continuación, puedes ver una línea que dice Activo: activo (en ejecución) en texto verde, lo que indica que tu servidor MongoDB está en funcionamiento y listo para aceptar conexiones.

Viewing MongoDB Service Status

Probando si la autenticación funciona

Acabas de habilitar la autenticación, ¿pero cómo sabes si funciona? Iniciarás sesión con el usuario administrativo para probar y asegurarte de que la autenticación funcione viendo las bases de datos.

1. Ejecuta los siguientes comandos para acceder a la consola mongo como lo hiciste en la sección “Creación de un Usuario Administrativo Dedicado” (paso uno).

mongo

Como puedes ver a continuación, ya no recibirás la advertencia El control de acceso no está habilitado… sobre habilitar la autenticación. En su lugar, recibirás un mensaje que te indica la versión de tu servidor MongoDB y la consola de MongoDB.

Connecting to the MongoDB Shell

2. A continuación, vuelve a ejecutar el comando show dbs para comprobar si aún puedes acceder a la base de datos.

show dbs

El comando debería mostrarte todas las bases de datos, incluso la base de datos de administración. Pero como ves a continuación, no se muestra nada. ¿Por qué? Ver la lista de bases de datos es un privilegio reservado solo para usuarios administrativos.

No has autenticado tu consola mongo para usar el rol de Administrador, por lo que no estás autorizado para ver la lista de bases de datos.

Listing All Databases (empty)

Con la autenticación habilitada, la conexión fallará si alguien intenta acceder a la base de datos utilizando una cadena de conexión que no contenga las credenciales correctas.

La autenticación de las cadenas de conexión es una parte fundamental de la seguridad de MongoDB, y debes implementar la autenticación en todas las capas de la aplicación. Todas las conexiones a MongoDB deben utilizar una cadena de autenticación que consta de credenciales. Estas credenciales incluyen el nombre de usuario y la contraseña correctos.

3. Ejecuta el comando exit para salir del shell de MongoDB.

exit

4. Ahora, ejecuta el siguiente comando para iniciar sesión en el shell de MongoDB con el nombre de usuario (-u) y la contraseña (-p) de tu usuario administrativo recién creado. Reemplaza AdminATA con el nombre de usuario que creaste en la sección “Creación de un Usuario Administrativo Dedicado” (paso cuatro).

El parámetro --authenticationDatabase indica al shell de MongoDB que se autentique contra la base de datos admin.

mongo -u AdminATA -p --authenticationDatabase admin

5. Proporciona tu contraseña cuando se te solicite para el usuario administrativo.

Providing administrative password
logging into the MongoDB shell as an administrator

6. Finalmente, vuelve a ejecutar el comando show dbs para ver si puedes ver todas las bases de datos.

show dbs

Esta vez, como se muestra a continuación, aparece la lista de bases de datos, ya que eres un usuario administrador.

Listing all databases as admin user

Conclusión

En este tutorial, aprendiste cómo conectar para crear un usuario administrativo y habilitar la autenticación. Has aprendido a tomar control de la seguridad de tu MongoDB y poner restricciones sobre quién puede acceder a las bases de datos en tu servidor.

En este punto, decides quién puede acceder a qué. ¿Qué sigue para ti? Tal vez aprender cómo usar un contenedor MongoDB de manera segura?

Source:
https://adamtheautomator.com/mongodb-security/