Mongodb安全配置

1、Mongodb简介


MongoDB是一种文件导向数据库管理系统,由C++撰写而成,以此来解决应用程序开发社区中的大量现实问题。2007年10月,MongoDB由10gen团队所发展。2009年2月首度推出。 Mongo DB ,是目前在IT行业非常流行的一种非关系型数据库(NoSql),其灵活的数据存储方式,备受当前IT从业人员的青睐。Mongo DB很好的实现了面向对象的思想(OO思想),在Mongo DB中 每一条记录都是一个Document对象。Mongo DB最大的优势在于所有的数据持久操作都无需开发人员手动编写SQL语句,直接调用方法就可以轻松的实现CRUD操作。 NoSQL数据库与传统的关系型数据库相比,它具有操作简单、完全免费、源码公开、随时下载等特点,并可以用于各种商业目的。这使NoSQL产品广泛应用于各种大型门户网站和专业网站,大大降低了运营成本。

2、Mongodb服务器架设


Mongodb安装:

Mongodb的安装、启动请参看:Install MongoDB

添加用户:

use admin #进入admin数据库
db.createUser(
  {
    user: "root",
    pwd: "test",
    roles: [ { role: "userAdminAnyDatabase", db: "admin" } ]
  }
) #添加用户名root,密码test的用户,若数据库未创建则会自动创建

3、错误配置及利用


MongoDB安装时不添加任何参数,默认是不开启权限验证的,登录的用户可以对数据库任意操作而且可以远程访问数据库。

在刚安装完毕的时候MongoDB都默认有一个admin数据库,此时admin数据库是空的,没有记录权限相关的信息。当admin.system.users一个用户都没有时,即使开启了权限验证,如果没有在admin数据库中添加用户,此时不进行任何认证还是可以做任何操作,直到在admin.system.users中添加了一个用户。

没有权限验证的MongoDB可被Mongodb管理工具(如:MongoVUE)远程匿名连接及进行数据库操作。

MongoDB的web界面存在漏洞,导致开启了web界面的MongoDB容易受到攻击,详见Attacking MongoDB

4、实际案例

5、修复方案


添加用户认证

MongoDB 3.0以上的版本较以往版本做了一些调整,如:

  • 在安装完成后show dbs时只可以看到一个local数据库,而admin是不存在的,需要我们自己创建;
  • db.addUser(…)方法不再使用,添加用户需要使用db.createUser(…)方法等。

在3.0以上版本:

use admin #进入admin数据库
db.createUser(
  {
    user: "root",
    pwd: "test",
    roles: [ { role: "userAdminAnyDatabase", db: "admin" } ]
  }
) #添加用户名root,密码test的用户,若数据库未创建则会自动创建

注意:roles 中的 db 参数是必须的,不然会报错:

Error: couldn’t add user: Missing expected field “db”。

这时我们就可以通过show usersdb.system.users.find()命令看到刚才创建的用户了;

然后添加–auth参数(开启用户权限)重启MongoDB;

use admin #进入admin数据库
db.auth("root","test") #认证,成功返回1

注意:这里的root帐号只有用户管理权限!

因为帐号、密码是跟着数据库走的,所以我们需要为数据库设置账号密码,例如下面是给test数据库添加了一个有读写权限的账号为:

use test #进入test数据库
db.createUser(
  {
    user: "test",
    pwd: "123456",
    roles: [ { role: "readWrite", db: "test" } ]
  }
) #添加用户名test,密码123456的帐号,若数据库未创建则会自动创建

限制连接IP

在启动时可以通过添加–bind_ip参数来绑定IP,如进行下面的绑定后则只能够从本机访问:

./mongod --bind_ip 127.0.0.1

6、漏洞扫描与发现


半手动扫描

使用nmap扫描Mongodb默认的服务端口(27017)或者默认的web端口(28017):

nmap -n --open -p 27017 X.X.X.X/24

找到开放27017端口的主机后使用Mongodb管理工具(如:MongoVUE)进行连接。

7、相关资源