针对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之权限管理——用户的增删改查和内置角色说明

原文地址:https://www.cnblogs.com/mengrennwpu/p/14416489.html