MongoDB 是 NoSQL 的資料庫。沒密碼認證的 database,總是不太好。我們給它添加一點點安全,降低隨便登陸,禁止隨便查看任何資料庫。
流程
- 修改 mongo 配置文件,關閉 auth 認證選項
- 重啓 mongodb
- 運行 mongo CLI,添加管理員用戶
- 再配置 mongodb.conf 開啓 auth 選項
- 添加 “讀寫” 權限的用戶
⚠️ 寫的時候使用舊的版本 2.6.x,3.x.x 打后的版本配置文件是用 YAML 格式,詳細請看官網。
01. 修改配置文件,暫時關閉 auth#
我使用的是 Debian 系統,用的是 2.6.x 版本。3.0 版本應該通用吧(差不多意思)。
$ sudo vi /etc/mongod.conf
找到 auth = true
,在它的前面添加 #
字符。如果已經有這個符號,可以跳過步驟。這個像這樣:
#auth = true
保存改變,然後重啓 mongodb
# 重啓 mongodb
$ sudo service mongod restart
02. 添加管理員用戶#
進入 admin
資料庫。這個是系統的資料庫,用來管理用戶資料
$ mongo admin
添加 “管理員” 用戶:
> db.createUser({user:"admin", pwd:"secret_password", roles: ["userAdminAnyDatabase"]})
> exit
03. 開啓密碼驗證#
修改 config 文件
$ sudo vi /etc/mongod.conf
刪掉 auth 前面的 #
auth = true
重啓 mongodb
# 重啓 mongodb
$ sudo service mongod restart
04. 添加 db 的用戶#
用管理員登陸 mongo 到 DBNAME
的資料庫
$ mongo DBNAME -u admin -p secret_password
# 或者
$ mongo
> use DBNAME
> db.auth('admin', 'secret_password')
添加 readwrite (讀寫權限)用戶
> db.createUser({ user: "user", pwd: "1234", roles: ["readWrite"] })
> exit
測試#
沒驗證的,返回錯誤
> use mydb
> show collections
2016-04-18T17:23:27.829-0400 error: { "$err" : "not authorized for query on mydb.system.namespaces", "code" : 13 } at src/mongo/shell/query.js:131
> show dbs
2016-04-18T17:39:04.050-0400 listDatabases failed:{
"ok" : 0,
"errmsg" : "not authorized on admin to execute command { listDatabases: 1.0 }",
"code" : 13
} at src/mongo/shell/mongo.js:47
⚠️ 沒什麽事,MongoDB 最好是用 127.0.0.1 這個地址,不要開放任何接口的接入,非常危險。
擴展閲讀#
本文參考:stackoverflow