1. 启用身份验证(核心安全机制)
编辑MongoDB配置文件(通常位于/etc/mongod.conf
),在security
section添加或修改以下内容以强制启用认证:
security:
authorization: enabled
修改后重启MongoDB服务使配置生效:
sudo systemctl restart mongod
创建管理员账户(需连接到MongoDB Shell操作):
mongo
use admin
db.createUser({
user: "admin",
pwd: "YourStrongPassword123!",
roles: ["root"] # root角色拥有最高权限
})
退出Shell后,后续连接需使用认证信息(如mongo -u admin -p YourStrongPassword123 --authenticationDatabase admin
)。
2. 配置网络访问控制(限制访问范围)
修改/etc/mongod.conf
中的net.bindIp
参数,仅允许特定IP地址或本地访问:
net:
bindIp: 127.0.0.1,192.168.1.100 # 示例:本地+局域网IP(根据需求调整)
port: 27017 # 默认端口,可修改但需同步更新防火墙规则
重启服务应用更改:
sudo systemctl restart mongod
通过防火墙(如ufw
或firewalld
)限制MongoDB端口(默认27017)的访问:
sudo ufw allow from 192.168.1.100 to any port 27017/tcp # 仅允许指定IP
sudo ufw enable # 启用防火墙
sudo firewall-cmd --permanent --zone=public --add-rich-rule='rule family="ipv4" source address="192.168.1.100" port protocol="tcp" port="27017" accept'
sudo firewall-cmd --reload
禁用不必要的接口(如HTTP/REST),在/etc/mongod.conf
中添加:
net:
http:
enabled: false
RESTInterfaceEnabled: false
JSONPEnabled: false
```。
**3. 使用TLS/SSL加密连接(保护数据传输)**
生成SSL证书(可使用OpenSSL创建自签名证书,生产环境建议使用CA签发的证书):
```bash
sudo openssl req -newkey rsa:2048 -new -nodes -x509 -days 3650 -keyout /etc/ssl/mongodb.key -out /etc/ssl/mongodb.crt
sudo cat /etc/ssl/mongodb.key /etc/ssl/mongodb.crt > /etc/ssl/mongodb.pem # 合并为PEM格式
修改/etc/mongod.conf
配置SSL:
net:
ssl:
mode: requireSSL # 强制使用SSL
PEMKeyFile: /etc/ssl/mongodb.pem # 证书路径
CAFile: /etc/ssl/mongodb.crt # CA证书路径(自签名时可省略或指向自身)
重启MongoDB服务:
sudo systemctl restart mongod
客户端连接时需指定SSL参数:
mongo --ssl --sslCAFile /etc/ssl/mongodb.crt --sslPEMKeyFile /etc/ssl/mongodb.pem -u admin -p YourStrongPassword123 --authenticationDatabase admin
```。
**4. 配置审计日志(记录操作行为)**
若使用MongoDB Enterprise版本,可在`/etc/mongod.conf`中启用审计日志:
```yaml
security:
auditLog:
destination: file # 日志输出到文件
format: JSON # 日志格式(JSON/CSV)
path: /var/log/mongodb/audit.json # 日志文件路径
重启服务后,所有用户操作(如查询、修改、登录)将被记录到指定文件,便于后续审计和追踪异常行为。
5. 使用非特权用户运行MongoDB(降低权限风险)
创建专用用户(如mongodb
)用于运行MongoDB服务:
sudo useradd -r -s /bin/false mongodb # -r表示系统用户,-s指定无登录shell
修改MongoDB数据目录和日志目录的权限(假设路径为/var/lib/mongodb
和/var/log/mongodb
):
sudo chown -R mongodb:mongodb /var/lib/mongodb
sudo chown -R mongodb:mongodb /var/log/mongodb
以非特权用户身份启动MongoDB:
sudo -u mongodb mongod --config /etc/mongod.conf
或修改systemd服务文件(/etc/systemd/system/mongod.service
)中的User
和Group
参数,然后重新加载systemd:
sudo systemctl daemon-reload
sudo systemctl restart mongod
```。
**6. 定期更新与监控(持续安全维护)**
定期检查MongoDB官方安全公告,使用包管理器更新到最新稳定版本(如Ubuntu使用`sudo apt update && sudo apt upgrade mongodb-org`,CentOS使用`sudo yum update mongodb-org`)。
配置监控工具(如Prometheus+Granafa)监控MongoDB的运行状态(CPU、内存、磁盘使用率)和连接数,设置警报规则(如连接数超过阈值时发送邮件通知)。
定期备份数据(使用`mongodump`命令),并将备份文件存储在安全的位置(如异地存储或加密存储):
```bash
mongodump --out /path/to/backup --authenticationDatabase admin -u admin -p YourStrongPassword123
```。