温馨提示×

MongoDB在Debian上的权限管理实践

小樊
40
2025-11-15 13:51:41
栏目: 云计算

MongoDB在Debian上的权限管理实践

一 启用认证与最小权限原则

  • 启用认证:编辑配置文件 /etc/mongod.conf,在 security 段落开启授权,保存后重启服务。
    • 配置示例:
      • security:
        • authorization: enabled
    • 操作命令:
      • sudo systemctl restart mongod
  • 原则与网络:遵循最小权限最小暴露面,仅在需要时开放端口 27017,生产环境将 bindIp 限制为内网或受控网段,并配合防火墙策略。上述做法可有效降低未授权访问风险。

二 创建管理员与数据库用户

  • 无认证阶段创建管理员(仅首次初始化时):
    • 连接 Shell:mongo
    • 创建超级管理员(仅在 admin 库):
      • use admin
      • db.createUser({ user: “admin”, pwd: “”, roles: [“root”] })
  • 启用认证后,使用管理员登录并创建业务用户:
    • 登录:mongo -u admin -p “” --authenticationDatabase admin
    • 在目标库创建只读用户:
      • use mydb
      • db.createUser({ user: “appReader”, pwd: “”, roles: [{ role: “read”, db: “mydb” }] })
    • 在目标库创建读写用户:
      • use mydb
      • db.createUser({ user: “appWriter”, pwd: “”, roles: [{ role: “readWrite”, db: “mydb” }] })
  • 连接与验证:
    • 只读连接:mongo -u appReader -p “” --authenticationDatabase mydb
    • 读写连接:mongo -u appWriter -p “” --authenticationDatabase mydb
    • 验证权限:在对应库执行 db.auth(“”, “”) 并尝试读/写操作。

三 角色体系与授权回收

  • 常用内置角色分层:
    • 数据库层:readreadWritedbAdminuserAdmindbOwner
    • 集群层:clusterAdminclusterManagerclusterMonitorhostManager
    • 全局层:readAnyDatabasereadWriteAnyDatabaseuserAdminAnyDatabasedbAdminAnyDatabase
    • 超级用户:root
  • 授权与回收示例:
    • 为用户追加角色:
      • use admin
      • db.grantRolesToUser(“appWriter”, [{ role: “dbAdmin”, db: “mydb” }])
    • 从用户移除角色:
      • use admin
      • db.revokeRolesFromUser(“appWriter”, [{ role: “dbAdmin”, db: “mydb” }])
  • 密码与账户维护:
    • 修改密码:db.changeUserPassword(“appWriter”, “”)
    • 查询用户权限:db.getUser(“appWriter”)
    • 删除用户:db.dropUser(“appWriter”)
  • 安全提示:避免使用 root 作为应用账户;优先授予最小必要角色

四 常见场景与命令清单

  • 场景A 应用专用账户(读写单一库)
    • use mydb
    • db.createUser({ user: “app”, pwd: “”, roles: [{ role: “readWrite”, db: “mydb” }] })
  • 场景B 只读报表账户
    • use mydb
    • db.createUser({ user: “reporter”, pwd: “”, roles: [{ role: “read”, db: “mydb” }] })
  • 场景C 运维账户(库级管理,不含用户管理)
    • use mydb
    • db.createUser({ user: “mydbAdmin”, pwd: “”, roles: [{ role: “dbAdmin”, db: “mydb” }] })
  • 场景D 集中管理用户与权限(谨慎授予)
    • use admin
    • db.createUser({ user: “ops”, pwd: “”, roles: [“userAdminAnyDatabase”, “dbAdminAnyDatabase”, “readWriteAnyDatabase”] })
  • 常用运维命令
    • 查看连接状态:db.runCommand({ connectionStatus: 1 })
    • 列出用户:use admin; db.system.users.find().pretty()
    • 查看角色权限细节:db.getRole(“readWrite”, { showPrivileges: true })。

五 安全加固与运维建议

  • 启用认证并遵循最小权限;为管理员与业务账户设置强密码定期轮换策略。
  • 网络与系统加固:限制 bindIp、仅开放 27017 至受控来源;启用防火墙;禁用不必要的接口与服务。
  • 加密与认证:优先使用 SCRAM 认证;在需要更强身份校验时考虑 x.509;对外通信尽量启用 TLS。
  • 审计与监控:开启 审计日志 记录关键操作;结合监控告警识别异常登录与权限变更。
  • 版本与补丁:保持 MongoDBDebian 的安全更新;定期审查用户、角色与网络策略。

0