1. 启用身份验证(Authentication)
在mongod.conf配置文件中设置security.authorization: enabled,强制所有用户连接数据库时必须提供有效凭证。创建管理员账户(如使用root角色)并分配最小必要权限,避免使用默认的无认证账户。例如,通过mongo shell连接到admin数据库,执行db.createUser()命令创建管理员账户。
2. 配置基于角色的访问控制(RBAC)
遵循“最小权限原则”,为用户分配与职责匹配的角色(如read、readWrite、dbOwner或自定义角色)。避免授予用户root或dbOwner等高权限角色进行日常操作。例如,为仅需要查询数据的用户创建read角色:db.createRole({role: "readOnly", privileges: [{resource: {db: "mydb", collection: ""}, actions: ["find"]}], roles: []})。
3. 加密通信(TLS/SSL)
使用TLS/SSL加密客户端与MongoDB服务器之间的网络流量,防止中间人攻击。配置mongod.conf中的net.ssl.mode为requireSSL,指定证书文件路径(如PEMKeyFile指向服务器证书、CAFile指向CA证书)。对于生产环境,建议使用由受信任CA颁发的证书,而非自签名证书。
4. 限制网络暴露
通过mongod.conf中的net.bindIp参数限制MongoDB仅监听特定IP地址(如127.0.0.1或内部网络IP),避免暴露在公网。结合防火墙(如iptables或firewalld)配置规则,仅允许受信任的IP地址访问MongoDB端口(默认27017)。例如,使用ufw允许特定IP访问:sudo ufw allow from 192.168.1.100 to any port 27017。
5. 启用审计日志(Audit Logging)
对于MongoDB Enterprise版本,启用审计日志记录所有用户操作(如查询、插入、删除),便于后续安全审计和异常行为检测。配置mongod.conf中的security.auditLog参数,指定日志目的地(如文件)和格式(如JSON)。例如:security: auditLog: destination: file path: /var/log/mongodb/audit.log format: JSON。
6. 使用非特权专用服务账户
创建专用系统用户(如mongodb)运行MongoDB服务,避免使用root用户。设置MongoDB数据目录(如/var/lib/mongodb)和日志目录的权限,仅允许专用用户访问。例如:sudo useradd -r -s /bin/false mongodb,然后sudo chown -R mongodb:mongodb /var/lib/mongodb。
7. 禁用不必要的接口和功能
禁用MongoDB的HTTP状态接口(net.http.enabled: false)和REST接口(net.http.RESTInterfaceEnabled: false),减少攻击面。这些接口默认开启,可能暴露数据库信息或允许未经认证的访问。
8. 定期更新和补丁管理
定期检查MongoDB官方发布的安全补丁,及时升级到最新稳定版本,修复已知漏洞。例如,使用apt或yum包管理器更新MongoDB:sudo apt-get update && sudo apt-get upgrade mongodb-org。
9. 文件系统权限控制
设置MongoDB数据文件(如/var/lib/mongodb)、日志文件(如/var/log/mongodb)和配置文件(如/etc/mongod.conf)的权限,确保只有授权用户(如mongodb用户)可以读取或修改。例如:sudo chmod -R 750 /var/lib/mongodb,sudo chmod 640 /etc/mongod.conf。
10. 使用安全的网络协议和端口
避免使用MongoDB默认端口(27017),修改mongod.conf中的net.port参数为非标准端口(如27018),增加攻击难度。同时,确保客户端与服务器之间的通信使用TLS 1.2及以上版本,禁用过时的协议(如TLS 1.0)。