首页主机资讯MongoDB在Linux上的安全设置

MongoDB在Linux上的安全设置

时间2025-10-14 10:56:03发布访客分类主机资讯浏览821
导读:1. 启用身份验证(核心安全措施) 身份验证是防止未授权访问MongoDB的第一道防线。编辑MongoDB配置文件(通常位于/etc/mongod.conf),在security部分添加或修改以下内容: security: author...

1. 启用身份验证(核心安全措施)
身份验证是防止未授权访问MongoDB的第一道防线。编辑MongoDB配置文件(通常位于/etc/mongod.conf),在security部分添加或修改以下内容:

security:
  authorization: enabled

保存后重启MongoDB服务使配置生效:

sudo systemctl restart mongod

创建管理员账户(需在启用认证前完成):连接到MongoDB Shell(mongo),切换到admin数据库,执行:

use admin
db.createUser({

  user: "admin",
  pwd: "YourStrongPassword123!",
  roles: ["root"]  // root角色拥有最高权限
}
    )

后续连接需指定用户名、密码及认证数据库(如admin):

mongo -u admin -p YourStrongPassword123 --authenticationDatabase admin

2. 配置网络访问控制(限制访问范围)
通过绑定IP地址和防火墙规则缩小MongoDB的暴露范围。

  • 修改绑定IP:编辑/etc/mongod.conf中的net部分,将bindIp设置为仅允许特定IP或本地访问(如127.0.0.1或局域网IP段):
    net:
      bindIp: 127.0.0.1,192.168.1.100  # 允许本地和局域网IP 192.168.1.100
      port: 27017  # 默认端口,可修改但需同步更新防火墙规则
    
    重启服务使绑定生效:sudo systemctl restart mongod
  • 配置防火墙
    • ufw(Ubuntu/Debian):允许MongoDB端口(默认27017)仅来自受信任IP:
      sudo ufw allow from 192.168.1.100 to any port 27017/tcp  # 替换为你的受信任IP
      sudo ufw enable  # 启用防火墙
      
    • firewalld(CentOS/RHEL):永久添加MongoDB端口规则并重载:
      sudo firewall-cmd --permanent --zone=public --add-port=27017/tcp
      sudo firewall-cmd --reload
      
    • iptables(传统Linux):允许特定IP访问27017端口,拒绝其他所有请求:
      sudo iptables -A INPUT -s 192.168.1.100 -p tcp --dport 27017 -j ACCEPT
      sudo iptables -A INPUT -p tcp --dport 27017 -j DROP
      sudo netfilter-persistent save  # Debian/Ubuntu保存规则
      

3. 禁用不必要的接口和功能(减少攻击面)
MongoDB默认开启的HTTP接口、REST接口和JSONP功能会增加安全风险,建议禁用:
编辑/etc/mongod.conf中的net部分,添加或修改以下内容:

net:
  http:
    enabled: false  # 禁用HTTP接口
  RESTInterfaceEnabled: false  # 禁用REST接口
  JSONPEnabled: false  # 禁用JSONP

保存后重启服务:sudo systemctl restart mongod

4. 使用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中的net.ssl部分,指定证书路径:
    net:
      ssl:
        mode: requireSSL  # 强制使用SSL
        PEMKeyFile: /etc/ssl/mongodb.pem  # 证书文件路径
        CAFile: /etc/ssl/mongodb-cert.pem  # CA证书路径(若使用CA签发)
    
    重启服务:sudo systemctl restart mongod
  • 客户端连接:客户端连接时需指定SSL参数:
    mongo --ssl --sslCAFile /etc/ssl/mongodb-cert.pem --sslPEMKeyFile /etc/ssl/mongodb.pem -u admin -p YourStrongPassword123 --authenticationDatabase admin
    

5. 配置审计日志(监控操作行为)
审计日志可记录所有用户的操作(如查询、插入、删除),便于事后追溯安全事件。

  • 启用审计日志:编辑/etc/mongod.conf中的security.auditLog部分,配置日志输出:
    security:
      auditLog:
        destination: file  # 日志输出到文件
        format: JSON       # 日志格式为JSON(易解析)
        path: /var/log/mongodb/audit.json  # 日志文件路径
    
    确保MongoDB对日志目录有写权限:sudo chown -R mongodb:mongodb /var/log/mongodb
  • 查看日志:使用tail命令实时查看审计日志:
    tail -f /var/log/mongodb/audit.json
    

6. 使用专用非特权用户运行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
    
  • 以专用用户启动服务:使用-u参数指定用户启动MongoDB:
    sudo -u mongodb mongod --config /etc/mongod.conf
    
    或修改systemd服务文件(/lib/systemd/system/mongod.service),将User=mongodbGroup=mongodb添加到[Service]部分,然后重载systemd并重启服务:
    sudo systemctl daemon-reload
    sudo systemctl restart mongod
    

7. 定期更新和打补丁(修复已知漏洞)
保持MongoDB及依赖组件的最新版本,及时修复安全漏洞。

  • 更新MongoDB:使用包管理器更新到最新稳定版(如Ubuntu/Debian使用apt,CentOS/RHEL使用yum):
    sudo apt update &
        &
     sudo apt upgrade mongodb-org  # Ubuntu/Debian
    sudo yum update mongodb-org                      # CentOS/RHEL
    
  • 订阅安全公告:关注MongoDB官方安全公告(如邮件列表、博客),及时获取漏洞信息和补丁更新。

8. 创建数据库级用户并分配最小权限(遵循最小权限原则)
避免使用管理员账户连接所有数据库,为每个数据库创建专用用户并分配仅需要的角色。

  • 创建数据库用户:连接到MongoDB Shell,切换到目标数据库(如mydb),执行:
    use mydb
    db.createUser({
    
      user: "app_user",
      pwd: "AppUserPassword123!",
      roles: ["readWrite"]  // 仅授予读写权限(无需admin权限)
    }
    )
    
  • 验证权限:使用connectionStatus命令查看当前用户的权限:
    db.runCommand({
     connectionStatus: 1 }
        )
    
    或切换到目标数据库,使用db.getUser("app_user")查看用户角色。

声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!


若转载请注明出处: MongoDB在Linux上的安全设置
本文地址: https://pptw.com/jishu/725665.html
MongoDB在Linux上的版本升级步骤 如何用Linux命令管理MongoDB

游客 回复需填写必要信息