温馨提示×

MongoDB配置中Linux权限如何设置

小樊
35
2025-11-28 19:33:34
栏目: 云计算

MongoDB在Linux上的权限设置指南

一 系统层权限设置

  • 确认MongoDB运行用户与数据目录权限:多数发行版中,MongoDB以mongod用户运行,数据默认目录为**/var/lib/mongodb**(部分版本为**/var/lib/mongo**)。目录需对该用户可读写,且父目录不可过于开放。示例:
    • 查看与设置数据目录属主属组:
      • sudo chown -R mongod:mongod /var/lib/mongodb
      • 或(旧包/某些系统):sudo chown -R mongod:mongod /var/lib/mongo
    • 设置目录权限(示例为755,确保仅属主可写):
      • sudo chmod 755 /var/lib/mongodb
  • 日志目录权限:确保日志目录(如**/var/log/mongodb**)对mongod可写:
    • sudo chown -R mongod:mongod /var/log/mongodb
    • sudo chmod 755 /var/log/mongodb
  • 如自定义数据目录(例如**/data/db**),同样需要:
    • sudo mkdir -p /data/db
    • sudo chown -R mongod:mongod /data/db
    • 并在配置文件中更新storage.dbPath,然后重启服务。

二 MongoDB身份认证与数据库用户权限

  • 启用访问控制:编辑配置文件**/etc/mongod.conf**,在security段开启授权:
    • security:
      • authorization: enabled
    • 重启使配置生效:sudo systemctl restart mongod
  • 创建管理员账户(在admin库):
    • use admin
    • db.createUser({ user: “adminUser”, pwd: “your_password”, roles: [“root”] })
  • 创建业务库用户(在目标业务库,如myDatabase):
    • use myDatabase
    • db.createUser({ user: “myUser”, pwd: “your_password”, roles: [{ role: “readWrite”, db: “myDatabase” }] })
  • 连接与认证示例:
    • 业务库用户:mongo -u myUser -p your_password --authenticationDatabase myDatabase
    • 管理员:mongo -u adminUser -p your_password --authenticationDatabase admin
  • 常用内置角色(按需分配):
    • 数据库级:readreadWritedbAdmindbOwneruserAdmin
    • 集群级:clusterAdmin
    • 全局级:readAnyDatabasereadWriteAnyDatabaseuserAdminAnyDatabasedbAdminAnyDatabase
    • 超级用户:root

三 常见场景与命令清单

  • 更改数据目录并修复权限(示例迁至**/new/path/to/mongo**):
    • sudo systemctl stop mongod
    • sudo cp -R /var/lib/mongo /var/lib/mongo_backup
    • sudo mkdir -p /new/path/to/mongo
    • sudo chown -R mongodb:mongodb /new/path/to/mongo
    • 在/etc/mongod.conf中设置:storage.dbPath: /new/path/to/mongo
    • sudo systemctl start mongod
  • CentOS/RHEL上创建管理员并启用认证:
    • 创建数据目录:sudo mkdir -p /data/db && sudo chown -R mongod:mongod /data/db
    • 启动服务:sudo systemctl start mongod
    • 在Mongo Shell中创建管理员(admin库):
      • db.createUser({ user: “<your_username>”, pwd: “<your_password>”, roles: [“userAdminAnyDatabase”, “readWriteAnyDatabase”] })
    • 编辑/etc/mongod.conf:security.authorization: enabled
    • 重启:sudo systemctl restart mongod
    • 登录:mongo -u <your_username> -p <your_password> --authenticationDatabase admin

四 安全与排错要点

  • 最小权限原则:业务账号仅授予所需角色(如仅readWrite到目标库),避免使用rootuserAdminAnyDatabase在生产业务侧直接使用。
  • 认证库要正确:创建用户时所在的库即为该用户的认证库;登录时通过–authenticationDatabase指定(管理员用admin,业务用户用其业务库)。
  • 目录与属主检查:权限错误是常见故障源。确认数据目录与日志目录属主为mongod(或mongodb,视发行版而定),且权限不过度开放(如755),避免因父目录权限过宽导致访问被拒。
  • 优雅启停:变更配置或数据目录前先停止服务(sudo systemctl stop mongod),变更后再启动;避免直接kill进程导致锁文件残留等问题。

0