MongoDB安全加固关键措施
启用MongoDB的身份验证机制是防止未授权访问的核心步骤。通过配置security.authorization: enabled(YAML格式)或auth=true(旧版配置文件),强制所有客户端连接时提供有效凭证。创建管理员账户时,需分配root角色(拥有最高权限,仅用于紧急管理),避免直接使用默认的空密码账户。例如:
use admin;
db.createUser({
user: "admin",
pwd: "StrongPassword123!",
roles: ["root"]
});
此配置确保只有通过身份验证的用户才能访问数据库。
RBAC是MongoDB实现细粒度权限管理的核心机制。遵循“最小权限原则”,为用户分配完成其任务所需的最小权限。例如:
readWrite角色(针对特定数据库,如mydb);read角色+特定集合的find权限;dbAdmin角色(管理索引、统计信息)而非root角色。db.createRole({
role: "dataAnalyst",
privileges: [
{ resource: { db: "mydb", collection: "sales" }, actions: ["find", "aggregate"] }
],
roles: []
});
通过RBAC避免权限过度分配,降低内部威胁风险。
net.ssl.mode: requireSSL,并指定证书文件路径(如certificateKeyFile: /path/to/mongodb.pem)。证书需由可信CA颁发或使用自签名证书(需客户端信任)。storage.wiredTiger.engineConfig.encryption.keyFile指定密钥文件路径。密钥文件需严格限制访问权限(如chmod 600)。net.bindIp配置MongoDB仅监听受信任的IP地址(如127.0.0.1用于本机访问,或添加内部服务器IP)。避免使用0.0.0.0(监听所有接口),减少外部攻击面。firewalld或iptables限制MongoDB端口(默认27017)的访问,仅允许特定IP段(如内网网段192.168.1.0/24)访问。例如:sudo firewall-cmd --permanent --zone=public --add-rich-rule='rule family="ipv4" source address="192.168.1.0/24" port protocol="tcp" port="27017" accept';
sudo firewall-cmd --reload;
bindIp设置为127.0.0.1,彻底阻断外部连接。mongod),并通过chown命令将MongoDB数据目录(如/var/lib/mongodb)、日志文件(如/var/log/mongodb)、配置文件(如/etc/mongod.conf)的所有权赋予该用户。例如:sudo useradd -r -s /sbin/nologin mongod;
sudo chown -R mongod:mongod /var/lib/mongodb;
sudo chown -R mongod:mongod /var/log/mongodb;
chmod 700(仅所有者可读写执行),配置文件chmod 600(仅所有者可读写),防止未授权用户篡改配置或访问数据。通过审计日志记录用户操作(如登录、查询、修改、删除),便于事后追溯安全事件。配置auditLog参数(企业版支持),指定日志输出路径(如destination: file,format: JSON,path: /var/log/mongodb/audit.json)。示例配置:
auditLog:
destination: file
format: JSON
path: /var/log/mongodb/audit.json
filter: '{ atype: { $in: ["createUser", "updateUser", "deleteUser", "dropDatabase", "insert", "update", "remove"] } }'
审计日志需定期审查,及时发现异常操作(如大量数据删除、未授权登录)。
保持MongoDB版本为最新稳定版,及时应用官方发布的安全补丁。定期检查MongoDB官方安全公告(如CVE列表),修复已知漏洞(如未授权访问、缓冲区溢出)。例如,使用yum update mongodb-org(CentOS)或apt-get upgrade mongodb-server(Ubuntu)更新软件包。
28017),用于远程管理,建议通过nohttpinterface: true禁用,减少攻击面。mapReduce、group、$where等服务器端脚本,通过security.javascriptEnabled: false禁用,防止恶意脚本执行。