目錄
吹個牛B,自己的MongoDB裸奔了快半年,從未遭受黑客攻擊。也不知道是自己運氣好,還是黑客對我的乞丐版服務器看不上眼。不過既然知道了數據庫裸奔的危險性,就要給它上把鎖。然而上鎖對我這種刻意回避數據庫知識的人來說,也實在不是一件容易的事。
在學習上鎖的過程中,看了好些文章。為了防止大家看我這篇沒懂后還有的看,先給出參考文檔:
- https://www.cnblogs.com/chunlei36/p/6506048.html
- https://blog.csdn.net/u012900400/article/details/79207822
- https://blog.csdn.net/wangmao01/article/details/80805643
裸奔有多危險
一句話,沒有密碼的數據庫,而且又沒有改27017這個MongoDB默認端口號,別人一個命令就可以連上去:
這篇文章也給出了關於MongoDB安全性的詳細說明
當然你可能說,他怎么知道我用的什么數據庫,然后猜到我的端口。我在這里只能說,我們要相信黑客的技術😂。
mongoDB修改默認端口號
在設置權限之前,我們要首先改掉默認端口號,這是防止被攻擊的第一步。
修改默認端口號可分為兩步,第一步,關掉MongoDB;第二步,用新的端口號啟動MongoDB
關閉MongoDB
關閉MongoDB也有兩種方式,第一是借助mongo shell,使用db.shutdownServer()
,第二是直接殺進程。
shutdownServer的使用方法如下:
重啟MongoDB
重啟MongoDB也有兩種方式:命令行參數啟動 和 加載配置文件啟動。兩者的唯一區別就是后面的方法將配置參數放到了一個配置文件之中。兩種方法中,我們要做的都是改掉默認端口號,先來看第一種方式:
這里講一下 --fork 的意思,如果不帶這個參數,MongoDB的日志會在前台運行,日志會直接打印到shell里面。帶上這個參數則會將MongoDB轉到后台運行,同時將運行日志寫到logpath里面,而不是直接打印到命令行。
設置密碼
接下來,講到設置密碼的關鍵環節了,沒有密碼,只改變端口,就好像把門從朝東改成了朝南,卻還是沒有上鎖。所以再加上密碼這一步才算安全。在設置MongoDB的密碼前,我們要知道以下幾點:
- 每個數據庫之間的密碼是獨立的。
- 數據庫權限是分角色的。
這里不講每個角色(role)有哪些權限,更多角色相關的內容可以參考官方文檔build-in roles。下面設置密碼的步驟主要參考MongoDB官方文檔:https://docs.mongodb.com/manual/tutorial/enable-authentication/
第一步:開啟MongoDB服務
第二步:進入MongoDB shell,類似於node.js的node
命令
第三步:進入admin數據庫,以 userAdminAnyDatabase 的角色創建admin賬號,這個賬號創建后,可以為任何數據庫創建用戶
創建完成后推出mongo shell。
第四步:加入授權重啟MongoDB,方法上面介紹過了,但是要加上授權參數--auth
第五步:使用--auth
啟動后,登錄mongo shell就需要輸入密碼了,可以將賬號密碼放在一條命令中,也可以先進入shell,再輸入賬號密碼鑒權,分別對應如下兩條語句:
或者先登錄再使用auth授權
第六步:你登錄 admin 數據庫后,就可以為別的業務數據庫創建賬號密碼了,比如為 test 和 reporting數據庫創建賬號密碼:
第七步:推出shell后,現在可以用新創建的賬號密碼登錄test數據庫了:
如果你用moogoose登錄,那你的url應該改成如下格式:
本文完