看到群里有小伙伴发的截图,赶紧写了这篇文章,希望能帮助到大家。
数据库安全清单
1、启用访问控制并强制执行身份验证
?
启用访问控制并指定身份验证机制。可以使用MongoDB的SCRAM或x.509身份验证机制,也可以与现有的Kerberos / LDAP基础结构集成。身份验证要求所有客户端和服务器在连接到系统之前都必须提供有效的凭据。
2、配置基于角色的访问控制
?
首先创建一个用户管理员,然后创建其他用户。为访问系统的每个人/应用程序创建一个唯一的MongoDB用户。
遵循最小特权原则。创建角色,以定义一组用户所需的确切访问权限。然后创建用户,并仅为其分配执行操作所需的角色。用户可以是个人或客户端应用程序。
用户可以在不同的数据库之间拥有特权。如果用户需要对多个数据库的特权,请创建一个具有授予适用数据库特权的角色的单个用户,而不是在不同的数据库中多次创建该用户。
3、加密通信(TLS / SSL)
?
配置MongoDB以对所有传入和传出连接使用TLS / SSL。使用TLS / SSL加密MongoDB部署的mongod和mongos组件之间以及所有应用程序和MongoDB之间的通信。
从版本4.0开始,MongoDB使用本机TLS / SSL OS库:
Windows安全通道(Schannel)
Linux / BSD OpenSSL
macOS安全传输
从版本4.0开始,MongoDB在可用TLS 1.1+的系统上禁用对TLS 1.0加密的支持。
4、加密和保护数据
从MongoDB Enterprise 3.2开始,可以使用WiredTiger存储引擎的本机静态加密来加密存储层中的数据。
?不使用WiredTiger的加密功能,则应在每个主机上使用文件系统,设备或物理加密(例如dm-crypt)对MongoDB数据进行加密。使用文件系统权限保护MongoDB数据。 MongoDB数据包括数据文件,配置文件,审核日志和密钥文件。
?将日志收集到*日志存储中。这些日志包含DB身份验证尝试,包括源IP地址。
5、网络限制
?
确保MongoDB在受信任的网络环境中运行,并配置防火墙或安全组以控制MongoDB实例的入站和出站流量。
仅允许受信任的客户端访问可使用MongoDB实例的网络接口和端口。例如,使用IP白名单来允许从受信任的IP地址进行访问。
可以网络和配置强化:
net.bindIp配置设置
security.clusterIpSourceWhitelist配置设置
authentication限制,用于指定每用户IP白名单
?禁用直接SSH访问
6、系统访问审计
企业版支持:
跟踪对数据库配置和数据的访问和更改。 MongoDB Enterprise包含系统审核工具,可以记录MongoDB实例上的系统事件(例如,用户操作,连接事件)。这些审核记录可以进行法医分析,并允许管理员验证适当的控制措施。您可以设置过滤器以记录特定事件,例如身份验证事件。
7、用专用用户运行MongoDB
?
使用专用的操作系统用户帐户运行MongoDB进程。确保该帐户具有访问数据的权限,但没有不必要的权限。
8、使用安全配置选项运行MongoDB
MongoDB支持对某些服务器端操作执行JavaScript代码:mapReduce和$ where。如果不使用这些操作,请在命令行上使用--noscripting选项禁用服务器端脚本。
?保持输入验证启用。默认情况下,MongoDB通过net.wireObjectCheck设置启用输入验证。这样可以确保mongod实例存储的所有文档都是有效的BSON。
Mongodb生产安全清单
生产环境中我们该怎么做呢?
1、数据库
bind_ip 绑定具体的内网ip
修改默认监听端口
开启身份认证,启用访问控制,使用强密码
数据库用户开放最小权限
如果是老版本:关闭掉http接口(net.http.enabled = False)和关闭掉Rest API接口(net.http.RESTInterfaceEnabled=False)
2、系统网络
开启网络防火墙
如果是云主机可以使用安全组和Iptables
只允许内网访问
不使用root用户启动,普通用户启动
3、加密和审计
程序访问密码加密
传输加密
开启审计功能