乐趣区

关于mongodb:mongodb-安装及安全问题

故事会

前几天在线上环境用 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/mongodb
sudo 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"
    ]
})

# 切换到咱们要应用的库 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!

退出移动版