RBAC是MongoDB权限管理的核心机制,通过为用户分配预定义或自定义角色,实现对数据库操作的细粒度控制。需先在mongod.conf配置文件中启用授权:
sudo nano /etc/mongod.conf
找到security部分,添加或修改为:
security:
authorization: enabled
保存后重启MongoDB服务使配置生效:
sudo systemctl restart mongod
启用后,所有连接MongoDB的客户端都必须提供有效的用户名和密码。
为避免以root用户运行MongoDB带来的安全风险,应创建专用系统用户:
sudo adduser --system --group --disabled-login --no-create-home mongodb
然后更改MongoDB数据目录(默认/var/lib/mongodb)的所有权:
sudo chown -R mongodb:mongodb /var/lib/mongodb
修改MongoDB配置文件中的systemLog.path和storage.dbPath,确保其指向的目录也属于mongodb用户。
在admin数据库中创建具有用户管理权限的管理员用户(如adminUser),用于后续创建和管理其他用户:
mongo
切换到admin数据库,执行以下命令(替换为强密码):
use admin
db.createUser({
user: "adminUser",
pwd: "StrongPassword123!",
roles: ["userAdminAnyDatabase", "readWriteAnyDatabase"]
})
退出后,使用管理员用户连接:
mongo -u adminUser -p StrongPassword123 --authenticationDatabase admin
该用户可管理所有数据库的用户和角色,但无法直接访问数据库内容(需额外分配对应数据库的角色)。
遵循“最小权限原则”,仅为用户分配完成工作所需的最低权限。常见角色示例:
readWrite:允许对指定数据库进行读写操作(适用于应用用户);readOnly:仅允许读取数据(适用于报表或备份用户);dbOwner:拥有数据库的所有权限(适用于数据库管理员)。例如,为用户myUser分配myDatabase数据库的读写权限:
mongo -u adminUser -p StrongPassword123 --authenticationDatabase admin
切换到目标数据库,创建用户并分配角色:
use myDatabase
db.createUser({
user: "myUser",
pwd: "UserPassword456!",
roles: ["readWrite"]
})
若需调整现有用户的权限,可使用grantRolesToUser命令。
通过配置mongod.conf中的net.bindIp,限制MongoDB仅接受特定IP地址的连接(如本地和信任的服务器IP):
sudo nano /etc/mongod.conf
修改net部分:
net:
port: 27017
bindIp: 127.0.0.1,192.168.1.100 # 允许本地和192.168.1.100访问
保存后重启服务:
sudo systemctl restart mongod
此外,可通过Ubuntu防火墙(ufw)进一步限制端口访问:
sudo ufw allow from 192.168.1.100 to any port 27017
sudo ufw enable
仅允许信任的IP地址访问MongoDB端口。
审计日志可记录用户的操作(如查询、插入、删除),便于后续追踪和排查安全事件。在mongod.conf中启用审计日志:
sudo nano /etc/mongod.conf
添加security.auditLog配置:
security:
auditLog:
destination: file
format: JSON
path: /var/log/mongodb/audit.json
保存后重启服务:
sudo systemctl restart mongod
审计日志将保存在/var/log/mongodb/audit.json中,可通过cat或tail命令查看。
mongod.conf和审计日志,防止配置丢失或篡改。