• 针对docker中的mongo容器增加鉴权


    1. 背景

    业务方的服务器经安全检查,发现以docker容器启动的mongo未增加鉴权的漏洞,随优化之

    2. 配置

    mongo以docker compose方式启动,镜像的版本号为4.2.6,docker-compose.yml配置文件内容如下:

    version: '2'
    services:
      mongodb:
        image: mongo:latest
        container_name: test_mongodb
        volumes:
          - "/data/mongodb/data/configdb/:/data/configdb"
          - "/data/mongodb/data/db/:/data/db"
        restart: always
        ports:
          - "27128:27017" 

    3. 增加鉴权

    3.1 docker-compose.yml文件新增如下红色部分,即默认以鉴权方式启动mongo

    version: '2'
    services:
      mongodb:
        image: mongo:latest
        container_name: test_mongodb
        volumes:
          - "/data/mongodb/data/configdb/:/data/configdb"
          - "/data/mongodb/data/db/:/data/db"
        restart: always
        ports:
          - "27128:27017"
        environment:
          - MONGO_INITDB_ROOT_USERNAME=admin
          - MONGO_INITDB_ROOT_PASSWORD=123456 

    3.2 以docker compose方式启动mongo容器

    $ docker-compose up 

    3.3 新建shell窗口,进入容器

    # 进入容器
    $ docker exec -it mongo_container_id bash
    # 进入mongo服务
    $ mongo 

    3.4 新建mongo用户并分配权限

    > use admin
    > db.createUser({"user":"mongo_user", "pwd":"123456", roles: [{"role":"root", db:"admin"}]}) 

    3.5 增加用户后,即可在命令行或客户端中进行鉴权

    # 返回1表示鉴权成功
    > db.auth("mongo_user", "123456")
    1 

    4. 业务异常解决

    当基于spring boot服务端的业务启动并连接mongo时,报如下异常

    Caused by: com.mongodb.MongoQueryException: Query failed with error 13 and error message 'not authorized on db to execute command {find: "system.indexes" ....}'

    该异常表示创建的用户没有系统索引的操作权限,此时更新用户权限即可,具体命令如下:

    > use admin
    > db.auth("mongo_user", "123456")
    > db.grantRolesToUser( "mongo_user", [ { role: "__system", db: "admin"}, {"role": "root", "db":"admin"} ] )
    # 再次查看该用户权限信息
    > db.system.users.find({"user":"mongo_user"}).pretty() 

    5. 参考

    1) MONGODB用户、角色和权限管理

    2) mongodb之权限管理——用户的增删改查和内置角色说明

  • 相关阅读:
    Codeforces Round #363 (Div. 2)
    Codeforces Round #312 (Div. 2)
    Codeforces Round #354 (Div. 2)
    Codeforces Round #353 (Div. 2) A
    Codeforces Round #347 (Div. 2) B
    Codeforces Round #326 (Div. 2)
    Spring中数据库技术--获得DataSource
    查询练习
    查询语句
    Oracle数据库的使用
  • 原文地址:https://www.cnblogs.com/mengrennwpu/p/14416489.html
Copyright © 2020-2023  润新知