故事会

前几天在线上环境用docker装置mongodb(3.4)来做测试,辛辛苦苦的增加了数据,而后明天发现被黑了库都给我删完了..哭

mongodb 自身的安全隐患

  1. 默认不须要账号密码就能连贯操作,批改增加删除都能够
  2. mongodb 3.6 之前默认是0.0.0.0 连贯,所以很容易就能通过公网连贯到mongodb(3.6 之后为127.0.0.1 只能通过本机连贯)

解决方案

  1. 设置authorization鉴权,增加用户账号密码
  2. 应用mongodb3.6之后版本 (限度只能本机连贯是平安的,但这样应用场景会很窄,因为我的其它利用都是应用docker容器部署的,只能localhost的话就连不上数据库了, 所以咱们能够通过批改连贯地址为 以后主机的内网ip来连贯)
  3. 屏蔽主机向外裸露mongodb的默认端口27017

装置

因为国内daocloud 的mongo镜像版本没有3.6及以上的,而docker hub的连贯速度齐全劝退,思来想去还是在主机上间接装置一个mongodb

环境是 ubuntu 18.04

官网装置文档

增加 GPG key

wget -qO - https://www.mongodb.org/static/pgp/server-4.2.asc | sudo apt-key add -

增加 list file

echo "deb [ arch=amd64,arm64 ] https://repo.mongodb.org/apt/ubuntu bionic/mongodb-org/4.2 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-4.2.list

更新数据包

sudo apt-get update

装置

sudo apt-get install -y mongodb-org
mongodb 启动 重启 进行 等命令
# 启动sudo systemctl start mongod# 查看状态sudo systemctl status mongod# 进行sudo systemctl stop mongod# 重启sudo systemctl restart mongod# 开机启动sudo systemctl enable mongod

卸载 mongodb

# 卸载sudo apt-get purge mongodb-org*# 删除数据日志目录sudo rm -r /var/log/mongodbsudo rm -r /var/lib/mongodb

操作

  1. 增加用户

mongodb 每一个库都能够设置不同权限的用户

设置一个admin来治理操作所有数据库,在对要应用的库设置一个只可读写的用户来应用这个数据库

# 操作数据库mongo# 切换到默认的 admin 库use admin# 创立一个管理员用户db.createUser({    user: "your name",    pwd: "your password",    roles: [        {            role: "userAdminAnyDatabase",            db: "admin"        },        "readWirteAnyDatabase"    ]})# 切换到咱们要应用的库 abcuse abc# 创立一个只可读写的用户db.createUser({    user: "your name",    pwd: "your password",    roles: [        {            role: "readWirte",            db: "abc"        }    ]})# 退出exit

2 开启用户鉴权和绑定连贯地址

关上 /etc/mongod.conf

# 连贯地址net:   port: 27017  bindIp: 你的私网ip   # 开启鉴权security:  authorization: enabled

保留退出后重启mongodb

sudo systemctl restart mongod

而后你就会发现应用 mongo 来应用数据库不行了,因为默认连贯地址变了,也须要账号密码来操作了

mongo --host 你绑定的私网ip --port 27017 -u "your name" -p "your password" --authenticationDatabase "db name"

最初到主机中设置不向公网裸露 27017 端口

over!