Mongodb未授權漏洞加固方案

MongoDB加固方案如下:

1) 修改默認端口

修改默認的mongoDB 端口(默認為:TCP 27017)為其他端口

2) 不要把MongoDB服務器部署在互聯網上或者DMZ

使用安全組防火墻或本地操作系統防火墻對訪問源IP進行控制,如果僅對內網服務器提供服務,建議禁止將mongoDB服務發布到互聯網上

3) 使用- -bind_ip選項

該選項可以限制監聽接口IP, 當在啟動mongodb的時候,使用

-bind_ip 192.168.0.1

表示啟動ip地址綁定,數據庫實例將只監聽192.168.0.1的請求。

4) 啟動基于角色的登錄認證功能

在admin 數據庫中創建用戶,如 supper 密碼為 sup(此處均為舉例說明,請勿使用此賬號密碼)

** 步驟一:在未開啟認證的環境下,登錄到數據庫**

[mongodb@rac3 bin]$ ./mongo 127.0.0.1:27028 (此處修改了默認端口)

MongoDB shell version: 2.0.1

connecting to: 127.0.0.1:27028/test

步驟二:切換到admin數據庫

$ use admin

switched to db admin

步驟三:創建管理員賬號

$ db.addUser("supper", "supWDxsf67%H") 

----賬號不要設置為常見賬號,密碼需要滿足一定的復雜度,至少8位以上,包括大小寫字母、數字、特殊字符混合體,不要使用生日、姓名、身份證編號等常見密碼。 

{ "n" : 0, "connectionId" : 4, "err" : null, "ok" : 1 }

{

 "user" : "supper",

 "readOnly" : false,

 "pwd" : "51a481f72b8b8218df9fee50b3737c44",

 "_id" : ObjectId("4f2bc0d357a309043c6947a4")

}

步驟四:驗證用戶是否創建成功

$ db.auth("supper","supWDxsf67%H")

1

$ exit

bye

步驟五:殺掉進程,重啟mongoDB服務

$ ps -e | grep mongo       #列出mongod的進程,找到進程ID
$ sudo kill  進程ID           #殺掉當前mongd進程
$ ./mongod --dbpath=/path/mongodb --bind_ip=192.168.0.1 --port=27028 --fork=true logpath=/path/mongod.log &

說明:
1.admin.system.users 中將會保存比在其它數據庫中設置的用戶權限更大的用戶信息,擁有超級權限,也就是說在admin中創建的用戶可以對mongodb中的其他數據庫數據進行操作;

2.mongodb系統中,數據庫是由超級用戶來創建的,一個數據庫可以包含多個用戶,一個用戶只能在一個數據庫下,不同數據庫中的用戶可以同名;

3.當admin.system.users 一個用戶都沒有時,即使mongod啟動時添加了 *** —auth *** 參數,如果沒有在admin數據庫中添加用戶,此時不進行任何認證還是可以做任何操作(不管是否是以—auth 參數啟動),直到在admin.system.users 中添加了一個用戶;
4.特定數據庫比如DB1下的用戶User1,不能夠訪問其他數據庫DB2,但是可以訪問本數據庫下其他用戶創建的數據;
5.不同數據庫中同名的用戶不能夠登錄其他數據庫,比如DB1,DB2都有user1,以user1登錄DB1后,不能夠登錄到DB2進行數據庫操作;
6.在admin數據庫創建的用戶具有超級權限,可以對mongodb系統內的任何數據庫的數據對象進行操作;
7.使用db.auth()可以對數據庫中的用戶進行驗證,如果驗證成功則返回1,否則返回0! db.auth() 只能針對登錄用戶所屬的數據庫的用戶信息進行驗證,不能驗證其他數據庫的用戶信息,因為訪問不了其他數據庫。
更多選項參見:MongoDB – Add Users and Authenticate
5)禁用HTTP和REST端口
MongoDB自身帶有一個HTTP服務和并支持REST接口。在2.6以后這些接口默認是關閉的。mongoDB默認會使用默認端口監聽web服務,一般不需要通過web方式進行遠程管理,建議禁用。修改配置文件或在啟動的時候選擇–nohttpinterface 參數nohttpinterface = false
6)開啟日志審計功能
審計功能可以用來記錄用戶對數據庫的所有相關操作。這些記錄可以讓系統管理員在需要的時候分析數據庫在什么時段發生了什么事情。具體請參見:Mongodb審計功能
7)使用SSL加密功能
MongoDB集群之間以及從客戶端連接到MongoDB實例的連接應該使用SSL。使用SSL對性能沒有影響并且可以防范類似于man-in-the-middle的攻擊。
注意MongoDB社區版默認并不支持SSL。您可以選用MongoDB企業版(有SSL支持),或者從源碼重新編譯MongoDB并使用 —ssl 選項來獲得SSL功能。
具體請參見:Configure mongod and mongos for TLS/SSL
以上所有配置推薦以配置文件形式保存配置

[mongodb@rac3 bin]$ vim /path/mongod.conf

port=27028-------端口。默認27017,MongoDB的默認服務TCP端口,監聽客戶端連接。要是端口設置小于1024,比如1021,則需要root權限啟動,不能用mongodb帳號啟動,(普通帳號即使是27017也起不來)否則報錯:[mongo --port=1021 連接]

bind_ip=192.168.0.1------綁定地址。默認127.0.0.1,只能通過本地連接。進程綁定和監聽來自這個地址上的應用連接。要是需要給其他服務器連接,則需要注釋掉這個或則把IP改成本機地址,如192.168.200.201[其他服務器用 mongo --host=192.168.200.201 連接] ,可以用一個逗號分隔的列表綁定多個IP地址。

logpath=/path/mongod.log------開啟日志審計功能,此項為日志文件路徑,可以自定義指定

pidfilepath=/path/mongod.pid------進程ID,沒有指定則啟動時候就沒有PID文件。默認缺省。

auth=true------用戶認證,默認false。不需要認證。當設置為true時候,進入數據庫需要auth驗證,當數據庫里沒有用戶,則不需要驗證也可以操作。直到創建了第一個用戶,之后操作都需要驗證。

logappend=true------寫日志的模式:設置為true為追加。默認是覆蓋。如果未指定此設置,啟動時MongoDB的將覆蓋現有的日志文件。

fork=true------是否后臺運行,設置為true 啟動 進程在后臺運行的守護進程模式。默認false。

nohttpinterface = false------是否禁止http接口,即28017 端口開啟的服務。默認false,支持。

#然后啟動mongod時加載配置文件
[mongodb@rac3 bin]$ ./mongod -f /path/mongod.conf

#連接到數據庫

$ mongo

#MongoDB shell version: 2.4.9
#connecting to: test

$ use admin
#  switched to db admin
db.auth("supper","supWDxsf67%H");

1  #總管理員身份 已驗證成功

$ show dbs  等其他一系列操作
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • Spring Cloud為開發人員提供了快速構建分布式系統中一些常見模式的工具(例如配置管理,服務發現,斷路器,智...
    卡卡羅2017閱讀 134,969評論 19 139
  • Spring Boot 參考指南 介紹 轉載自:https://www.gitbook.com/book/qbgb...
    毛宇鵬閱讀 46,959評論 6 342
  • 22年12月更新:個人網站關停,如果仍舊對舊教程有興趣參考 Github 的markdown內容[https://...
    tangyefei閱讀 35,231評論 22 257
  • MongoDB與關系型數據庫對比 MongoDB屬于文檔型的非關系型數據庫,其他像Redis就屬于鍵值對型的非關系...
    少見多怪閱讀 1,769評論 0 4
  • 調靈來殺人, 末影閃又閃。 想"弓"一條龍, 結果被自爆。
    八卦神獸閱讀 153評論 0 0