文章目錄
為 MongoDB 加上驗證機制
資訊安全總是資訊相關工作者的罩門之一:功能愈加愈多、時程愈縮愈短、製作費用愈來愈少,而要求卻愈來愈難,常常為了滿足合約上明列的基本功能就捉襟見肘,導致其他更重要但未列在合約上的細節,就這麼被忽略了,資安就是其中一項
一兩年前,資訊界傳出幾個大型勒索案一反傳統透過 sql-injection 洩露資訊的管道,有心人士搭著 nosql 的堀起,看準大家在應用 nosql 時為求方便常常使用預設設定,而 nosql 的預設設定普遍沒有驗證保護,造成大量機敏資料在網路上裸奔,其中一個常見的受害者就是 MongoDB
為了避免所使用的 MongoDB 資料赤赤裸裸地攤在陽光下,我們一定要學會如何為 MongoDB 加上基本驗證功能
設定驗證機制
- 必需先建立 MongoDB 的管理者才會啟動驗證機制
- 為特定 db 加上使用者及帳密保護
建立 MongoDB 的管理者
啟動 MongoDB (已啟動可忽略)
之前筆記 如何在 Windows 環境安裝及設定 MongoDB 有詳細介紹,這邊不重複贅述
連線至 MongoDB
mongo --host {serverIP} --port {port}
切換至
admin
資料庫use admin
加入帳號密碼並設定 role
db.createUser( { user: "yowko", pwd: "password", roles: [ { role: "userAdminAnyDatabase", db: "admin" } ]// role 只接受 `userAdmin` 與 `userAdminAnyDatabase` })
role 只接受
userAdmin
與userAdminAnyDatabase
重新啟動 MongoDB (擇一即可)
使用指令需加上
--auth
mongod.exe --auth --config db1.conf
調整 config
security: authorization: enabled
使用帳密登入 MongoDB
方法一:連線時直接指定帳號密碼
mongo --host {serverIP} --port {port} -u "{username}" -p "{password}" --authenticationDatabase "admin"
方法二:連線後再使用帳號密碼
mongo --host {serverIP} --port {port} use admin db.auth("{username}","password")
加入一般 DB 使用者
切換至目標 DB 並建立使用者
use test db.createUser( { user: "yowkoTest", pwd: "passwordTest", roles: [ { role: "readWrite", db: "test" } ] } )
連線至目標 db
連線方式與上述相同
方法一:連線時直接指定帳號密碼
mongo --host {serverIP} --port {port} -u "{username}" -p "{password}" --authenticationDatabase "test"
方法二:連線後再使用帳號密碼
mongo --host {serverIP} --port {port} use test db.auth("{username}","password")
insert 資料
db.test.insert({x:1,y:1})
心得
設定方式並不困難,只是預設不啟用,而造成不少機敏資訊外洩的風險。
有時可能會覺得放在內網很安全,不會被攻擊,但資料不一定是被攻擊才會消失,有時只是因為操作失誤就可能造成資料被清除,所以一定要記得為資料做些基本保護
參考資訊
文章作者 Yowko Tsai
上次更新 2021-11-02
授權合約
本部落格 (Yowko's Notes) 所有的文章內容(包含圖片),任何轉載行為,必須通知並獲本部落格作者 (Yowko Tsai) 的同意始得轉載,且轉載皆須註明出處與作者。
Yowko's Notes 由 Yowko Tsai 製作,以創用CC 姓名標示-非商業性-相同方式分享 3.0 台灣 授權條款 釋出。