如何确保Linux下MongoDB的数据安全
小樊
31
2025-12-28 06:29:53
Linux下MongoDB数据安全实践清单
一 身份与访问控制
- 启用认证:在配置文件 /etc/mongod.conf 中设置 security.authorization: enabled,或使用启动参数 –auth,强制所有客户端先认证再访问。首次启用前可利用 localhost exception 在 admin 库创建首个管理账户。
- 建立管理员与业务账户:在 admin 库创建具备 userAdminAnyDatabase 的用户用于用户与角色管理;为各业务库按需创建最小权限账户(如 readWrite、dbOwner 等)。
- 最小权限与细粒度控制:遵循最小权限原则,谨慎授予 readAnyDatabase / readWriteAnyDatabase / userAdminAnyDatabase / root 等跨库或超级权限;必要时使用 authenticationRestrictions 限制来源网段。
- 副本集/分片内部认证:启用访问控制后,成员间需要 内部身份验证(keyFile/内部机制),确保集群通信安全。
二 网络与传输安全
- 限制监听地址:配置 net.bindIp 仅监听受信任接口(如 127.0.0.1,10.0.1.10),避免 0.0.0.0 暴露到公网。
- 主机与云安全组防火墙:仅放行必要来源 IP 与端口(默认 27017/TCP),例如 firewalld:
sudo firewall-cmd --permanent --zone=public --add-port=27017/tcp && sudo firewall-cmd --reload
- 强制加密传输:启用 TLS/SSL,示例配置:
net:
ssl:
mode: requireSSL
PEMKeyFile: /etc/ssl/private/mongodb-key.pem
CAFile: /etc/ssl/certs/mongodb-cert.pem
生产环境建议强制 TLS 1.2+,客户端连接串增加 ?ssl=true。
三 数据静态加密与密钥管理
- 存储引擎加密(企业版):使用 WiredTiger 加密存储引擎 对数据文件透明加密,需 MongoDB Enterprise 并配置 encryption.mode: requireEncryption 与 keyFile(密钥文件权限 400,妥善保管)。
- 传输层加密(TLS/SSL):见上节,防止数据在网络中被窃听或篡改。
- 操作系统级加密:对数据盘使用 LUKS 整盘/分区加密,将 dbPath 置于加密卷上,作为纵深防御。
- 客户端字段级加密:对高度敏感字段在应用侧加密,密钥由 KMS 或外部密钥管理服务托管。
四 审计、日志与运行安全
- 审计日志(企业版):启用审计以追溯关键操作,可输出到 file/syslog/console,并按需配置过滤器;示例:
security:
auditLog:
destination: file
format: JSON
path: /var/log/mongodb/audit.json
社区版可通过 systemLog 与操作分析进行辅助审计。
- 系统日志与追加:开启 systemLog.logAppend: true,避免日志轮转时被覆盖;集中收集与长期留存审计/运行日志。
- 禁用不必要接口:关闭 HTTP 接口、REST 接口、JSONP,减少攻击面。
- 以非特权用户运行:创建专用系统用户(如 mongodb),数据/日志目录属主设为 mongodb:mongodb,禁止以 root 运行。
- 安全更新与补丁:定期升级 MongoDB 至稳定/受支持版本,及时修复已知漏洞。
五 备份恢复与持续运营
- 定期备份与校验:使用 mongodump/mongorestore 执行定时备份(如每日),保留 多份异地副本 并定期做恢复演练与校验,确保可恢复性与完整性。
- 监控与告警:监控 连接数、慢查询、复制延迟、磁盘 IO 等关键指标,设置异常告警,结合审计日志进行溯源。
- 安全配置基线:对照 CIS MongoDB Benchmark 与等保要求定期审查加固项(认证、网络、加密、审计、权限等),形成闭环改进。