Mongodb未授权访问漏洞修复
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
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
555
1
1
1
1
1
555
555