rbd创建特定的用户

!这是关于 Ceph 用户权限管理的非常重要且实用的内容。让我为你详细讲解:

核心概念理解

1. 为什么需要非管理员用户?

bash 复制代码
# 管理员用户(危险!)
ceph auth get-or-create client.admin mon 'allow *' osd 'allow *' mgr 'allow *'
# 权限:可以执行任何操作,包括删除整个集群!

# 专用用户(安全!)
ceph auth get-or-create client.rbd_user mon 'profile rbd' osd 'profile rbd pool=mypool'
# 权限:只能操作特定存储池的 RBD 功能

命令语法详解

基本结构

bash 复制代码
ceph auth get-or-create client.{用户名} \
    mon '权限描述' \
    osd '权限描述' \
    mgr '权限描述'

各部分权限说明

A. Monitor (mon) 权限
bash 复制代码
# 常用的 mon 权限配置
mon 'allow r'          # 只读权限
mon 'allow rw'         # 读写权限  
mon 'profile rbd'      # RBD 专用权限(推荐)
B. OSD 权限(最重要)
bash 复制代码
# 基本格式
osd 'profile {权限类型} pool={池名}'

# 权限类型选项:
profile rbd                   # RBD 完整权限
profile rbd-read-only         # RBD 只读权限
profile rbd-read-write        # RBD 读写权限
C. Manager (mgr) 权限
bash 复制代码
# RBD 相关的 manager 权限
mgr 'profile rbd'             # RBD 管理权限

实际应用示例

示例1:创建基础的 RBD 用户

bash 复制代码
# 创建只能操作 rbdpool 的 RBD 用户
ceph auth get-or-create client.rbd_user \
    mon 'profile rbd' \
    osd 'profile rbd pool=rbdpool' \
    mgr 'profile rbd'

示例2:创建多池权限用户(如文档中的例子)

bash 复制代码
# 用户 qemu 对 vms 池有读写权限,对 images 池有只读权限
ceph auth get-or-create client.qemu \
    mon 'profile rbd' \
    osd 'profile rbd pool=vms, profile rbd-read-only pool=images' \
    mgr 'profile rbd pool=images'

示例3:创建只读监控用户

bash 复制代码
# 只能查看 RBD 信息,不能修改
ceph auth get-or-create client.monitor \
    mon 'profile rbd' \
    osd 'profile rbd-read-only pool=rbdpool' \
    mgr 'profile rbd'

完整的创建和使用流程

步骤1:创建专用用户

bash 复制代码
#!/bin/bash
USER_NAME="myrbduser"
POOL_NAME="rbdpool"

echo "=== 创建 RBD 专用用户 ==="

# 创建用户并保存keyring
ceph auth get-or-create client.$USER_NAME \
    mon 'profile rbd' \
    osd 'profile rbd pool='$POOL_NAME \
    mgr 'profile rbd' > /etc/ceph/ceph.client.$USER_NAME.keyring

echo "用户创建完成"

步骤2:验证用户权限

bash 复制代码
# 使用新用户测试权限
ceph --user $USER_NAME -s                    # 应该能查看集群状态
ceph --user $USER_NAME osd pool ls           # 应该能查看存储池
rbd --user $USER_NAME ls --pool $POOL_NAME   # 应该能操作 RBD

# 测试越权操作(应该失败)
ceph --user $USER_NAME osd pool create test_pool 8 8  # 应该被拒绝

步骤3:客户端使用配置

bash 复制代码
# 在客户端机器上配置
# 将keyring文件复制到客户端
scp /etc/ceph/ceph.client.$USER_NAME.keyring client-machine:/etc/ceph/

# 在客户端使用指定用户
rbd map --pool $POOL_NAME myimage --user $USER_NAME

权限验证和测试

查看用户权限

bash 复制代码
# 查看所有用户
ceph auth ls

# 查看特定用户的权限详情
ceph auth get client.$USER_NAME

# 测试用户具体能执行哪些命令
ceph --user $USER_NAME osd lspools    # 应该成功
ceph --user $USER_NAME osd pool delete rbdpool rbdpool --yes-i-really-really-mean-it  # 应该失败

权限边界测试

bash 复制代码
#!/bin/bash
# 测试用户权限边界

USER="myrbduser"
POOL="rbdpool"

echo "=== 权限测试 ==="

# 1. 应该成功的操作
echo "测试允许的操作:"
ceph --user $USER -s >/dev/null 2>&1 && echo "✓ 查看集群状态"
rbd --user $USER ls --pool $POOL >/dev/null 2>&1 && echo "✓ 查看 RBD 镜像"

# 2. 应该失败的操作  
echo "测试禁止的操作:"
ceph --user $USER osd pool create test_pool 8 8 >/dev/null 2>&1 || echo "✓ 禁止创建存储池"
ceph --user $USER osd pool delete $POOL $POOL --yes-i-really-really-mean-it >/dev/null 2>&1 || echo "✓ 禁止删除存储池"

生产环境最佳实践

按用途创建专用用户

bash 复制代码
# 虚拟机用户(只能操作 vm_pool)
ceph auth get-or-create client.vm_user mon 'profile rbd' osd 'profile rbd pool=vm_pool' mgr 'profile rbd'

# 备份用户(只读权限)
ceph auth get-or-create client.backup mon 'profile rbd' osd 'profile rbd-read-only pool=vm_pool' mgr 'profile rbd'

# 监控用户(只读所有池)
ceph auth get-or-create client.monitor mon 'profile rbd' osd 'profile rbd-read-only' mgr 'profile rbd'

Keyring 文件管理

bash 复制代码
# 正确的文件权限设置
chmod 600 /etc/ceph/ceph.client.*.keyring
chown ceph:ceph /etc/ceph/ceph.client.*.keyring

# 密钥备份
cp /etc/ceph/ceph.client.myrbduser.keyring /backup/

故障排除

常见权限错误

bash 复制代码
# 错误:权限不足
rbd: error opening pool rbdpool: (13) Permission denied

# 解决:检查用户权限
ceph auth get client.myrbduser

# 错误:keyring文件找不到
rbd: couldn't connect to cluster: (13) Permission denied

# 解决:指定keyring文件
rbd --user myrbduser --keyring /etc/ceph/ceph.client.myrbduser.keyring ls

总结

这个机制的核心价值:

  • ✅ 安全性:避免使用管理员权限执行日常操作
  • ✅ 职责分离:不同用途使用不同用户
  • ✅ 审计跟踪:便于追踪谁执行了什么操作
  • ✅ 故障隔离:一个用户密钥泄露不会影响整个集群

对于你的 RBD 测试环境,建议创建一个专用用户而不是一直使用 admin 用户!

相关推荐
梦想很大很大1 分钟前
从运行事实到回归证据:Workrun 的 Telemetry 与 Evaluation 实践
前端·人工智能·后端
计算机魔术师7 分钟前
Meta Muse agent 接入 Shopify 的 Shop Pay 实现代理式购物
前端
沙蒿同学40 分钟前
我用 Go 搭了一条 AI Agent 流水线:从 1 张商品图到一整套淘宝详情页
前端·javascript·后端
甜到心里的蛋糕1 小时前
加解密技术详解:纯前端如何实现 AES / SM4 / RSA / 国密 SM2
前端·密码学
拖孩1 小时前
代码我能全交给 AI,流量主这 500 个访客它一个都替不了我
前端·后端·微信小程序
2601_963870212 小时前
基于SSM的特产代购系统
java·前端
paopaokaka_luck2 小时前
智慧社区综合服务小程序(人脸识别、AI问答、Echarts图形化分析)
前端·javascript·spring boot·spring·数据分析·echarts
烈风逍遥2 小时前
第七篇:提示词模板管理与 Agent 提示词编排
前端·人工智能·后端
Amos_Web2 小时前
Rspack 源码解析(十二):JavaScript Chunk 是如何被渲染出来的
前端·rust·源码
前端探险家Rick2 小时前
React Native 二级弹出面板 + 键盘适配:从踩坑到正确方案
前端