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


    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数据库中可用。超级账号,超级权限

  • 相关阅读:
    Django 1.6 最佳实践: 如何设置和使用 Log(转)
    Django Signals 从实践到源码分析(转)
    Django 1.6 最佳实践: 如何正确使用 Signal(转)
    Django 1.6 最佳实践: django项目的服务器自动化部署(转)
    Django中如何使用django-celery完成异步任务1(转)
    Django中如何使用django-celery完成异步任务2(转)
    干货 | 精选《SQL注入、渗透、反病毒》学习总结集锦给你们~
    Kali Linux来袭~老司机带你进击
    CTF中密码学一些基础【三】
    DC010的精华分享【首发速看】
  • 原文地址:https://www.cnblogs.com/Ryan16231112/p/12736949.html
Copyright © 2020-2023  润新知