mongodb删库札记

来源:互联网 发布:编程图片素材 编辑:程序博客网 时间:2024/06/04 19:53

非常严重的事件,个人网站又被删库了。
9月23日才被删除一次,你大爷的。
好好看看mongodb的安全机制,怎么老被删库啊。


9月23日的安全改造加了一下,加了一个--bind_ip,以为这就是限制了外部可以访问的IP,其实这个参数针对的是本机有多个IP的情况下,指定通过某一个IP访问,而不是限制外部的IP。

被删库原因

公网访问数据库没做安全限制。

最开始在服务器上部署mongodb的时候是考虑到数据库安全性问题的,按照网上的教程添加了admin数据库和超级管理员,应用数据库管理员账号,但是启动数据库的时候没有启用安全限制,即启动数据库的时候没有加--auth参数,导致数据库启动后仍然没有鉴权,从而仍然不需要用户名密码直接从公网上访问数据库,最终导致数据库被删。

深层次的原因是对mongodb不太熟悉照成。

整改方案

还原数据库

mongorestore -d itclj --host=x.x.x.x /home/mongodb/back/itclj

授权访问

  • 创建超级管理员

由于mongodb数据库没有做访问鉴权,直接输入命令mongo进入mongodb的控制台。执行use admin命令切换到admin数据库,3.X版本的是没有这个库的,没关系照样可以切过去,在里面添加超级管理员账号后会自动创建该库。执行show users查看刚刚添加的超级管理员已经添加成功,该账号具有所有数据库的管理权限。

use admin;db.createUser(    {           user: "root",          pwd: "XXXXXX",          roles: [              { role: "userAdminAnyDatabase", db: "admin" }          ]    });show users;
  • 创建应用库管理员

创建应用库管理员的步骤和创建超级管理员的步骤一致。

use itclj;db.createUser(  {    user:"itclj",    pwd:"XXXXXX",    roles:[      {role:"readWrite",db:"itclj"}    ]  });show users;

上述命令中可以看出我们在itclj这个应用库中创建了一个itclj用户,该用户具有itclj库的读写权限。

  • 重启数据库

停止

./mongod --shutdown --dbpath=/home/mongodb/db

启动

./mongod --auth -f /home/mongodb/bin/mongodb.conf

--auth参数非常重要,表示数据库需要授权访问。

数据库重启完毕后通过Robomongo这个mongodb的客户端工具远程访问,发现已经不能直接进入mongodb数据库了,设置用户名密码后便可顺利登陆。


原文:http://www.itclj.com/blog/59dcd9f681c06e4103ef5124

原创粉丝点击