外观
MongoDB 安全相关参数
认证与授权参数
认证机制配置
参数名:security.authorization
功能:启用或禁用基于角色的访问控制(RBAC)
可选值:
disabled:禁用授权(默认,不安全)enabled:启用授权
最佳实践:
- 生产环境必须设置为
enabled - 配合认证机制使用,确保只有授权用户可以访问
配置示例:
yaml
security:
authorization: enabled认证机制
参数名:setParameter.authenticationMechanisms
功能:指定允许的认证机制
可选值:
SCRAM-SHA-256:默认,使用 SHA-256 哈希的 SCRAM 认证SCRAM-SHA-1:使用 SHA-1 哈希的 SCRAM 认证MONGODB-X509:基于 X.509 证书的认证PLAIN:LDAP 或 Kerberos 认证GSSAPI:Kerberos 认证
最佳实践:
- 优先使用
SCRAM-SHA-256,安全性更高 - 根据认证需求配置相应的认证机制
- 避免使用
PLAIN机制,除非配合 TLS/SSL 使用
配置示例:
yaml
setParameter:
authenticationMechanisms: SCRAM-SHA-256,MONGODB-X509密钥文件认证
参数名:security.keyFile
功能:指定用于副本集或分片集群成员间认证的密钥文件路径
最佳实践:
- 密钥文件权限必须设置为
600(仅所有者可读写) - 所有集群成员必须使用相同的密钥文件
- 密钥文件内容长度至少为 6 个字符
配置示例:
yaml
security:
keyFile: /etc/mongodb/keyfileLDAP 认证配置
参数名:setParameter.ldapServers
功能:指定 LDAP 服务器地址
配置示例:
yaml
setParameter:
ldapServers: ldap://ldap.example.com:389相关参数:
setParameter.ldapBindDN:LDAP 绑定 DNsetParameter.ldapBindPassword:LDAP 绑定密码setParameter.ldapUserToDNMapping:用户到 DN 的映射规则
TLS/SSL 配置参数
TLS 启用
参数名:net.tls.mode
功能:启用或配置 TLS/SSL 加密
可选值:
disabled:禁用 TLS(默认)allowTLS:允许但不要求 TLS 连接preferTLS:优先使用 TLS 连接requireTLS:要求所有连接都使用 TLS
最佳实践:
- 生产环境必须设置为
requireTLS - 配合证书配置使用
配置示例:
yaml
net:
tls:
mode: requireTLS证书文件配置
参数名:net.tls.certificateKeyFile
功能:指定包含 MongoDB 服务器证书和私钥的 PEM 文件路径
相关参数:
net.tls.certificateKeyFilePassword:证书私钥密码(如果有)net.tls.CAFile:指定 CA 证书文件路径,用于验证客户端证书net.tls.clusterFile:集群成员间通信的证书文件
最佳实践:
- 证书文件权限必须设置为
600 - 使用由受信任 CA 签发的证书
- 定期更新证书
配置示例:
yaml
net:
tls:
mode: requireTLS
certificateKeyFile: /etc/mongodb/server.pem
CAFile: /etc/mongodb/ca.pem
clusterFile: /etc/mongodb/cluster.pemTLS 协议版本
参数名:net.tls.disabledProtocols
功能:禁用特定的 TLS 协议版本
最佳实践:
- 禁用不安全的 TLS 版本(TLS 1.0, TLS 1.1)
- 只启用 TLS 1.2 和 TLS 1.3
配置示例:
yaml
net:
tls:
disabledProtocols: TLS1_0,TLS1_1客户端证书验证
参数名:net.tls.allowInvalidCertificates
功能:是否允许无效的客户端证书
可选值:
false:默认,拒绝无效证书true:允许无效证书(不安全,仅用于测试)
最佳实践:
- 生产环境必须设置为
false - 配合
net.tls.CAFile使用,验证客户端证书
配置示例:
yaml
net:
tls:
allowInvalidCertificates: false
allowInvalidHostnames: false访问控制参数
IP 绑定
参数名:net.bindIp
功能:指定 MongoDB 监听的 IP 地址
最佳实践:
- 生产环境应指定具体的 IP 地址,而不是
0.0.0.0 - 只绑定需要访问的网络接口
- 配合防火墙使用,限制访问
配置示例:
yaml
net:
bindIp: 127.0.0.1,192.168.1.100端口配置
参数名:net.port
功能:指定 MongoDB 监听的端口
默认值:27017
最佳实践:
- 生产环境可以考虑使用非默认端口,增加安全性
- 配合防火墙使用,限制端口访问
配置示例:
yaml
net:
port: 27018最大连接数
参数名:net.maxIncomingConnections
功能:指定 MongoDB 允许的最大并发连接数
默认值:65536
最佳实践:
- 根据服务器资源和业务需求调整
- 避免设置过大,导致资源耗尽
- 建议设置为服务器可用连接数的 80%
配置示例:
yaml
net:
maxIncomingConnections: 10000连接超时
参数名:net.socketTimeoutMS
功能:指定套接字操作的超时时间(毫秒)
默认值:0(无超时)
最佳实践:
- 设置合理的超时时间,避免连接长时间占用资源
- 建议设置为 30000-60000 毫秒(30-60 秒)
配置示例:
yaml
net:
socketTimeoutMS: 30000
connectTimeoutMS: 10000审计日志参数
审计启用
参数名:auditLog.destination
功能:启用审计日志并指定输出目标
可选值:
syslog:输出到系统日志console:输出到控制台file:输出到文件pipe:输出到管道
最佳实践:
- 生产环境建议启用审计日志
- 选择合适的输出目标,便于管理和分析
配置示例:
yaml
auditLog:
destination: file
format: JSON
path: /var/log/mongodb/audit.log
filter: '{ atype: { $in: ["authCheck", "createUser", "dropUser"] } }'审计日志格式
参数名:auditLog.format
功能:指定审计日志的格式
可选值:
JSON:JSON 格式(默认)BSON:BSON 格式
最佳实践:
- 使用
JSON格式,便于日志分析工具处理
审计日志过滤
参数名:auditLog.filter
功能:指定审计日志的过滤条件,只记录符合条件的事件
最佳实践:
- 根据审计需求配置过滤条件,避免日志过大
- 重点审计认证、授权和用户管理操作
安全相关 SetParameter
禁用 HTTP 接口
参数名:setParameter.enableHTTPInterface
功能:启用或禁用 MongoDB 的 HTTP 接口
最佳实践:
- 生产环境必须设置为
false,禁用 HTTP 接口
配置示例:
yaml
setParameter:
enableHTTPInterface: false禁用 REST 接口
参数名:setParameter.restServiceEnabled
功能:启用或禁用 MongoDB 的 REST 接口
最佳实践:
- 生产环境必须设置为
false,禁用 REST 接口
配置示例:
yaml
setParameter:
restServiceEnabled: false启用本地主机异常
参数名:setParameter.enableLocalhostAuthBypass
功能:启用或禁用本地主机认证绕过
最佳实践:
- 生产环境建议设置为
false,禁用本地主机认证绕过 - 增强安全性,确保所有连接都需要认证
配置示例:
yaml
setParameter:
enableLocalhostAuthBypass: false密码复杂度验证
参数名:setParameter.validatePasswordStrength
功能:启用或禁用密码强度验证
最佳实践:
- 生产环境建议设置为
true,启用密码强度验证 - 配合自定义密码策略使用
配置示例:
yaml
setParameter:
validatePasswordStrength: true
passwordPolicy: custom安全参数最佳实践
1. 生产环境安全基线
必须配置的安全参数:
security.authorization: enablednet.tls.mode: requireTLSsecurity.keyFile(集群环境)net.bindIp(指定具体 IP)setParameter.enableHTTPInterface: falsesetParameter.restServiceEnabled: false
2. 证书管理
证书最佳实践:
- 使用由受信任 CA 签发的证书
- 定期更新证书,避免过期
- 证书权限设置为
600 - 所有集群成员使用相同的 CA 证书
3. 访问控制
访问控制最佳实践:
- 遵循最小权限原则,只授予必要的权限
- 定期审查用户和角色权限
- 启用审计日志,监控关键操作
- 限制 MongoDB 端口的网络访问(使用防火墙)
4. 定期安全审计
安全审计最佳实践:
- 定期检查安全参数配置
- 审计用户权限和认证日志
- 使用安全扫描工具检测漏洞
- 定期更新 MongoDB 版本,修复安全漏洞
5. 集群安全
集群安全最佳实践:
- 所有集群成员间通信使用 TLS 加密
- 使用密钥文件进行成员间认证
- 禁用不必要的服务和接口
- 定期轮换密钥文件和证书
常见问题(FAQ)
Q1: 如何测试 MongoDB 安全配置是否正确?
A1: 可以通过以下方法测试:
- 尝试使用无效凭证连接,应该被拒绝
- 尝试使用未授权用户执行操作,应该被拒绝
- 检查 TLS 连接是否正常建立
- 查看审计日志,确认关键操作被记录
Q2: 安全参数配置错误会导致什么问题?
A2: 安全参数配置错误可能导致:
- MongoDB 无法启动
- 连接失败
- 安全漏洞,如未授权访问
- 性能问题(如过度审计)
Q3: 如何备份安全配置?
A3: 建议:
- 备份 MongoDB 配置文件
- 备份密钥文件和证书(安全存储)
- 记录用户和角色配置
- 使用版本控制系统管理配置文件
Q4: 安全参数会影响性能吗?
A4: 部分安全参数会对性能产生影响:
- TLS 加密会增加 CPU 开销(约 5-10%)
- 审计日志会增加 I/O 开销
- 复杂的认证机制(如 LDAP)会增加认证延迟
Q5: 如何在不停机的情况下更新安全配置?
A5: 对于副本集或分片集群:
- 先更新次要节点的配置,逐一重启
- 最后更新主节点(需要故障转移)
- 对于 TLS 证书更新,可以先添加新证书,再移除旧证书
- 对于用户和角色配置,可以在线更新,无需重启
