2011-11-27 10 views
8

Estoy buscando "Mejores prácticas de seguridad" para un servidor MongoDB, además de las mejores prácticas de seguridad del servidor "general". ¿Podría indicarme recursos útiles?MongoDB Security

+0

Hay una excelente información en las respuestas a continuación. A menudo encuentro las preguntas cerradas como "no constructivas", que tienen información que no pude encontrar fácilmente sin la ayuda de aquellos que la agregaron aquí. Quiero decir "no se desanime cuando se cierren las preguntas que hace o responde". Creo que hay muchos cierres y cerradores demasiado entusiastas. Respondo muchas preguntas 'bash' y puedo decirte que nunca hay una * mejor * forma/respuesta, pero esas preguntas nunca se cierran. –

Respuesta

5

Hay dos enfoques:

  1. Instalar mongodb sin--auth opción en el entorno de confianza. Por lo general, es la red local donde se instaló la aplicación, la base de datos. Y los servidores fuera de esta red no tienen acceso a mongodb y otros recursos.
  2. instalar mongodb con--auth opción en un entorno en el que los puertos de mongodb no están bloqueados por el firewall y todos pueden acceder a él.

más detalles sobre la seguridad que usted puede encontrar here.

7

Las preocupaciones de seguridad son siempre específicas de una aplicación. Realmente no es posible responder completamente esta pregunta de manera general.

A menudo, las aplicaciones que se basan en bases de datos NOSQL serán susceptibles de OWASP A4 - Insecure Direct Object Reference. Debe tenerse en cuenta que el valor _ID no es un cifrado criptográfico, este valor depende en gran medida de una marca de tiempo y por eso es bastante fácil para un atacante adivinar estos valores.

Otro problema común es CWE-602 - client side enforcement of server side security. Nunca se debe confiar en el cliente y si están interactuando con la base de datos directamente, entonces son los propietarios de la base de datos, , período.

2

Asumiendo que tiene un servicio web que interactúa con el MongoDB

  • el servidor sólo merecen los derechos, es necesario un nombre de usuario regular para permitir que los derechos de acceso pareja de servidores con un cliente mediante una sesión. De esa manera, debes evitar falsificar los derechos.

  • Filtra todas las solicitudes de los clientes. Eso es bastante fácil, el Mongo solicita ser un jSON, puede restringir el jSON a specific schema y sobrecargar el pedido con limitaciones/restricciones. Tenga en cuenta que el servidor sobrecargará la solicitud utilizando las variables de la sesión. Esto se puede hacer tanto para restricciones de acceso como para evitar que el cliente envíe solicitudes pesadas que sobrecargarán su sistema.

  • Filtra el resultado, "podar el árbol". Esta podría ser una última verificación si, por ejemplo, acepta devolver el nombre del usuario pero no su ID. Dicho esto, es más probable un paso más sobre el filtrado de la solicitud del cliente.

  • Utilice una conexión segura https. Esto asegurará que su cliente esté hablando con el servidor correcto pero también con su servidor para seguir hablando con el mismo cliente (no hay secuestro en teoría).

  • Evite juntar información, intente utilizar los modelos tanto como sea posible para obtener claridad y evitar que una información delicada se almacene en el lugar equivocado.

10

Lo que se necesita básicamente hay que hacer es

Habilitar autenticación

abierto mongodb cáscara

use admin 
db.addUser("admin","adminpassword") 

(IMPORTANTE: necesitará un usuario administrador antes de habilitar la autenticación, o de lo contrario perderás acceso a los datos).

Ahora editar el archivo de configuración mongodb sudo vi /etc/mongodb.conf

y elimine auth=true. Guardarlo y reiniciar MongoDB sudo service mongodb restart

Enlazar a MongoDB red de confianza o de la máquina

archivo de configuración Editar MongoDB y añadir bind_ip = 127.0.0.1 o una coma lista de IPs que serán capaces de conectarse a MongoDB separado. Luego reinicie.

Para más información se puede encontrar una guía para hacer esto en mi sitio web here

+0

Esta respuesta es realmente bastante límite, en mi opinión; es auto-promocional, y realmente no incluye ninguna información de valor aquí, en este sitio. Finalmente, ha descuidado incluir la divulgación requerida de que es su sitio al que está enlazando. Estoy agregando esa revelación aquí; ** No olvides esa divulgación en el futuro **, por favor. –

+0

Claro que haré esto la próxima vez. – Manu