linux

Linux下MongoDB安全设置指南

小樊
32
2025-09-18 20:25:16
栏目: 云计算

Linux下MongoDB安全设置指南

1. 启用身份验证

身份验证是防止未授权访问的第一道防线。编辑MongoDB配置文件(/etc/mongod.conf),在security section添加或修改以下内容:

security:
  authorization: enabled

重启MongoDB服务使配置生效:

sudo systemctl restart mongod

创建管理员账户(以admin数据库为例):

mongo
use admin
db.createUser({
  user: "admin",
  pwd: "YourStrongPassword123!",
  roles: ["root"]  # 分配root角色(拥有所有数据库管理权限)
})

后续所有数据库操作需通过该管理员账户登录。

2. 配置网络访问控制

2.1 限制绑定IP

修改/etc/mongod.conf中的net.bindIp参数,仅允许受信任的IP地址或网络访问。例如:

2.2 禁用不必要的接口

关闭HTTP状态接口和REST接口,减少攻击面:

net:
  http:
    enabled: false
  RESTInterfaceEnabled: false
  JSONPEnabled: false

重启服务使配置生效。

2.3 配置防火墙

使用ufw(Ubuntu)或iptables(CentOS)限制MongoDB端口(默认27017)的访问:

3. 使用TLS/SSL加密通信

加密MongoDB客户端与服务端之间的通信,防止数据泄露。

3.1 生成SSL证书

使用OpenSSL生成自签名证书(生产环境建议使用CA签发的证书):

openssl req -newkey rsa:2048 -new -nodes -x509 -days 3650 -keyout mongodb-key.pem -out mongodb-cert.pem

将生成的mongodb-key.pem(私钥)和mongodb-cert.pem(证书)存放在安全目录(如/etc/ssl/mongodb)。

3.2 配置MongoDB使用SSL

修改/etc/mongod.conf中的net.ssl section:

net:
  ssl:
    mode: requireSSL  # 强制使用SSL
    PEMKeyFile: /etc/ssl/mongodb/mongodb-key.pem  # 私钥路径
    CAFile: /etc/ssl/mongodb/mongodb-cert.pem     # 证书路径(自签名时可省略或指向自身)

重启服务生效。

4. 配置审计日志(MongoDB Enterprise)

审计日志可记录所有用户操作(如查询、插入、删除),便于追踪安全事件。仅在MongoDB Enterprise版本中支持。
修改/etc/mongod.conf中的security.auditLog section:

security:
  auditLog:
    destination: file  # 日志输出到文件
    format: JSON       # 日志格式为JSON(便于解析)
    path: /var/log/mongodb/mongod-audit.log  # 日志文件路径

重启服务使审计功能生效。

5. 使用非特权专用服务账户

避免以root用户运行MongoDB,降低权限提升风险。

5.1 创建专用用户

sudo useradd -r -s /bin/false mongodb  # 创建系统用户(无登录权限)

5.2 修改数据目录权限

将MongoDB数据目录(默认/var/lib/mongodb)和日志目录(默认/var/log/mongodb)的所有权赋予该用户:

sudo chown -R mongodb:mongodb /var/lib/mongodb
sudo chown -R mongodb:mongodb /var/log/mongodb

5.3 以专用用户启动服务

sudo systemctl edit mongod  # 编辑服务文件,添加User和Group参数

在编辑器中添加:

[Service]
User=mongodb
Group=mongodb

保存后重启服务:

sudo systemctl daemon-reload
sudo systemctl restart mongod

6. 遵循最小权限原则配置RBAC

为用户分配仅满足其工作需求的权限,避免过度授权。

6.1 创建数据库用户

例如,为mydatabase数据库创建只读用户app_user

mongo
use mydatabase
db.createUser({
  user: "app_user",
  pwd: "AppUserPassword456!",
  roles: ["readWrite"]  # 仅授予读写权限
})

6.2 使用内置角色

优先使用MongoDB内置角色(如readreadWritedbAdminuserAdmin),减少自定义角色的复杂度。如需更细粒度的权限,可创建自定义角色。

7. 定期更新与补丁管理

及时应用MongoDB官方发布的安全补丁,修复已知漏洞。

# Ubuntu/Debian
sudo apt-get update
sudo apt-get upgrade mongodb-org

# CentOS/RHEL
sudo yum update mongodb-org

建议开启自动更新(如unattended-upgrades),确保系统与MongoDB始终保持最新状态。

8. 文件系统权限设置

确保MongoDB数据文件和配置文件的权限仅允许授权用户访问:

sudo chmod -R 750 /var/lib/mongodb  # 数据目录:所有者可读写执行,组用户可读执行
sudo chmod -R 750 /var/log/mongodb  # 日志目录:同上
sudo chmod 600 /etc/mongod.conf     # 配置文件:仅所有者可读写

9. 禁用不必要的功能

9.1 禁用REST接口

REST接口允许通过HTTP访问MongoDB,存在安全风险,建议关闭(已在步骤2.2中配置)。

9.2 禁用JavaScript执行

若无需在查询中使用JavaScript,可在配置文件中禁用:

security:
  javascriptEnabled: false

重启服务生效。

10. 定期备份数据

定期备份MongoDB数据,确保在数据丢失或被篡改时能够快速恢复。

10.1 使用mongodump备份

mongodump --out /path/to/backup --host 127.0.0.1 --port 27017 --username admin --password YourStrongPassword123!

10.2 使用mongorestore恢复

mongorestore /path/to/backup --host 127.0.0.1 --port 27017 --username admin --password YourStrongPassword123!

建议将备份文件存储在异地或云存储中,进一步提高数据安全性。

通过以上步骤,可显著提升Linux环境下MongoDB的安全性,防范未授权访问、数据泄露等常见安全威胁。需定期审查安全配置(如每季度一次),并根据业务需求调整权限和访问控制策略。

0
看了该问题的人还看了