MongoDB中的本地主機異常
我安裝並配置了一個 MongoDB 數據庫,但我在安全性方面遇到了一個非常大的問題。
我啟用了身份驗證並創建了一堆使用者,每個使用者都有自己的權限,那裡一切正常,現在我的問題是,如果一個壞人可以訪問我的伺服器,他可以簡單地重新啟動服務而不指定身份驗證參數,然後訪問我所有的數據庫只需使用本地主機登錄即可。
在文件中它說:
僅當 MongoDB 實例中沒有創建使用者時,localhost 異常才適用。
好吧,我已經創建了使用者,我仍然可以使用 localhost 異常訪問我的數據庫。我做錯什麼了嗎?還是文件有誤?如果是這樣,這似乎是一個主要的安全問題。
我使用的 Mongo 版本是 3.4。
這些是我啟用身份驗證所遵循的步驟:
--auth
不帶參數加入 Mongo- 創建了管理員使用者
use admin var user = { "user" : "Admin", "pwd" : "1234", roles : [ { "role" : "root", "db" : "admin" } ]} db.createUser(user);
--auth
用參數重啟Mongo- 創建了一個數據庫和一些集合
use TestDB db.createCollection( "TestCollection1" ); db.createCollection( "TestCollection2" );
- 創建了一個自定義角色:
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" } ] })
- 創建了一個普通使用者
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,您將顯式禁用訪問控制並允許客戶端連接而無需身份驗證。這對於管理干預可能很有用,例如重置忘記的管理員密碼。