Mongodb enable authentication
MongoDB 默认直接连接,无须身份验证,如果当前机器可以公网访问,且不注意Mongodb 端口(默认 27017)的开放状态,那么Mongodb就会产生安全风险,被利用此配置漏洞,入侵数据库。
容易遭受入侵的环境
使用默认 mongod 命令启动 Mongodb
机器可以被公网访问
在公网上开放了 Mongodb 端口
数据库隐私泄露
数据库被清空
数据库运行缓慢
1. 禁止公网访问 Mongodb 端口
1.1 网络配置
由于网络配置因人而异,需要根据自己实际环境进行配置,不作冗述。大致可以从以下方面禁止。
在路由器中关闭端口转发
防火墙 iptables 禁止访问
1.2 验证端口能否访问方式
在外网机器命令行中运行
telnet your.machine.open.ip 27017
2. 启用验证
2.1 创建用户管理员账户
当前数据库版本:Mongodb 3.4
使用 mongod 启动数据库
mongod --port 27017 --dbpath /data/db1
参数默认可以不加,若有自定义参数,才要加上,下同。
另起一个终端,运行下列命令
mongo --port 27017
use admin
db.createUser(
user: "adminUser",
pwd: "adminPass",
roles: [ { role: "userAdminAnyDatabase", db: "admin" } ]
管理员创建成功,现在拥有了用户管理员
用户名:adminUser
密码:adminPass
然后,断开 mongodb 连接, 关闭数据库
两个终端下 <C - c>
2.2 Mongodb 用户验证登陆
启动带访问控制的 Mongodb
mongod --auth --port 27017 --dbpath /data/db1
现在有两种方式进行用户身份的验证
第一种 (类似 MySql)
客户端连接时,指定用户名,密码,db名称
mongo --port 27017 -u "adminUser" -p "adminPass" --authenticationDatabase "admin"
客户端连接后,再进行验证
mongo --port 27017
use admin
db.auth("adminUser", "adminPass")