1. 启用身份验证(Authorization)
这是MongoDB安全的基础,强制要求所有客户端连接提供用户名和密码验证。配置方法:编辑/etc/mongod.conf文件,在security部分添加authorization: enabled,保存后重启MongoDB服务(sudo systemctl restart mongod)。
2. 创建专用管理员账户
在admin数据库中创建具有管理权限的管理员账户(如root角色),避免使用默认的无密码账户。示例命令:
mongo
use admin
db.createUser({
user: "admin",
pwd: "YourStrongPassword123!",
roles: [{ role: "root", db: "admin" }]
})
创建后,所有管理操作(如创建用户、修改权限)需通过该账户认证。
3. 配置基于角色的访问控制(RBAC)
采用MongoDB内置的RBAC模型,为普通用户分配最小必要权限。常见内置角色:
read(只读)、readWrite(读写)、dbAdmin(数据库管理,如创建索引);clusterAdmin(集群管理)、clusterMonitor(集群监控);backup(备份)、restore(恢复)。app_user分配testdb数据库的读写权限:use testdb
db.createUser({
user: "app_user",
pwd: "AppUserPassword456!",
roles: [{ role: "readWrite", db: "testdb" }]
})
如需自定义角色(如限制某用户只能操作products集合的inventory子集合),可通过db.createRole()定义权限。
4. 限制网络访问(Bind IP)
修改/etc/mongod.conf中的net.bindIp参数,仅允许必要的IP地址访问MongoDB服务。常见设置:
bindIp: 127.0.0.1;bindIp: 127.0.0.1,192.168.1.100(替换为实际服务器IP)。5. 配置防火墙规则
使用CentOS的firewalld工具开放MongoDB默认端口(27017),并限制访问来源。示例命令:
sudo firewall-cmd --permanent --zone=public --add-port=27017/tcp
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
上述命令允许本地网络(192.168.1.0/24)访问27017端口,拒绝其他来源。
6. 启用SSL/TLS加密通信
通过SSL/TLS加密MongoDB客户端与服务端之间的数据传输,防止数据泄露。步骤如下:
/etc/mongod.conf的net.ssl部分添加以下内容:net:
ssl:
mode: requireSSL
PEMKeyFile: /path/to/mongodb-server.pem # 合并后的服务器证书+私钥(如`cat server.crt server.key > server.pem`)
CAFile: /path/to/mongodb-ca.crt # CA证书路径
sudo systemctl restart mongod)。mongo --ssl --sslCAFile /path/to/mongodb-ca.crt --sslPEMKeyFile /path/to/mongodb-client.pem。7. 启用审计日志
记录所有数据库操作(如用户登录、数据修改、权限变更),便于后续安全审计和异常排查。配置方法:在/etc/mongod.conf的systemLog部分添加:
systemLog:
destination: file
path: /var/log/mongodb/mongod.log
logAppend: true
verbosity: 1 # 1为基本审计,更高数值记录更详细信息
重启服务后,审计日志将保存到指定路径。
8. 定期更新与备份
sudo yum update mongodb-org);mongodump工具定期备份数据(如每日凌晨),并将备份文件存储在安全位置(如异地服务器或云存储)。示例备份命令:mongodump --host localhost --port 27017 --username admin --password YourStrongPassword123 --authenticationDatabase admin --out /backup/mongodb-$(date +%F)