1.基本情况

MongoDB 默认直接连接,无须身份验证,此时若不注意Mongodb 端口(默认 27017)的开放状态,那么Mongodb就会产生安全风险,通过利用此配置漏洞,入侵数据库。

2.判断方法

1)通过命令行

通过命令行进入Mongodb,有以下告警提示:

WARNING: Access control is not enabled for the database.

2)通过图形化软件查看

使用Navicat或mongodbmanager登录Mongodb

Authentication 为 None时可进行数据库表查询

3.处理方法

对于刚刚创建搭建好的数据库,需要创建管理数据库admin与管理员root

为确保安全,今后创建的数据库需要授权给非root用户

同时配置文件需要开启强制授权模式

1.创建管理员账户并授权数据库账号

Mongo>use admin;     # 进入admin数据库
Mongo>db.createUser({ user: 'root', pwd: '654321', roles: [ 'root']})     # 创建用户,设置密码为654321,角色为root
Mongo>db.auth("root","654321")     验证进入数据库,若返回1则为认证通过
Mongo>use test;     # 为数据库创建鉴权账号时需先进入该数据内
Mongo>db.createUser( {user: "test",pwd: "123456",roles: [ { role: "dbOwner", db: "test" } ]}) # 为test数据库创建鉴权用户test,密码为123456,角色为数据库所有者,详细数据库角色可见下方

2.修改配置文件

vim /etc/mongod.conf

security:
  authorization: enabled   #开启Mongodb登录认证

4.关于role类型

数据库授权时一般采用最小权限原则,此时可为鉴权账号指定不同的role来实现,以下为常见的数据库role

https://www.cnblogs.com/yangxuming/p/6498631.html

数据库用户角色(Database User Roles):

  • read:授予User只读数据的权限
  • readWrite:授予User读写数据的权限

数据库管理角色(Database Administration Roles):

  • dbAdmin:在当前dB中执行管理操作
  • dbOwner:在当前DB中执行任意操作
  • userAdmin:在当前DB中管理User
  • root

备份和还原角色(Backup and Restoration Roles):

  • backup
  • restore

跨库角色(All-Database Roles):

  • readAnyDatabase:授予在所有数据库上读取数据的权限
  • readWriteAnyDatabase:授予在所有数据库上读写数据的权限
  • userAdminAnyDatabase:授予在所有数据库上管理User的权限
  • dbAdminAnyDatabase:授予管理所有数据库的权限

集群管理角色(Cluster Administration Roles):

  • clusterAdmin:授予管理集群的最高权限
  • clusterManager:授予管理和监控集群的权限,A user with this role can access the config and local databases, which are used in sharding and replication, respectively.
  • clusterMonitor:授予监控集群的权限,对监控工具具有readonly的权限
  • hostManager:管理Server

标签: none

已有 36 条评论

  1. 1 1

    1

  2. 1

  3. 1

  4. 555

  5. 1 1

    1

  6. 1 1

    1

  7. 1 1

    555

添加新评论