【MongoDB】Docker部署的MongoDB的用户鉴权问题

believe0slwx 2020-04-20

Docker部署的MongoDB的用户鉴权问题

写这篇博客的起因是在阿里云上用Docker部署了一个MongoDB数据库,用来存毕设网站用到的数据库。因为数据量比较小,并且没有隐私数据,所以并没有设置密码。没想到被黑了,有人把所有的数据Copy走后把所有库都删除了,并且留下了一封勒索0.0015BTC的文档。

为了防止此类事件再次发生,我们要对MongoDB进行加锁,换端口等一系列措施。这里记录了我是怎么做的。

MongoDB镜像

采用最新的MongoDB:latest镜像。

换端口

不把MongoDB服务映射到默认的27017端口上,因为这样很容易被黑客扫描的时候检测出来。直接在部署Docker的时候把容器内部27017映射到其他关口上。

最后在防火墙平台上开放这条映射规则,关闭原来的27017端口映射规则。

启动Docker

建立Docker时用如下命令:

sudo docker run -it mongoDB:latest --name="MongoDB" mongod --auth

最后加--auth这个参数。这样登录时需要用户名和密码。

设置admin库

在docker中运行mongo,接入数据库,然后use admin,进入admin库,为admin库增加一个admin用户:

db.createUser({user: ‘admin‘, pwd: ‘password‘, roles: [‘userAdminAnyDatabase‘]})

然后可以使用数据库的图形界面,用admin账号登录数据库,然后创建角色并赋予权限。

角色与权限

可以为每一个数据库都设置角色和权限。

  • Read:允许用户读取指定数据库(不可进行任何更改,只能查看)

  • readWrite:允许用户读写指定数据库(任何操作,包括删有权限db中的col权限)

  • dbAdmin:允许用户在指定数据库中执行管理函数,如索引创建、删除,查看统计或访问system.profile

  • userAdmin:允许用户向system.users集合写入,可以找指定数据库里创建、删除和管理用户

  • clusterAdmin:只在admin数据库中可用,赋予用户所有分片和复制集相关函数的管理权限。

  • readAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的读权限

  • readWriteAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的读写权限

  • userAdminAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的userAdmin权限

  • dbAdminAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的dbAdmin权限。

  • root:只在admin数据库中可用。超级账号,超级权限

相关推荐