非常严重的事件,个人网站又被删库了。
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数据库了,设置用户名密码后便可顺利登陆。