- 首页 >
- 问答 >
-
云计算 >
- Ubuntu MongoDB权限设置指南
Ubuntu MongoDB权限设置指南
小樊
47
2025-12-20 16:43:34
Ubuntu 上 MongoDB 权限设置指南
一 前置准备与配置文件
- 确认服务名称与配置文件路径:常见为服务名 mongod,配置文件 /etc/mongod.conf。如使用旧包或自定义安装,路径可能不同。
- 仅本地管理阶段可临时保留绑定为 127.0.0.1,远程访问前再改为内网地址或配合防火墙。
- 关键配置示例(YAML):
- 网络与端口
- net:
- port: 27017
- bindIp: 127.0.0.1(远程前改为内网 IP 段)
- 安全授权
- 使配置生效:
- sudo systemctl restart mongod
- sudo systemctl enable mongod(可选,开机自启)
以上为在 Ubuntu 上启用认证与网络绑定的通用做法,适用于 MongoDB 4.x/5.x 的常用配置方式。
二 启用认证与创建管理员
- 首次启用认证前,先在本地无认证状态下连接到 MongoDB(如 mongosh 或 mongo),创建第一个管理员账户;否则启用后将无法创建首个用户。
- 在 admin 数据库创建管理员(示例赋予用户管理所有数据库的权限):
- use admin
- db.createUser({
user: “admin”,
pwd: “StrongPass!23”,
roles: [{ role: “userAdminAnyDatabase”, db: “admin” }]
})
- 重启后使用管理员连接并验证:
- mongosh -u “admin” -p “StrongPass!23” --authenticationDatabase admin
- 或在 shell 中先连接再认证:use admin → db.auth(“admin”,“StrongPass!23”)
要点:管理员账户通常创建在 admin 库;启用授权后,所有客户端连接均需提供有效凭据。
三 为业务库创建用户与最小权限
- 原则:为用户仅授予完成其职责所需的最小权限;每个库的用户在其“认证数据库”下创建,但权限可授予其他库。
- 示例 1:为业务库 sales 创建读写用户
- use sales
- db.createUser({
user: “sales_rw”,
pwd: “SalesPass#2025”,
roles: [{ role: “readWrite”, db: “sales” }]
})
- 示例 2:为 sales 创建只读用户
- use sales
- db.createUser({
user: “sales_ro”,
pwd: “ReadOnly#2025”,
roles: [{ role: “read”, db: “sales” }]
})
- 示例 3:为 admin 创建具备全局读写与管理能力的超级用户(谨慎使用)
- use admin
- db.createUser({
user: “root”,
pwd: “RootPass#2025”,
roles: [“root”]
})
- 连接测试(URI 方式):
- mongosh mongodb://sales_rw:SalesPass#2025@:27017/sales
- mongosh mongodb://sales_ro:ReadOnly#2025@:27017/sales
常用内置角色:read、readWrite、dbAdmin、dbOwner、userAdmin、clusterAdmin、backup、restore、readAnyDatabase、readWriteAnyDatabase、userAdminAnyDatabase、dbAdminAnyDatabase、root。请按最小权限原则分配。
四 远程访问与网络加固
- 绑定地址:将 bindIp 改为服务器的内网地址(如 192.168.1.10)或内网网段(如 192.168.1.0/24),不要直接暴露 0.0.0.0 到公网。
- 防火墙:仅放通必要来源 IP 与端口(示例为 27017)。
- sudo ufw allow from 192.168.1.0/24 to any port 27017
- 或 iptables:
- iptables -A INPUT -s 192.168.1.100 -p tcp --dport 27017 -j ACCEPT
- iptables -A INPUT -p tcp --dport 27017 -j DROP
- 端口与隐蔽性:可修改默认端口 27017 为非常见端口,仅作为“安全通过 obscurity”的辅助手段,不能替代认证与网络隔离。
- 禁用不安全接口:确保未启用 REST 接口;如使用旧版本,可显式关闭 HTTP 接口(nohttpinterface)。
以上措施能显著降低暴露面,配合认证与最小权限共同提升安全性。
五 用户管理与常见问题
- 查看与删除用户
- 查看:use sales → show users(或 db.getUsers())
- 删除:use sales → db.dropUser(“sales_ro”)
- 常见报错与处理
- Authentication failed(错误码 18):检查用户名、密码、认证库(–authenticationDatabase 是否为创建该用户的库,常见为 admin 或业务库)、以及是否已启用 authorization。
- 启用认证后无法创建首个用户:在本地回环无认证状态下先创建管理员,再开启授权并重启。
- 配置文件路径或参数不生效:确认编辑的是实际被 mongod 使用的配置文件,修改后执行 sudo systemctl restart mongod;如使用旧版 INI 风格,auth=true 与 security.authorization=enabled 作用等同。
以上排错思路覆盖最常见的权限与连接问题,可据此快速定位并修复。