MongoDB 安全配置
前言
隨著MongoDB使用人群企業越來越廣泛,黑客的註意力也轉移到了其中。比如去年很火熱的MongoDB劫持事件,很多人對MongoDB的安全也越來越重視。今天,我們就簡單總結一些MongoDB的安全防護。首先,關於這方面的內容,官方也有說明,參考如下鏈接:https://docs.mongodb.com/manual/administration/security-checklist/ ;
1、啟用訪問控制和強制認證
打開認證,創建認證用戶:
- 在admin數據庫中,創建一個
admin
用戶
use admin db.createUser( { user: "myUserAdmin", pwd: "abc123", roles: [ { role: "userAdminAnyDatabase", db: "admin" } ] } )
- 對具體的庫進行授權
use reporting db.createUser( { user: "reportsUser", pwd: "12345678", roles: [ { role: "read", db: "reporting" }, { role: "read", db: "products" }, { role: "read", db: "sales" }, { role: "readWrite", db: "accounts" } ] } )
提示:在啟動項中加入 --auth 或者在配置文件中加入 security.authorization: enabled。並且,MongoDB還可以使用外部系統進行認證,比如LADP等;
2、配置基於角色的訪問控制
這裏需要明確的是,MongoDB的基本安全分為兩種,一種是認證,一種是鑒權。其實英語會說的比較明白點: authorization, authentication。
認證是作為用戶登錄的一種賬號密碼校驗,類似MySQL 的 root/password ,在大部分應用中,一旦創建一個連接(用於連接池的),那麽該連接只會做一次,所以大可不必擔心因為認證而帶來的開銷。
鑒權是在數據庫中的賬號擁有的權限做鑒定,類似MySQL中的privilege。
3、基於TSL的雙向認證
打開MongoDB 的TLS/SSl 的配置,社區版需要下載一個SSL版本,或者可以從社區版通過升級步驟升級到SSl版本,企業版自帶SSL。
SSL 可以保證MongoDB的 所有連接(輸入和輸出的連接)都是加密的。
4、限制網絡暴露
通過指定 bindip,以及Linux通過iptables來限制訪問的IP地址等,並在生產線上關閉 MongoDB 的 HTTP 接口和 REST API來達到規避網絡進口的安全問題。
iptables -A INPUT -s <ip-address> -p tcp --destination-port 27017 -m state --state NEW,ESTABLISHED -j ACCEPT iptables -A OUTPUT -d <ip-address> -p tcp --source-port 27017 -m state --state ESTABLISHED -j ACCEPT
5、創建MongoDB專門的運行用戶
使用 mongodb 用戶啟動MongoDB,而不是使用 root 用戶;
useradd -M mongodb -s /bin/nologin sudo -u mongodb -s
6、使用安全配置項運行MongoDB
MongoDB 安全配置