2015-12-30 49 views
2

我剛剛設置了MongoDB,並且持有mongoose以及當我按照連接到數據庫的一些教程時,我注意到默認情況下不需要用戶/密碼,這導致我出現以下問題:我需要爲MongoDB啓用身份驗證嗎?

這是轉移到生產時的安全問題嗎?我需要採取哪些安全措施?任何人都可以遠程訪問MongoDB嗎?如果是這樣,如何抑制。

+0

檢查 - https://docs.mongodb.org/v2.6/tutorial/add-admin-user/ –

回答

3

是的,如果可以從互聯網訪問(即沒有防火牆,有弱/無密碼,或只綁定到本地主機),這是有問題的。攻擊者可能很容易訪問您的數據庫並讀取所有數據。這不僅僅是一個理論上的威脅,請參閱http://www.cso.com.au/article/566040/students-find-40k-unprotected-mongodb-databases-8-million-telco-customer-records-exposed/最近的「indicent」。

該mongodb開發人員提供了一個security checklist並且還提供了一個security tutorial

因此,至少設置一個password,最多隻能設置bind it to localhost(如果其他用戶也可以訪問該計算機,則也會出現問題),以防止暴力攻擊。

+0

綁定到localhost部分(有nobdy別人訪問我的機器)似乎是最合理的答案。我也會去授權憑證!謝謝 – Eduard

4

確實,你偶然發現了一個有效的問題。

你看看這個來源:

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(); 
    }); 
    }); 
}); 

只是增加了更多的資源,你可能想看看at:

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

希望這是你的追求productionizing MongoDB的一個很好的起點!

2

安全性應該是一種多層次的方法。

  • 首先,在生產中,我建議將MongoDB放在單獨的物理機器上。
  • 我會限制通過防火牆訪問這臺機器,這樣只有端口27017上的MongoDB流量才能從網絡服務器訪問MongoDB機器。
  • 我只允許ssh從需要訪問它們的特定IP地址訪問MongoDB機器或Web服務器。
  • 我只使用基於密鑰的身份驗證SSH到Web服務器和MongoDB機器。
  • 我會完全阻止MongoDB機器訪問互聯網,除了時間同步的NTP。
  • 儘管我覺得上述步驟更重要,但我會啓用MongoDB身份驗證。
    • 這是安全的薄弱層,然而,因爲只有Web服務器應該能夠訪問MongoDB的計算機上的端口27017,和任何人誰妥協的Web服務器將能夠從源代碼中提取MongoDB的密碼服務器。
    • 如果您有多個MongoDB數據庫,則可以爲每個數據庫使用不同的身份驗證憑據,以在應用程序之間添加一個隔離級別。

總之,不,你並不需要身份驗證,但它可以添加額外的安全層。其他層次更重要。