温馨提示×

MongoDB在CentOS上的权限配置指南

小樊
36
2025-11-17 19:52:46
栏目: 云计算

MongoDB 在 CentOS 上的权限配置指南

一 启用访问控制与创建管理员

  • 编辑配置文件 /etc/mongod.conf,开启授权:
    security:
      authorization: enabled
    
  • 重启服务使配置生效:
    sudo systemctl restart mongod
    
  • 连接 Shell 并创建管理员(首次在未开启授权前操作,或临时以无鉴权方式连接):
    mongo
    use admin
    db.createUser({
      user: "admin",
      pwd: "StrongPass!23",
      roles: [ { role: "userAdminAnyDatabase", db: "admin" } ]
    })
    
  • 之后使用账号连接:
    mongo -u admin -p StrongPass!23 --authenticationDatabase admin
    
  • 说明:MongoDB 默认不启用授权,需通过命令行参数 –auth 或配置文件 security.authorization 开启;启用后所有客户端必须先进行身份验证。优先在 admin 数据库创建具备用户管理能力的账户,再为业务库创建受限用户。

二 基于角色的访问控制与最小权限实践

  • 常用内置角色及适用场景:
    • read:只读指定数据库
    • readWrite:读写指定数据库
    • dbAdmin:索引/统计/配置等库级管理
    • userAdmin:用户与角色管理(库级)
    • clusterAdmin / clusterManager / clusterMonitor / hostManager:集群/主机层面管理或监控
    • readAnyDatabase / readWriteAnyDatabase / userAdminAnyDatabase / dbAdminAnyDatabase:跨库权限(谨慎授予)
    • root:超级用户(仅在 admin 数据库)
  • 示例:为业务库 sales 创建仅读写用户
    use sales
    db.createUser({
      user: "sales_rw",
      pwd: "SalesRw@2025",
      roles: [ { role: "readWrite", db: "sales" } ]
    })
    
  • 示例:创建具备跨库用户管理能力的账户(谨慎)
    use admin
    db.createUser({
      user: "useradmin",
      pwd: "UaPass!23",
      roles: [ { role: "userAdminAnyDatabase", db: "admin" } ]
    })
    
  • 细粒度控制与撤销:
    • 为用户添加/撤销角色:
      use admin
      db.grantRolesToUser("sales_rw", [ { role: "dbAdmin", db: "sales" } ])
      db.revokeRolesFromUser("sales_rw", [ { role: "dbAdmin", db: "sales" } ])
      
    • 查看角色权限细节:
      use admin
      db.runCommand({ rolesInfo: 1, showPrivileges: true, showBuiltinRoles: true })
      
    • 基于来源/目标 IP 的连接限制(示例仅允许 10.0.0.0/24):
      use admin
      db.createUser({
        user: "ops",
        pwd: "OpsPass!23",
        roles: [ { role: "clusterMonitor", db: "admin" } ],
        authenticationRestrictions: [
          { clientSource: ["10.0.0.0/24"] }
        ]
      })
      
  • 原则:遵循最小权限,优先授予具体库级角色;跨库或超级权限仅授予受控账户。

三 网络与加密访问控制

  • 绑定地址与端口:仅监听内网或管理网接口
    net:
      bindIp: 127.0.0.1,10.0.1.10
      port: 27017
    
  • 防火墙放行(firewalld):
    sudo firewall-cmd --permanent --zone=public --add-port=27017/tcp
    sudo firewall-cmd --reload
    
  • 传输加密(TLS/SSL):生成或获取证书后启用
    # 生成自签名证书(示例)
    sudo openssl req -newkey rsa:2048 -new -nodes -x509 -days 3650 \
      -keyout /etc/ssl/private/mongodb-key.pem \
      -out /etc/ssl/certs/mongodb-cert.pem
    
    # mongod.conf
    net:
      ssl:
        mode: requireSSL
        PEMKeyFile: /etc/ssl/private/mongodb-key.pem
        CAFile: /etc/ssl/certs/mongodb-cert.pem
    
  • 应用变更:
    sudo systemctl restart mongod
    
  • 建议:生产环境强制启用 TLS,并限制 bindIp 仅内网网段。

四 运维与审计要点

  • 审计日志(记录关键操作,便于合规与追溯):
    setParameter:
      auditAuthorizationSuccess: true
    systemLog:
      destination: file
      logAppend: true
      path: /var/log/mongodb/mongod.log
    
  • 备份与恢复:定期执行备份并校验可恢复性(如 mongodump/mongorestore 或企业级备份方案),保留多份异地副本。
  • 安全更新与补丁:及时升级 MongoDB 版本,修复已知漏洞。
  • 监控与告警:监控连接数、慢查询、复制延迟、磁盘 IO 等,设置异常告警。
  • SELinux:若启用 SELinux 且遇到权限问题,按需调整策略或临时设为 permissive 排查,再恢复为 enforcing 并固化策略。

五 常见问题与快速排查

  • 启用授权后无法登录:确认连接串包含 –authenticationDatabase admin,并使用具备相应角色的用户。
  • 服务无法启动:检查 /var/log/mongodb/mongod.log 中配置语法、目录权限(如 /var/lib/mongo/var/log/mongodb 归属 mongod)、端口占用与 SELinux 拒绝日志。
  • 权限不足:使用具备 userAdminuserAdminAnyDatabase 的账户检查并授予所需角色;撤销多余权限避免权限叠加导致越权。
  • 远程连不通:核对 bindIp、云安全组/本机防火墙、以及是否启用 TLS 且客户端正确配置证书。

0