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和審計日志,防止配置丟失或篡改。