April 18, 2016

Mongodb 密碼驗證

MongoDB 是 NoSQL 的資料庫。沒密碼認證的 database,總是不太好。我們給它添加一點點安全,降低隨便登陸,禁止隨便查看任何資料庫。

流程

  1. 修改 mongo 配置文件,關閉 auth 認證選項
  2. 重啓 mongodb
  3. 運行 mongo CLI,添加管理員用戶
  4. 再配置 mongodb.conf 開啓 auth 選項
  5. 添加 “讀寫” 權限的用戶

⚠️ 寫的時候使用舊的版本 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