MongoDB在Linux上的安全设置
1. 启用身份验证(核心安全措施)
身份验证是防止未授权访问MongoDB的第一道防线。编辑MongoDB配置文件(通常位于/etc/mongod.conf
),在security
部分添加或修改以下内容:
security:
authorization: enabled
保存后重启MongoDB服务使配置生效:
sudo systemctl restart mongod
创建管理员账户(需在启用认证前完成):连接到MongoDB Shell(mongo
),切换到admin
数据库,执行:
use admin
db.createUser({
user: "admin",
pwd: "YourStrongPassword123!",
roles: ["root"] // root角色拥有最高权限
}
)
后续连接需指定用户名、密码及认证数据库(如admin
):
mongo -u admin -p YourStrongPassword123 --authenticationDatabase admin
2. 配置网络访问控制(限制访问范围)
通过绑定IP地址和防火墙规则缩小MongoDB的暴露范围。
- 修改绑定IP:编辑
/etc/mongod.conf
中的net
部分,将bindIp
设置为仅允许特定IP或本地访问(如127.0.0.1
或局域网IP段):
重启服务使绑定生效:net: bindIp: 127.0.0.1,192.168.1.100 # 允许本地和局域网IP 192.168.1.100 port: 27017 # 默认端口,可修改但需同步更新防火墙规则
sudo systemctl restart mongod
。 - 配置防火墙:
- ufw(Ubuntu/Debian):允许MongoDB端口(默认27017)仅来自受信任IP:
sudo ufw allow from 192.168.1.100 to any port 27017/tcp # 替换为你的受信任IP sudo ufw enable # 启用防火墙
- firewalld(CentOS/RHEL):永久添加MongoDB端口规则并重载:
sudo firewall-cmd --permanent --zone=public --add-port=27017/tcp sudo firewall-cmd --reload
- iptables(传统Linux):允许特定IP访问27017端口,拒绝其他所有请求:
sudo iptables -A INPUT -s 192.168.1.100 -p tcp --dport 27017 -j ACCEPT sudo iptables -A INPUT -p tcp --dport 27017 -j DROP sudo netfilter-persistent save # Debian/Ubuntu保存规则
- ufw(Ubuntu/Debian):允许MongoDB端口(默认27017)仅来自受信任IP:
3. 禁用不必要的接口和功能(减少攻击面)
MongoDB默认开启的HTTP接口、REST接口和JSONP功能会增加安全风险,建议禁用:
编辑/etc/mongod.conf
中的net
部分,添加或修改以下内容:
net:
http:
enabled: false # 禁用HTTP接口
RESTInterfaceEnabled: false # 禁用REST接口
JSONPEnabled: false # 禁用JSONP
保存后重启服务:sudo systemctl restart mongod
。
4. 使用TLS/SSL加密通信(保护数据传输)
加密MongoDB客户端与服务端之间的通信,防止数据被窃听或篡改。
- 生成SSL证书:使用OpenSSL生成自签名证书(生产环境建议使用CA签发的证书):
openssl req -newkey rsa:2048 -new -nodes -x509 -days 3650 -keyout mongodb-key.pem -out mongodb-cert.pem cat mongodb-key.pem mongodb-cert.pem > mongodb.pem # 合并私钥和证书
- 配置MongoDB:编辑
/etc/mongod.conf
中的net.ssl
部分,指定证书路径:
重启服务:net: ssl: mode: requireSSL # 强制使用SSL PEMKeyFile: /etc/ssl/mongodb.pem # 证书文件路径 CAFile: /etc/ssl/mongodb-cert.pem # CA证书路径(若使用CA签发)
sudo systemctl restart mongod
。 - 客户端连接:客户端连接时需指定SSL参数:
mongo --ssl --sslCAFile /etc/ssl/mongodb-cert.pem --sslPEMKeyFile /etc/ssl/mongodb.pem -u admin -p YourStrongPassword123 --authenticationDatabase admin
5. 配置审计日志(监控操作行为)
审计日志可记录所有用户的操作(如查询、插入、删除),便于事后追溯安全事件。
- 启用审计日志:编辑
/etc/mongod.conf
中的security.auditLog
部分,配置日志输出:
确保MongoDB对日志目录有写权限:security: auditLog: destination: file # 日志输出到文件 format: JSON # 日志格式为JSON(易解析) path: /var/log/mongodb/audit.json # 日志文件路径
sudo chown -R mongodb:mongodb /var/log/mongodb
。 - 查看日志:使用
tail
命令实时查看审计日志:tail -f /var/log/mongodb/audit.json
6. 使用专用非特权用户运行MongoDB(降低权限风险)
避免以root用户运行MongoDB,减少潜在的安全风险。
- 创建专用用户:创建一个无登录权限的系统用户(如
mongodb
):sudo useradd -r -s /bin/false mongodb
- 修改数据目录权限:将MongoDB数据目录(默认
/var/lib/mongodb
)和日志目录(默认/var/log/mongodb
)的所有权赋予该用户:sudo chown -R mongodb:mongodb /var/lib/mongodb sudo chown -R mongodb:mongodb /var/log/mongodb
- 以专用用户启动服务:使用
-u
参数指定用户启动MongoDB:
或修改systemd服务文件(sudo -u mongodb mongod --config /etc/mongod.conf
/lib/systemd/system/mongod.service
),将User=mongodb
和Group=mongodb
添加到[Service]
部分,然后重载systemd并重启服务:sudo systemctl daemon-reload sudo systemctl restart mongod
7. 定期更新和打补丁(修复已知漏洞)
保持MongoDB及依赖组件的最新版本,及时修复安全漏洞。
- 更新MongoDB:使用包管理器更新到最新稳定版(如Ubuntu/Debian使用
apt
,CentOS/RHEL使用yum
):sudo apt update & & sudo apt upgrade mongodb-org # Ubuntu/Debian sudo yum update mongodb-org # CentOS/RHEL
- 订阅安全公告:关注MongoDB官方安全公告(如邮件列表、博客),及时获取漏洞信息和补丁更新。
8. 创建数据库级用户并分配最小权限(遵循最小权限原则)
避免使用管理员账户连接所有数据库,为每个数据库创建专用用户并分配仅需要的角色。
- 创建数据库用户:连接到MongoDB Shell,切换到目标数据库(如
mydb
),执行:use mydb db.createUser({ user: "app_user", pwd: "AppUserPassword123!", roles: ["readWrite"] // 仅授予读写权限(无需admin权限) } )
- 验证权限:使用
connectionStatus
命令查看当前用户的权限:
或切换到目标数据库,使用db.runCommand({ connectionStatus: 1 } )
db.getUser("app_user")
查看用户角色。
声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: MongoDB在Linux上的安全设置
本文地址: https://pptw.com/jishu/725665.html