likes
comments
collection
share

记一次新手mongo被黑经历

作者站长头像
站长
· 阅读数 17

故事

早上打开网站,一刷新,页面空了,数据返回空数组。好家伙,服务应该没挂,数据库应该也没挂,没有数据了?莫非被黑了。进数据库一看,如下图,哈哈哈,刺激!

记一次新手mongo被黑经历

听到好几次数据库被黑,敲诈比特币的故事,真在自己手头发生,还挺兴奋🤩

安全项1 - mongod.conf配置bindIp

在MongoDB的配置文件mongod.conf中,bindIp选项用于指定MongoDB服务器监听的IP地址。这是一个安全设置,可以防止未经授权的访问。

例如,如果你的mongod.conf文件中有以下设置:

net:
  bindIp: 127.0.0.1

这意味着MongoDB只会监听来自本机(localhost)的连接,不会接受来自其他机器的连接。 如果你想让MongoDB监听所有IP地址,可以将bindIp设置为0.0.0.0

net:
  bindIp: 0.0.0.0

但是请注意,这样做可能会增加安全风险,因为任何能够访问这个IP地址的机器都可以尝试连接到你的MongoDB服务器。在生产环境中,你应该尽可能地限制bindIp的范围,只允许可信的IP地址连接。 如果你有多个可信的IP地址,你可以使用逗号分隔它们:

net:
  bindIp: 192.168.1.100,192.168.1.101

在这个例子中,MongoDB只会监听192.168.1.100192.168.1.101这两个IP地址。

安全项2 - 端口开放

安全组一般不开放数据库端口,或仅开放给指定ip 记一次新手mongo被黑经历 备注:查看公网ipcurl ifconfig.me

安全项3 - 用户名密码

在默认情况下,MongoDB是监听在127.0.0.1之上的,任何客户端都可以直接链接27017,默认是非授权模式(也就是不需要任何权限验证,不需要验证账户,直接在命令行中输入mongo,就可以进行相关操作,这是非常不安全的)。mongodb使用的是基于角色的访问控制RBAC来管理用户对实例的访问. 用户和权限之间用角色来承接,是用户-角色-权限这样一个关系。

为数据库设置用户密码,是直接且基础的防护措施,不要因测试服而不重视,累积起来后,也是非常重要的项目数据,应当严谨对待。测试服数据的安全能保证工程进展的效率。

创建用户密码

首先,本地需要跑起mongo,这里用docker启动。

docker search mongo // 查看版本,可跳过
docker pull mongo // 默认下载最新版本 
docker image ls -a // 查看下载镜像
docker run -d -p 27017:27017 --name mongodb -v /var/lib/mongodb:/data/db mongo -auth // 容器启动mongo并需要验证
docker exec -it mongodb /bin/bash // 进入mongo

db.createUser({user:'xxx', pwd:'xxx', roles:[{role:'root',db:'admin'}]})
db.use admin
db.auth('user', 'pwd') // 很重要,auth后才能执行后续操作

mongodb角色具体可查看:

Built-In Roles(内置角色):
    1. 数据库用户角色:read、readWrite;
    2. 数据库管理角色:dbAdmin、dbOwner、userAdmin;
    3. 集群管理角色:clusterAdmin、clusterManager、clusterMonitor、hostManager;
    4. 备份恢复角色:backup、restore;
    5. 所有数据库角色:readAnyDatabase、readWriteAnyDatabase、userAdminAnyDatabase、dbAdminAnyDatabase
    6. 超级用户角色:root  
    // 这里还有几个角色间接或直接提供了系统超级用户的访问(dbOwner 、userAdmin、userAdminAnyDatabase)
    7. 内部角色:__system

安全项四 - 数据库备份

思路:使用mongodump进行备份,使用cron定期运行

补充

当然,使用云数据库,安全防护会更完备一些。云数据库通常提供了一系列的安全防护措施,这些措施往往超过了你自己在本地部署和管理数据库时所能提供的。例如,数据加密、访问控制、防火墙和网络安全、备份和恢复、安全更新补丁、审计和监控等。

转载自:https://juejin.cn/post/7390480675173007410
评论
请登录