問題
之前沒有接觸過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
二、創建用戶和權限
- mongodb的開啓,連接數據庫。注意,修改配置文件後,特別是修改端口後,直接運行
mongo
命令是連接不上的,要添加上地址與端口號纔可以。
mongo 127.0.0.1:27017
- 創建用戶和權限
use admin
db.createUser(
{
user:"admin",
pwd:"admin",
roles:[
{role:"userAdminAnyDatabase",db:"admin"},
{role:"readWrite",db:"admin"}
]
}
);
- 設置開啓權限
這一步就是上面配置文件中的auth = true
- 重啓服務
重啓後配置生效,這時再使用show dbs
就會發現提示無權限。
此時必須先連接admin
,才能連接其他db,否則會失敗
use admin
db.auth("admin","admin")
- 給其他數據庫創建用戶和權限
最後就是給其他數據庫創建權限了,這個就是自己使用的數據庫。如果不創建角色權限的話,其他數據庫也是用不了
use test
db.createUser(
{
user:"root",
pwd:"root",
roles:[
{role:"readWrite",db:"test"},
{role:"dbOwner",db:"test"}
]
}
)
代碼中數據庫連接時就需要添加用戶名密碼了
至此,解決完畢 。應該是沒啥問題~~~ 了吧·····