温馨提示×

MongoDB如何进行安全加固

小樊
44
2025-10-19 16:44:52
栏目: 云计算

MongoDB安全加固关键措施

1. 启用访问控制与身份验证

启用MongoDB的身份验证机制是防止未授权访问的核心步骤。通过配置security.authorization: enabled(YAML格式)或auth=true(旧版配置文件),强制所有客户端连接时提供有效凭证。创建管理员账户时,需分配root角色(拥有最高权限,仅用于紧急管理),避免直接使用默认的空密码账户。例如:

use admin;
db.createUser({
  user: "admin",
  pwd: "StrongPassword123!",
  roles: ["root"]
});

此配置确保只有通过身份验证的用户才能访问数据库。

2. 配置基于角色的访问控制(RBAC)

RBAC是MongoDB实现细粒度权限管理的核心机制。遵循“最小权限原则”,为用户分配完成其任务所需的最小权限。例如:

  • 普通用户:仅分配readWrite角色(针对特定数据库,如mydb);
  • 数据分析师:分配read角色+特定集合的find权限;
  • 管理员:分配dbAdmin角色(管理索引、统计信息)而非root角色。
    创建角色示例:
db.createRole({
  role: "dataAnalyst",
  privileges: [
    { resource: { db: "mydb", collection: "sales" }, actions: ["find", "aggregate"] }
  ],
  roles: []
});

通过RBAC避免权限过度分配,降低内部威胁风险。

3. 加密通信与数据存储

  • 传输加密:使用SSL/TLS加密客户端与服务器之间的通信,防止中间人攻击。配置net.ssl.mode: requireSSL,并指定证书文件路径(如certificateKeyFile: /path/to/mongodb.pem)。证书需由可信CA颁发或使用自签名证书(需客户端信任)。
  • 存储加密:对于敏感数据,启用WiredTiger存储引擎的加密功能(MongoDB企业版支持),通过storage.wiredTiger.engineConfig.encryption.keyFile指定密钥文件路径。密钥文件需严格限制访问权限(如chmod 600)。

4. 限制网络暴露

  • 绑定IP地址:通过net.bindIp配置MongoDB仅监听受信任的IP地址(如127.0.0.1用于本机访问,或添加内部服务器IP)。避免使用0.0.0.0(监听所有接口),减少外部攻击面。
  • 防火墙配置:使用firewalldiptables限制MongoDB端口(默认27017)的访问,仅允许特定IP段(如内网网段192.168.1.0/24)访问。例如:
    sudo firewall-cmd --permanent --zone=public --add-rich-rule='rule family="ipv4" source address="192.168.1.0/24" port protocol="tcp" port="27017" accept';
    sudo firewall-cmd --reload;
    
  • 禁用远程访问:若无需远程访问,可将bindIp设置为127.0.0.1,彻底阻断外部连接。

5. 强化操作系统与文件权限

  • 使用专用用户运行:创建非特权用户(如mongod),并通过chown命令将MongoDB数据目录(如/var/lib/mongodb)、日志文件(如/var/log/mongodb)、配置文件(如/etc/mongod.conf)的所有权赋予该用户。例如:
    sudo useradd -r -s /sbin/nologin mongod;
    sudo chown -R mongod:mongod /var/lib/mongodb;
    sudo chown -R mongod:mongod /var/log/mongodb;
    
  • 设置文件权限:限制文件访问权限,如数据目录chmod 700(仅所有者可读写执行),配置文件chmod 600(仅所有者可读写),防止未授权用户篡改配置或访问数据。

6. 启用审计日志

通过审计日志记录用户操作(如登录、查询、修改、删除),便于事后追溯安全事件。配置auditLog参数(企业版支持),指定日志输出路径(如destination: fileformat: JSONpath: /var/log/mongodb/audit.json)。示例配置:

auditLog:
  destination: file
  format: JSON
  path: /var/log/mongodb/audit.json
  filter: '{ atype: { $in: ["createUser", "updateUser", "deleteUser", "dropDatabase", "insert", "update", "remove"] } }'

审计日志需定期审查,及时发现异常操作(如大量数据删除、未授权登录)。

7. 定期更新与补丁管理

保持MongoDB版本为最新稳定版,及时应用官方发布的安全补丁。定期检查MongoDB官方安全公告(如CVE列表),修复已知漏洞(如未授权访问、缓冲区溢出)。例如,使用yum update mongodb-org(CentOS)或apt-get upgrade mongodb-server(Ubuntu)更新软件包。

8. 禁用不必要的功能

  • 禁用HTTP接口:MongoDB默认开启HTTP接口(端口28017),用于远程管理,建议通过nohttpinterface: true禁用,减少攻击面。
  • 禁用服务器端脚本:若无需使用mapReducegroup$where等服务器端脚本,通过security.javascriptEnabled: false禁用,防止恶意脚本执行。

0