mongoDB 數據莫名其妙的沒了

問題

之前沒有接觸過mongoDB,然後接手一個項目使用的是MongoDB,我就跟着網上的教程搭建一個MongoDB的服務,並運行起來。

一開始沒有啥問題,成功的把服務與MongoDB都啓動以來,運行也沒有問題。但是過了幾天,我再次打開時發現,以前的數據神奇的消失了。我還在想,是有什麼定時清除的麼,還是什麼原因導致崩瞭然後數據就被清理了。

查找原因

第一次遇到我沒有在意,重啓了一下MongoDB,然後就放那了,重新加了一些測試數據。過了段時間,又遇到了數據被清空,於是乎下決心排查一下到底是什麼原因。

首先,我看到了整個裏面就一個db,名字爲

READ_ME_TO_RECOVER_YOUR_DATA

在這裏插入圖片描述

一看這個就不是我的庫嘛,看着也不像系統庫。之前沒注意看這個名字,以爲就是個系統生成的庫,現在注意一下這個名字就感覺不大對勁。
閱讀此內容幫助你恢復數據,感覺被黑了。

實際上就是被黑了 ·····

打開之後查看裏面內容,果然就有勒索信息···
在這裏插入圖片描述
翻譯一下就是

所有數據都是備份的。您必須支付0.015 BTC到16Vk6GrQYwzXvNxdBq7Zp6TGnwPEhpBWgB 48小時才能恢復。在48小時到期後,我們將泄露並公開您的所有數據。如果拒絕付款,我們將聯繫通用數據保護條例(GDPR),並通知他們您以開放形式存儲用戶數據,並且不安全。根據法律規定,您將面臨嚴厲的罰款或逮捕,您的基地垃圾將從我們的服務器上丟棄!您可以在這裏購買比特幣,使用本指南購買https://localbitcoins.com不需要花費太多時間https://localbitcoins.com/guides/how-to-buy-bitcoins後,使用您的DB IP:[email protected]在郵件中寫信給我

剛接觸果然是沒有經驗啊,還好這裏都是些測試數據,並不是正式運營的數據,那我可就死犢子了。跟着教程走果然留下了坑····

原因很簡單,我修改的配置,bind_ip爲 0.0.0.0,端口號用的默認的27017。這樣很容易被掃描到,更何況我也沒有設置用戶名和密碼,有些人設置的弱密碼也很容易被破解,這就是光着身子在互聯網上裸奔啊,人家寫個腳本就能抓到,只能怪自己。

解決

一、修改配置文件。

配置文件中修改bind_ip 爲127.0.0.1,這樣就只能允許本機訪問。
端口號想改就改,改掉後避免對於默認端口27017的掃描。
nohttpinterface:是否禁止http接口,即28017 端口開啓的服務。默認false,支持
auth:用戶認證,默認false。不需要認證。當設置爲true時候,進入數據庫需要auth驗證,當數據庫裏沒有用戶,則不需要驗證也可以操作。直到創建了第一個用戶,之後操作都需要驗證。後面介紹如何使用

dbpath = /usr/local/mongodb/db
logpath = /logs/mongodb.log
port = 27017
fork = true
nohttpinterface=true
bind_ip = 127.0.0.1
auth = true

二、創建用戶和權限

  1. mongodb的開啓,連接數據庫。注意,修改配置文件後,特別是修改端口後,直接運行 mongo命令是連接不上的,要添加上地址與端口號纔可以。
	mongo 127.0.0.1:27017
  1. 創建用戶和權限
use admin
db.createUser(
    {
        user:"admin",
        pwd:"admin",
        roles:[
            {role:"userAdminAnyDatabase",db:"admin"},
            {role:"readWrite",db:"admin"}
        ]
    }
);
  1. 設置開啓權限
    這一步就是上面配置文件中的 auth = true
  2. 重啓服務
    重啓後配置生效,這時再使用show dbs就會發現提示無權限。
    在這裏插入圖片描述
    此時必須先連接 admin,才能連接其他db,否則會失敗
use admin
db.auth("admin","admin")
  1. 給其他數據庫創建用戶和權限
    最後就是給其他數據庫創建權限了,這個就是自己使用的數據庫。如果不創建角色權限的話,其他數據庫也是用不了
use test
db.createUser(
    {
        user:"root",
        pwd:"root",
        roles:[
            {role:"readWrite",db:"test"},
            {role:"dbOwner",db:"test"}
        ]
    }
)

代碼中數據庫連接時就需要添加用戶名密碼了
在這裏插入圖片描述

至此,解決完畢 。應該是沒啥問題~~~ 了吧·····

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章