Mongodb

MongoDB中的本地主機異常

  • February 13, 2018

我安裝並配置了一個 MongoDB 數據庫,但我在安全性方面遇到了一個非常大的問題。

我啟用了身份驗證並創建了一堆使用者,每個使用者都有自己的權限,那裡一切正常,現在我的問題是,如果一個壞人可以訪問我的伺服器,他可以簡單地重新啟動服務而不指定身份驗證參數,然後訪問我所有的數據庫只需使用本地主機登錄即可。

在文件中它說:

僅當 MongoDB 實例中沒有創建使用者時,localhost 異常才適用。

好吧,我已經創建了使用者,我仍然可以使用 localhost 異常訪問我的數據庫。我做錯什麼了嗎?還是文件有誤?如果是這樣,這似乎是一個主要的安全問題。

我使用的 Mongo 版本是 3.4。

這些是我啟用身份驗證所遵循的步驟:

  1. --auth不帶參數加入 Mongo
  2. 創建了管理員使用者
use admin

var user = {
  "user" : "Admin",
  "pwd" : "1234",
  roles : [
    {
      "role" : "root",
      "db" : "admin"
    }
  ]}

db.createUser(user);
  1. --auth用參數重啟Mongo
  2. 創建了一個數據庫和一些集合
use TestDB
db.createCollection( "TestCollection1" );
db.createCollection( "TestCollection2" );
  1. 創建了一個自定義角色:
use TestDB

db.runCommand({ createRole:"TestUserRole",
 privileges : [
    { "resource": {"db" : "TestDB", "collection" : "TestCollection1"}, "actions": ["insert", "update"] },
    { "resource": {"db" : "TestDB", "collection" : ""}, "actions": ["insert"] }
  ],
  "roles" : [ { role: "read", db: "TestDB" } ]
})
  1. 創建了一個普通使用者
use TestDB

var user = {
 "user" : "TestUser",
 "pwd" : "1234",
  roles : [
     {
         "role" : "TestUserRole",
         "db" : "TestDB"
     }
]}

db.createUser(user);

在此之後,我可以使用兩個使用者訪問 Mongo,我可以使用 Admin 帳戶在數據庫 TestDB 的兩個集合中查找、插入、更新和刪除。使用使用者TestUser,我只能看到數據庫TestDB(看不到系統集合),只能查找、插入和更新TestCollection1,只能在TestCollection2中查找和插入。

這是我想要的行為,一切正常。現在,如果我在沒有--auth參數的情況下重新啟動 Mongo,我應該無法使用 localhost 異常連接到 Mongo,因為已經創建了使用者。但是我能夠連接。

身份驗證僅控制對連接到 MongoDB 部署的客戶端的訪問。保護對伺服器的遠端訪問加密數據文件是單獨的安全措施。

如果攻擊者能夠訪問您伺服器上的 shell 並執行特權命令(例如重新啟動mongod服務),則訪問控制是無關緊要的。同樣,即使您的數據文件被加密,具有特權訪問權限的攻擊者也將是一個主要的安全問題。

作為伺服器的管理員,您有責任採取適當的訪問控制、防火牆、審計和其他安全措施。安全涉及多層防禦,訪問控制只是一個起點。至少您還應該啟用網路加密(TLS/SSL) 並適當限製網路暴露

有關推薦的安全措施列表,請參閱MongoDB 安全檢查表

現在,如果我在沒有 –auth 參數的情況下重新啟動 Mongo,我應該無法使用 localhost 異常連接到 Mongo。

如果您在沒有--auth參數(或等效的配置文件指令)的情況下重新啟動 MongoDB,您將顯式禁用訪問控制並允許客戶端連接而無需身份驗證。這對於管理干預可能很有用,例如重置忘記的管理員密碼。

引用自:https://dba.stackexchange.com/questions/184696