共计 1658 个字符,预计需要花费 5 分钟才能阅读完成。
故事会
前几天在线上环境用 docker 装置 mongodb(3.4) 来做测试, 辛辛苦苦的增加了数据,而后明天发现被黑了库都给我删完了.. 哭
mongodb 自身的安全隐患
- 默认不须要账号密码就能连贯操作,批改增加删除都能够
- mongodb 3.6 之前默认是 0.0.0.0 连贯,所以很容易就能通过公网连贯到 mongodb(3.6 之后为 127.0.0.1 只能通过本机连贯)
解决方案
- 设置 authorization 鉴权,增加用户账号密码
- 应用 mongodb3.6 之后版本(限度只能本机连贯是平安的,但这样应用场景会很窄,因为我的其它利用都是应用 docker 容器部署的,只能 localhost 的话就连不上数据库了,所以咱们能够通过批改连贯地址为 以后主机的内网 ip 来连贯)
- 屏蔽主机向外裸露 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/mongodb
sudo rm -r /var/lib/mongodb
操作
- 增加用户
mongodb 每一个库都能够设置不同权限的用户
设置一个 admin 来治理操作所有数据库,在对要应用的库设置一个只可读写的用户来应用这个数据库
# 操作数据库
mongo
# 切换到默认的 admin 库
use admin
# 创立一个管理员用户
db.createUser({
user: "your name",
pwd: "your password",
roles: [
{
role: "userAdminAnyDatabase",
db: "admin"
},
"readWirteAnyDatabase"
]
})
# 切换到咱们要应用的库 abc
use 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!
正文完