如何在Ubuntu上实现MongoDB的安全审计
在启用审计功能前,需确保MongoDB已正确安装并配置基础安全设置(如身份验证、网络限制),这是审计功能有效性的基础:
mongodb-org),避免使用过时版本。/etc/mongod.conf中配置security.authorization: enabled,强制用户通过凭据访问数据库,防止未授权操作。net.bindIp设置仅允许受信任IP(如127.0.0.1或内网IP)连接MongoDB,降低远程攻击风险。编辑MongoDB主配置文件/etc/mongod.conf,在security部分添加auditLog配置,定义审计日志的输出目的地、格式和路径:
security:
authorization: enabled
auditLog:
destination: file # 日志输出到文件(可选:syslog)
format: JSON # 推荐使用JSON格式(便于后续解析)
path: /var/log/mongodb/audit.json # 日志文件路径
# 可选:过滤条件(如仅记录严重级别≥1的日志)
filter: '{ "severity": { "$gte": 1 } }'
说明:
destination可选择file(本地文件)或syslog(系统日志);format推荐JSON(结构化数据更易分析);filter可根据需求调整,减少无关日志。
确保审计日志目录存在,且MongoDB进程(默认用户mongodb)有写入权限:
sudo mkdir -p /var/log/mongodb
sudo chown mongodb:mongodb /var/log/mongodb
sudo chmod 750 /var/log/mongodb # 限制目录权限
修改配置后,重启MongoDB使审计功能生效:
sudo systemctl restart mongod
# 验证服务状态(确保无报错)
sudo systemctl status mongod
执行一些数据库操作(如查询、插入),检查审计日志是否记录:
# 连接到MongoDB Shell
mongo
# 切换到admin数据库(需管理员权限)
use admin
# 执行测试操作(如插入文档)
db.test.insert({ name: "audit_test", value: 123 })
# 退出Shell
exit
查看审计日志内容:
tail -f /var/log/mongodb/audit.json
正常情况下,日志会记录操作的用户、时间、操作类型(如insert)、数据库名称等信息。
根据需求调整filter参数,控制日志记录的粒度。例如:
filter: '{}'(默认,可能产生大量日志);filter: '{ "operationType": { "$in": ["delete", "update"] } }'。logrotate工具定期压缩、删除旧日志,避免磁盘空间耗尽。创建/etc/logrotate.d/mongodb-audit文件:/var/log/mongodb/audit.json {
weekly
rotate 4
compress
missingok
notifempty
create 640 mongodb mongodb
sharedscripts
postrotate
systemctl reload mongod >/dev/null 2>&1 || true
endscript
}