【问题标题】:Do I need to enable authentication for MongoDB?我需要为 MongoDB 启用身份验证吗?
【发布时间】:2015-12-30 12:12:15
【问题描述】:

我刚刚设置了 MongoDB,也获得了 mongoose,当我按照一些连接到数据库的教程时,我注意到默认情况下不需要用户/密码,这导致我进入以下问题:

转移到生产时这是一个安全问题吗?我需要采取哪些安全措施?任何人都可以远程访问 MongoDB 吗?如果是这样,如何抑制它。

【问题讨论】:

标签: node.js mongodb mongoose


【解决方案1】:

确实,您偶然发现了一个有效的问题。

你看看这个来源:

http://mongodb.github.io/node-mongodb-native/contents.html

并且有一个代码可以做这种事情:

var Db = require('mongodb').Db,
    MongoClient = require('mongodb').MongoClient,
    BSON = require('mongodb').pure().BSON,
    assert = require('assert');

var db = new Db('integration_tests', new Server("127.0.0.1", 27017,
 {auto_reconnect: false, poolSize: 4}), {w:0, native_parser: false});

// Establish connection to db
db.open(function(err, db) {
  assert.equal(null, err);

  // Add a user to the database
  db.addUser('user', 'name', function(err, result) {
    assert.equal(null, err);

    // Authenticate
    db.authenticate('user', 'name', function(err, result) {
      assert.equal(true, result);

      db.close();
    });
  });
});

只需添加一些您可能想查看的来源:

  1. https://docs.mongodb.org/v3.0/administration/security-checklist/
  2. https://docs.mongodb.org/manual/administration/security/

希望这是您寻求生产 MongoDB 的良好起点!

【讨论】:

    【解决方案2】:

    是的,如果可以从 Internet 访问(即没有防火墙、密码弱/无密码或仅绑定到本地主机),则会出现问题。攻击者可能很容易访问您的数据库并读取所有数据。这不仅仅是理论上的威胁,请参阅 http://www.cso.com.au/article/566040/students-find-40k-unprotected-mongodb-databases-8-million-telco-customer-records-exposed/ 了解最近的“迹象”。

    mongodb 开发者提供security checklist,也提供security tutorial

    所以,至少设置一个password,最好只设置bind it to localhost(如果其他用户也可以访问该机器,也会有问题)以防止暴力攻击。

    【讨论】:

    • 绑定到本地主机部分(没有其他人可以访问我的机器)似乎是最合理的答案。我也会去获取身份验证凭据!谢谢
    【解决方案3】:

    安全性应该是一个多层次的方法。

    • 首先,在生产环境中,我建议将 MongoDB 放在单独的物理机器上。
    • 我会限制通过防火墙访问这台机器,这样只有端口 27017 上的 MongoDB 流量才能从网络服务器访问 MongoDB 机器。
    • 我只允许 ssh 从需要访问它们的特定 IP 地址访问 MongoDB 机器或网络服务器。
    • 我只会对 Web 服务器和 MongoDB 机器使用基于密钥的身份验证进行 SSH。
    • 我会完全阻止 MongoDB 机器访问互联网,除了用于时间同步的 NTP。
    • 虽然我觉得上面的步骤比较重要,但我还是会启用MongoDB认证。
      • 不过,这是一个薄弱的安全层,因为只有网络服务器应该能够访问 MongoDB 机器上的端口27017,任何入侵网络服务器的人都可以从源代码中提取 MongoDB 密码服务器。
      • 如果您有多个 MongoDB 数据库,您可以为每个数据库使用不同的身份验证凭据,以在应用程序之间添加一定程度的隔离。

    简而言之,不,您不需要身份验证,但它可以增加额外的安全层。其他层要重要得多。

    【讨论】:

      猜你喜欢
      • 2021-12-09
      • 2018-01-22
      • 2021-10-16
      • 2011-07-11
      • 1970-01-01
      • 2013-05-17
      • 2021-11-22
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多