温馨提示×

MongoDB于Linux怎样安全配置

小樊
53
2025-10-27 00:08:39
栏目: 云计算

MongoDB在Linux上的安全配置指南

1. 启用身份验证(核心安全措施)

身份验证是防止未授权访问的第一道防线。需在MongoDB配置文件(/etc/mongod.conf)中启用认证,并创建专用管理员账户:

  • 编辑配置文件,添加/修改security.authorization参数:
    security:
      authorization: enabled
    
  • 重启MongoDB服务使配置生效:
    sudo systemctl restart mongod
    
  • 连接到MongoDB Shell(mongo),切换至admin数据库并创建管理员账户(赋予root角色,拥有最高权限):
    use admin
    db.createUser({
      user: "admin",
      pwd: "YourStrongPassword123!",
      roles: [{ role: "root", db: "admin" }]
    })
    
  • 后续连接需使用认证信息(如mongo -u admin -p YourStrongPassword123 --authenticationDatabase admin)。

2. 限制网络访问(缩小攻击面)

通过配置绑定IP和防火墙规则,仅允许受信任的IP访问MongoDB:

  • 修改绑定IP:编辑/etc/mongod.conf中的net.bindIp参数,推荐设置为本地IP或特定服务器IP(如127.0.0.1192.168.1.100),避免使用0.0.0.0(允许所有IP访问):
    net:
      bindIp: 127.0.0.1,192.168.1.100  # 允许本地和指定局域网IP
      port: 27017
    
  • 配置防火墙
    • 使用ufw(Ubuntu):允许MongoDB端口(默认27017)并限制来源IP:
      sudo ufw allow from 192.168.1.100 to any port 27017/tcp  # 仅允许指定IP
      sudo ufw enable
      
    • 使用firewalld(CentOS/RHEL):添加永久规则并重载:
      sudo firewall-cmd --permanent --zone=public --add-rich-rule='rule family="ipv4" source address="192.168.1.100" port protocol="tcp" port="27017" accept'
      sudo firewall-cmd --reload
      
  • 重启MongoDB服务使绑定IP生效:
    sudo systemctl restart mongod
    

3. 使用TLS/SSL加密通信(防数据泄露)

加密MongoDB客户端与服务端之间的通信,防止数据被窃听或篡改:

  • 生成SSL证书:使用OpenSSL生成自签名证书(生产环境建议使用CA签发的证书):
    openssl req -newkey rsa:2048 -new -nodes -x509 -days 3650 -keyout mongodb-key.pem -out mongodb-cert.pem
    cat mongodb-key.pem mongodb-cert.pem > mongodb.pem
    
  • 配置MongoDB:编辑/etc/mongod.conf,添加SSL参数:
    net:
      ssl:
        mode: requireSSL  # 强制使用SSL
        PEMKeyFile: /etc/ssl/mongodb.pem  # 证书路径
        CAFile: /etc/ssl/ca.pem           # CA证书路径(可选,自签名时可省略)
    
  • 重启MongoDB服务:
    sudo systemctl restart mongod
    
  • 客户端连接:更新连接字符串,启用SSL:
    mongo --ssl --sslCAFile /etc/ssl/ca.pem --sslPEMKeyFile /etc/ssl/mongodb.pem -u admin -p YourStrongPassword123 --authenticationDatabase admin
    

4. 配置审计日志(追踪异常操作)

审计日志可记录所有用户操作(如查询、修改、删除),便于事后追溯安全事件:

  • 启用审计日志:编辑/etc/mongod.conf,添加security.auditLog配置(MongoDB Enterprise版支持):
    security:
      auditLog:
        destination: file  # 日志输出到文件
        format: JSON       # 日志格式为JSON(易解析)
        path: /var/log/mongodb/audit.json  # 日志文件路径
    
  • 创建日志目录并设置权限:
    sudo mkdir -p /var/log/mongodb
    sudo chown mongodb:mongodb /var/log/mongodb
    
  • 重启MongoDB服务:
    sudo systemctl restart mongod
    
  • 日志示例:
    {
      "timestamp": "2025-10-27T10:00:00.000Z",
      "operation": "query",
      "database": "admin",
      "user": "admin",
      "command": { "find": "users", "filter": {} }
    }
    

5. 使用非特权用户运行MongoDB(降低权限风险)

避免以root用户运行MongoDB,减少潜在的安全风险:

  • 创建专用用户:创建一个无登录权限的系统用户(如mongodb):
    sudo useradd -r -s /bin/false mongodb
    
  • 修改数据目录权限:将MongoDB数据目录(默认/var/lib/mongodb)和日志目录(默认/var/log/mongodb)的所有权赋予该用户:
    sudo chown -R mongodb:mongodb /var/lib/mongodb
    sudo chown -R mongodb:mongodb /var/log/mongodb
    
  • 以专用用户启动服务
    sudo -u mongodb mongod --config /etc/mongod.conf
    
  • 设置开机自启(若未设置):
    sudo systemctl enable mongod
    

6. 禁用不必要的接口和功能(减少攻击面)

关闭MongoDB默认开启的非必要功能,如HTTP接口、REST API:

  • 编辑/etc/mongod.conf,添加以下配置:
    net:
      http:
        enabled: false  # 禁用HTTP接口
      RESTInterfaceEnabled: false  # 禁用REST API
      JSONPEnabled: false          # 禁用JSONP
    
  • 重启MongoDB服务:
    sudo systemctl restart mongod
    

7. 定期更新和监控(应对新威胁)

保持MongoDB版本最新,及时修复安全漏洞,并通过监控及时发现异常:

  • 更新MongoDB:使用包管理器更新到最新稳定版(如Ubuntu使用sudo apt update && sudo apt upgrade mongodb-org,CentOS使用sudo yum update mongodb-org)。
  • 监控日志:定期检查MongoDB日志(/var/log/mongodb/mongod.log)和审计日志,关注异常操作(如大量失败登录、未授权访问尝试)。
  • 设置警报:使用监控工具(如Prometheus+Granafa、Zabbix)监控MongoDB服务状态、CPU/内存使用率、连接数等指标,设置阈值警报。

0