[Serie MongoDB] 3. Política de seguridad de MongoDB: autenticación y autorización

prefacio

En el artículo anterior, cuando se conecta al servicio MongoDB a través de herramientas cliente (MongoDB Shell, Robo 3T), siempre que tenga la dirección IP y el número de puerto, puede conectarse a la base de datos y luego podrá operar la base de datos. Esto se debe a que la instalación predeterminada de MongoDB no tiene la autenticación habilitada ni ningún nombre de usuario ni contraseña iniciales establecidos. Sin embargo, esto puede provocar muchos problemas de seguridad de los datos.

MongoDB proporciona varias formas de mejorar la seguridad de la base de datos, como autenticación , control de acceso , cifrado , etc.

Este artículo presenta principalmente los roles y permisos integrados proporcionados por MongoDB y luego proporciona seguridad de la base de datos al habilitar la autenticación y especificar diferentes permisos de acceso para los usuarios .

En los dos artículos anteriores, instalamos la base de datos MongoDB en Windows, Linux y Docker respectivamente. El contenido presentado en este artículo se demuestra tomando como ejemplo MongoDB en un entorno Linux. El funcionamiento en el sistema Windows es básicamente el mismo.

Distinguir entre autenticación y autorización

La verificación es autenticación. Cuando los usuarios se conectan al servicio MongoDB, deben proporcionar el nombre de usuario, la contraseña y la base de datos de verificación para verificar la identidad.

La autorización es control de permisos. Los amigos que hayan creado sistemas de gestión en segundo plano deben estar familiarizados con el modelo RBAC. MongoDB también adopta el modelo RBAC: al crear un usuario, es necesario especificar un rol para que obtenga el permiso correspondiente para operar la base de datos.

La autenticación solo restringe si los usuarios pueden conectarse a los servicios de la base de datos y, mediante el control de permisos, los usuarios pueden controlar con mayor precisión varias operaciones en la base de datos. De manera análoga a los sistemas comunes de administración en segundo plano, tanto los administradores como los usuarios comunes pueden iniciar sesión en el sistema, pero las páginas a las que pueden acceder y las operaciones que pueden realizar son bastante diferentes.

Roles integrados de MongoDB

MongoDB otorga a los usuarios acceso a datos y comandos a través de RBAC y proporciona una variedad de funciones integradas para proporcionar diferentes niveles de acceso que normalmente se requieren en los sistemas de bases de datos. Además de utilizar roles integrados, también admite roles definidos por el usuario.

El contenido de esta parte se describe en detalle en el sitio web oficial . Primero, comprendamos algunos roles y permisos de uso común.

Roles de lectura y escritura de bases de datos:

  • leer: permite al usuario leer la base de datos especificada
  • readWrite: permite al usuario leer y escribir la base de datos especificada

Rol del administrador de bases de datos:

  • dbAdmin: permite a los usuarios crear y eliminar índices, ver estadísticas o acceder a system.profile, pero no tiene permisos para la administración de roles y usuarios.
  • dbOwner: Brinda la capacidad de realizar cualquier operación en la base de datos. Este rol combina los privilegios otorgados por los roles readWrite, dbAdmin y userAdmin.
  • userAdmin: proporciona la capacidad de crear y modificar roles y usuarios en la base de datos actual.

Todas las funciones de la base de datos:

  • readAnyDatabase: solo disponible en la base de datos de administración, lo que brinda a los usuarios acceso de lectura a todas las bases de datos
  • readWriteAnyDatabase: solo disponible en la base de datos de administración, lo que otorga a los usuarios permisos de lectura y escritura para todas las bases de datos.
  • userAdminAnyDatabase: solo disponible en la base de datos de administración, lo que otorga a los usuarios permisos de administrador de usuario para todas las bases de datos.
  • dbAdminAnyDataBase: solo disponible en la base de datos de administración, otorgando al usuario permisos de administrador para todas las bases de datos.

Rol de superusuario:

  • root: solo disponible en la base de datos de administración, un superusuario con superprivilegios

En este artículo, utilizamos principalmente rootel rol para configurar el superadministrador de la base de datos y luego usamos los roles ready dbOwnerpara crear usuarios con diferentes permisos para una determinada base de datos.

Autenticación

Activar la autenticación

Al iniciar el servicio MongoDB, --authhabilite la autenticación en la línea de comando configurando:

$ mongod -f /data/mongodb/mongodb.conf --auth

O habilítelo en el archivo de configuración security.authorization:

security: 
  authorization: enabled
  • autorización: indica si se habilita el control de acceso de usuarios, es decir, si el cliente necesita acceder al servicio de base de datos mediante autenticación de nombre de usuario y contraseña. El valor predeterminado está deshabilitado.

De la siguiente manera, en este momento el servicio MongoDB ha habilitado la autenticación:

imagen-20221110141908071

Resumir:

Activar la autenticación:

Al iniciar el servicio mongod, utilice --auth;

Utilice la herramienta cliente mongosh para conectarse al servicio mongod;

Cree una cuenta de superadministrador;

Crear usuario superadministrador

Una vez que MongoDB habilita la autenticación, no hay un nombre de usuario ni una contraseña predeterminados, y debe configurarlos usted mismo .

Utilice mongoshel servicio de conexión:

$ mongosh

imagen-20221110143005242

Después de habilitar la autenticación, puede ingresar a la base de datos incluso sin ingresar el nombre de usuario y la contraseña, pero no tiene permiso para operar la base de datos en este momento, por ejemplo:

imagen-20221110143232244

Lo único que se puede hacer en este momento es crear un usuario con rol de superadministrador .

Para crear un superadministrador, debe ingresar admina la base de datos y luego usar db.createUserel método para crear usuarios:

use admin;

db.createUser({
    
    
  user: "Kunwu",
  pwd: "abc123",
  roles: [
    {
    
     role: "root", db: "admin"}
  ]
});

Descripción de los elementos de configuración:

  • usuario: El nombre del usuario creado.
  • pwd: Contraseña de usuario creada.
  • roles: establece la información del rol del usuario, es una matriz, puede establecer una variedad de roles.
  • rol: establece el rol del usuario. MongoDB proporciona varios roles diferentes, que se configuran aquí como el rol de superusuario root.
  • db: establece la base de datos donde los permisos de usuario entran en vigor. Debido a rootla particularidad del rol, solo se puede configurar en admin. Pero rootlos usuarios con el rol tienen súper privilegios.

imagen-20221110145315071

Utilice el superadministrador para conectarse al servicio

Después de habilitar la autenticación, al conectarse al servicio MongoDB a través de herramientas del cliente (MongoDB Shell, Robo 3T, etc.), debe especificar un nombre de usuario y una contraseña, y existen dos métodos de autenticación.

Método 1: verificar al conectar

Especifique el nombre de usuario y la base de datos de autenticación al conectarse al servicio de base de datos:

$ mongosh -u Kunwu --authenticationDatabase admin
  • -u/–usuario: especifica el nombre de usuario

  • –authenticationDatabase: especifica la base de datos de autenticación. La base de datos de autenticación es la base de datos en la que se creó el usuario . La base de datos donde se creó Kunwu arriba es admin, por lo que su base de datos de autenticación es admin.

Luego se le solicitará una contraseña en la línea de comando:

imagen-20221110234434581

Después de ingresar la contraseña, presione Enter para confirmar e iniciar sesión:

imagen-20221110234527592

También puedes -p/--passwordingresar la contraseña directamente en la línea de comando a través de:

$ mongosh -u Kunwu -p abc123 --authenticationDatabase admin

Método 2: verificar después de la conexión

En lugar de proporcionar el nombre de usuario, la contraseña y la base de datos de autenticación, después de conectarse al servicio de la base de datos, ingrese a la base de datos de autenticación y use el método db.auth para verificar el nombre de usuario y la contraseña.

$ mongosh

Verificar identidad:

use admin;

db.auth('Kunwu', 'abc123');

imagen-20221110160528461

Conéctate con Robo 3T

Crea una nueva conexión. ConnectionIngrese la IP y el puerto del servicio de base de datos en :

imagen-20221110162721247

AuthenticationEntra en el segundo por turno:

  • Base de datos: la base de datos de autenticación especificada al crear un usuario.
  • Nombre de usuario: nombre de usuario
  • Contraseña: contraseña de usuario

imagen-20221110162403451

Luego haga clic en el botón de prueba en la esquina inferior izquierda para realizar una prueba de conexión:

imagen-20221110162311453

Luego puede usar Robo 3T para administrar la biblioteca de la base de datos.

Un suplemento sobre la base de datos de autenticación

La base de datos de autenticación se refiere a la base de datos en la que se crea el usuario . Por ejemplo, el artículo anterior es adminel usuario superadministrador creado en la base de datos Kunwu, luego la base de datos de autenticación de este usuario es admin. Al iniciar sesión en la base de datos, authenticationDatabasedebe especificarse como admin.

Verificar la base de datos no significa que el usuario sólo pueda operar esta base de datos .

MongoDB tiene una variedad de roles integrados. Al crear un usuario, puede especificar múltiples roles y bases de datos. En este momento, la base de datos especificada es la base de datos que el usuario puede operar. Por ejemplo:

db.createUser({
    
    
  user: "Kunwu",
  pwd: "abc123",
  roles: [
    {
    
     role: "read", db: "db1"},
    {
    
     role: "readWrite", db: "db2"},
    {
    
     role: "dbOwner", db: "db2"},
  ]
});

En este punto, el usuario Kunwupuede operar las tres bases de datos db1, db2 y db3 con diferentes permisos.

Por tanto, la conclusión es que no es lo mismo la base de datos de autenticación que la base de datos que los usuarios pueden operar , son dos conceptos diferentes.

Crear un usuario independiente para la aplicación

El superusuario tiene la máxima autoridad, es adecuado para administrar otros usuarios y no debe usarse para operar bases de datos específicas.

Necesitamos crear usuarios separados para que cada aplicación utilice los servicios de base de datos. Por ejemplo, si hay un sistema de gestión manage, se pueden crear varios usuarios para él, algunos solo pueden leer datos, otros pueden leer y escribir datos, algunos tienen permisos completos, etc.

Primero inicie sesión en MongoDB como superadministrador:

$ mongosh -u Kunwu -p abc123 --authenticationDatabase admin

Luego managecree un usuario diferente para la base de datos:

use manage;

db.create({
    
    
  user: 'ManageAdmin',
  pwd: 'admin123',
  roles: [
    {
    
     role: "dbOwner", db: 'manage'}
  ]
});

db.create({
    
    
  user: 'ManageRead',
  pwd: 'user123',
  roles: [
    {
    
     role: "read", db: 'manage'}
  ]
})

dbOwnerLos usuarios del rol tienen la capacidad de realizar cualquier operación en la base de datos administrada. Los usuarios con el rol readsolo pueden leer datos de la base de datos.

Inicie sesión con el usuario administrador de la base de datos administrada:

$ mongosh -u ManageAdmin -p admin123 --authenticationDatabase manage

Inicie sesión como usuario normal con la base de datos administrada:

$ mongosh -u ManageRead -p user123 --authenticationDatabase manage

Resumir

Hasta ahora, hemos presentado brevemente el mecanismo de autenticación y autorización de MongoDB.

Para MongoDB recién instalado, no tiene habilitada la autenticación. Debe ingresar a adminla base de datos y crear un rootusuario superadministrador con el rol. Luego, de acuerdo con la base de datos de la aplicación específica, utilice el usuario administrador para crear usuarios con diferentes permisos, a fin de lograr la garantía básica de seguridad de la base de datos.

Hay muchas cosas sobre los permisos de roles, como qué permisos tiene un rol, cómo crear roles personalizados, cómo cambiar las contraseñas de los usuarios, actualizar roles, etc. Puede visitar el sitio web oficial o consultar otra información usted mismo.

¡Gracias por leer!

Supongo que te gusta

Origin blog.csdn.net/Old_Soldier/article/details/132524338
Recomendado
Clasificación