Linux系统MongoDB安全如何保障
1. 启用基于角色的访问控制(RBAC)
RBAC是MongoDB安全的核心机制,通过为用户分配特定角色限制其对数据库的操作权限。首先需在mongod.conf
中启用认证:
security:
authorization: enabled
重启MongoDB服务使配置生效:sudo systemctl restart mongod
。然后创建管理员用户(用于管理数据库)和普通用户(用于应用访问):
// 连接到MongoDB shell
mongo
// 创建管理员用户(赋予root角色,可管理所有数据库)
use admin
db.createUser({
user: "admin",
pwd: "StrongAdminPassword123!",
roles: ["root"]
}
)
// 创建应用数据库用户(赋予readWrite角色,仅能读写指定数据库)
use myappdb
db.createUser({
user: "appuser",
pwd: "AppUserSecurePassword456!",
roles: ["readWrite", "dbOwner"]
}
)
后续应用连接时需使用这些用户并通过--authenticationDatabase
指定认证库(如mongo -u appuser -p AppUserSecurePassword456 --authenticationDatabase myappdb
)。
2. 限制网络访问范围
通过配置bindIp
参数将MongoDB绑定到特定IP地址,避免暴露在公网。修改mongod.conf
中的net
section:
net:
bindIp: 127.0.0.1 # 仅允许本地访问
# 若需允许远程IP(如192.168.1.100),可添加逗号分隔的IP列表
# bindIp: 127.0.0.1,192.168.1.100
同时使用Linux防火墙(如ufw
或iptables
)限制访问端口(默认27017):
# 使用ufw允许特定IP访问27017端口
sudo ufw allow from 192.168.1.100 to any port 27017
sudo ufw enable
# 使用iptables拒绝其他IP的访问
sudo iptables -A INPUT -p tcp --dport 27017 -s 192.168.1.100 -j ACCEPT
sudo iptables -A INPUT -p tcp --dport 27017 -j DROP
此措施可有效防止未经授权的网络访问。
3. 配置TLS/SSL加密通信
加密客户端与服务器之间的数据传输,防止中间人攻击。首先使用OpenSSL生成自签名证书(生产环境建议使用CA签发的证书):
# 生成CA私钥和证书
sudo openssl req -newkey rsa:2048 -new -nodes -x509 -days 3650 -keyout /etc/ssl/mongodb-ca.key -out /etc/ssl/mongodb-ca.crt
# 生成服务器私钥和证书签名请求(CSR)
sudo openssl req -newkey rsa:2048 -new -nodes -keyout /etc/ssl/mongodb-server.key -out /etc/ssl/mongodb-server.csr
# 使用CA签署服务器证书
sudo openssl x509 -req -in /etc/ssl/mongodb-server.csr -CA /etc/ssl/mongodb-ca.crt -CAkey /etc/ssl/mongodb-ca.key -CAcreateserial -out /etc/ssl/mongodb-server.crt -days 3650
# 合并服务器证书和私钥为PEM文件
sudo cat /etc/ssl/mongodb-server.crt /etc/ssl/mongodb-server.key >
/etc/ssl/mongodb-server.pem
然后在mongod.conf
中配置SSL:
net:
ssl:
mode: requireSSL # 强制使用SSL
PEMKeyFile: /etc/ssl/mongodb-server.pem # 服务器证书和私钥
CAFile: /etc/ssl/mongodb-ca.crt # CA证书(用于验证客户端证书,可选)
重启MongoDB服务:sudo systemctl restart mongod
。客户端连接时需指定SSL参数:
mongo --ssl --sslCAFile /etc/ssl/mongodb-ca.crt --sslPEMKeyFile /etc/ssl/mongodb-server.pem -u appuser -p AppUserSecurePassword456 --authenticationDatabase myappdb
此配置确保数据传输过程中的机密性和完整性。
4. 使用非特权用户运行MongoDB
避免以root用户运行MongoDB,降低系统被入侵后的风险。首先创建专用用户和组:
sudo useradd -r -s /bin/false mongodb # 创建系统用户(无登录权限)
然后修改MongoDB数据目录和日志目录的权限,使其属于mongodb
用户:
sudo chown -R mongodb:mongodb /var/lib/mongodb # 数据目录
sudo chown -R mongodb:mongodb /var/log/mongodb # 日志目录
最后使用mongodb
用户启动MongoDB服务:
sudo -u mongodb mongod --config /etc/mongod.conf
或通过systemd服务文件(/etc/systemd/system/mongod.service
)设置User=mongodb
和Group=mongodb
,然后重启服务。
5. 配置审计日志(MongoDB Enterprise)
审计日志可记录所有用户操作(如查询、插入、删除),便于事后追溯安全事件。仅在MongoDB Enterprise版本中可用,配置mongod.conf
中的auditLog
section:
security:
auditLog:
destination: file # 日志输出到文件
format: JSON # 日志格式为JSON(便于解析)
path: /var/log/mongodb/audit.json # 日志文件路径
重启MongoDB服务后,所有操作将被记录到/var/log/mongodb/audit.json
中。可通过查看日志检测异常操作(如未授权的数据库访问)。
6. 定期更新与监控
保持MongoDB为最新版本,及时修复已知安全漏洞。使用包管理器更新MongoDB:
# Ubuntu/Debian
sudo apt update &
&
sudo apt upgrade mongodb-org
# CentOS/RHEL
sudo yum update mongodb-org
设置监控工具(如Prometheus+Granafa、Zabbix)监控MongoDB的运行状态(如CPU使用率、内存占用、连接数),并配置警报规则(如连接数超过阈值时发送邮件通知),及时发现潜在的安全威胁。
7. 禁用不必要的接口与功能
MongoDB默认开启HTTP接口和REST API,会增加攻击面,建议禁用:
net:
http:
enabled: false # 禁用HTTP接口
RESTInterfaceEnabled: false # 禁用REST API
JSONPEnabled: false # 禁用JSONP(跨域脚本攻击风险)
修改后重启MongoDB服务使配置生效。
声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: Linux系统MongoDB安全如何保障
本文地址: https://pptw.com/jishu/715682.html