Ubuntu下MongoDB安全设置关键措施
从MongoDB官方APT仓库安装(而非Ubuntu默认仓库),确保获得最新安全版本和更新支持。操作命令:
wget -qO - https://www.mongodb.org/static/pgp/server-6.0.asc | sudo apt-key add -
echo "deb [ arch=amd64,arm64 ] https://repo.mongodb.org/apt/ubuntu $(lsb_release -sc)/mongodb-org/6.0 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-6.0.list
sudo apt-get update
sudo apt-get install -y mongodb-org
编辑MongoDB配置文件/etc/mongod.conf,在security section添加authorization: enabled,强制所有连接需提供有效用户名和密码。修改后重启服务:
sudo systemctl restart mongod
创建管理员用户(需切换至admin数据库):
mongo
use admin
db.createUser({
user: "adminUser",
pwd: "StrongPassword123!",
roles: [{ role: "root", db: "admin" }]
})
/etc/mongod.conf中的net.bindIp,仅允许本地(127.0.0.1)或特定IP访问(如192.168.1.100):net:
bindIp: 127.0.0.1,192.168.1.100 # 多IP用逗号分隔
port: 27017
ufw限制MongoDB端口(默认27017)的访问,仅允许可信IP:sudo ufw allow from 192.168.1.100 to any port 27017
sudo ufw enable
为防止数据在传输中被窃取,需启用SSL/TLS加密。步骤如下:
/etc/mongod.conf,指定证书和私钥路径:net:
tls:
mode: requireTLS
certificateKeyFile: /path/to/server.pem # 证书文件(含私钥)
CAFile: /path/to/ca.pem # CA证书(验证客户端证书,可选)
readWrite仅用于读写,dbAdmin用于数据库维护):use mydb
db.createUser({
user: "mydbUser",
pwd: "MyDbPassword456!",
roles: [{ role: "readWrite", db: "mydb" }]
})
use admin
db.createRole({
role: "readOnlyOrders",
privileges: [{
resource: { db: "mydb", collection: "orders" },
actions: ["find"]
}],
roles: []
})
db.createUser({
user: "orderViewer",
pwd: "OrderViewerPass789!",
roles: [{ role: "readOnlyOrders", db: "mydb" }]
})
审计日志可记录所有用户操作(如查询、插入、删除),便于后续审查异常行为。修改/etc/mongod.conf启用审计:
auditLog:
destination: file
format: JSON
path: /var/log/mongodb/auditLog.json
filter: '{}' # 可选,过滤特定操作(如仅记录delete操作)
重启服务后,审计日志将保存至指定路径。
保持MongoDB及Ubuntu系统为最新版本,及时修复已知安全漏洞:
sudo apt-get update
sudo apt-get upgrade mongodb-org ubuntu
mongostat(查看操作统计)、mongotop(查看集合级性能)监控数据库状态。htop(CPU/内存)、iotop(磁盘IO)监控系统资源,设置阈值告警(如CPU使用率超过80%触发邮件通知)。定期备份MongoDB数据(如每日增量备份+每周全量备份),确保备份数据的完整性和可恢复性。使用mongodump工具备份:
# 全量备份
mongodump --out /backup/mongodb/full_$(date +%F)
# 增量备份(基于上次备份的时间戳)
mongodump --out /backup/mongodb/incr_$(date +%F) --oplog
备份文件需存储在安全位置(如异地存储或加密存储)。