Ceph 分布式存储安全实践:cephx 协议、密钥环与精细化访问权限配置
Ceph 分布式存储 认证和授权管理摘要本文全面介绍了Ceph分布式存储系统的认证和授权管理机制。首先详细讲解了Ceph集群身份验证的cephx协议工作原理、账户命名规则、密钥环文件管理以及用户身份指定方法。接着系统阐述了用户账户的创建、查看、删除、导出导入等管理操作。最后深入探讨了用户账户功能配置包括权限功能定义、预定义功能配置文件使用以及如何通过池、命名空间、对象前缀、文件路径和命令限制等方式精细控制访问范围。文章通过丰富的命令行示例和实践案例帮助读者全面掌握Ceph安全管理的核心概念和实际操作。Ceph 集群身份验证cephx 协议Ceph 存储使用 cephx 协议管理集群认证。Ceph 中用户帐户用途Ceph 守护进程之间的内部通信。客户通通过 librados 库访问集群。集群管理。账户名称Ceph 守护进程使用的帐户与守护进程名称相匹配例如 osd.1 或 mgr.ceph1并在安装期间创建。使用 librados 的客户端应用所用帐户的名称具有 client. 前缀。例如将 OpenStack 与 Ceph 集成时常常会创建专用的 client.openstack 用户帐户。对于 Ceph 对象网关安装过程会创建专用的 client.rgw.hostname 用户帐户。安装程序会创建超级用户帐户 client.admin该帐户具有访问所有内容及修改集群配置的能力。运行ceph相关命令时Ceph 默认使用 client.admin 帐户除非用户通过 --name 或 --id 选项明确指定了其他用户名。可以设置 CEPH_ARGS 环境变量来定义用户名称或用户 ID 等参数。示例# export CEPH_ARGS--id laogao应用的最终用户不在 Ceph 集群中拥有帐户。最终用户访问应用然后由应用代表他们访问 Ceph。从 Ceph 角度来看应用就是客户端。应用可能会通过其他机制提供自己的用户身份验证。Ceph 对象网关有自己的用户数据库来验证 Amazon S3 或 Swift 用户的身份Ceph 对象网关使用client.rgw.hostname 帐户来访问集群。密钥环文件Ceph 创建用户帐户时为每个用户帐户生成密钥环文件通过密钥环文件验证用户身份必须将此文件复制到客户端系统或应用服务器上。Ceph 根据 /etc/ceph/ceph.conf 配置文件中的 keyring 参数查找密钥环文件默认值为/etc/ceph/c l u s t e r . cluster.cluster.name.keyring。例如对于 client.openstack 帐户其密钥环文件为 /etc/ceph/ceph.client.openstack.keyring。密钥环文件以纯文本形式存储机密密钥因此需要使用适当的 Linux 文件权限来保护文件仅允许授权的Linux 用户访问。仅将 Ceph 用户的密钥环文件部署到需要用它进行身份验证的系统上。指定用户身份ceph、rados 和 rbd 等命令行工具通过 --id 和 --keyring 选项指定要使用的用户帐户和密钥环文件。未指定时命令会以 client.admin 用户进行身份验证。示例ceph 命令会以 client.operator3 进行身份验证并列出可用池。# ceph --id operator3 osd lspools使用 --id 选项不要添加 client. 前缀。使用 --name 选项需要 client. 前缀。如果密钥环文件存储在默认的位置则用户不需要 --keyring 选项。cephadm shell 会自动从 /etc/ceph/ 目录挂载密钥环。Cephx 协议通信原理Cephx 协议使用共享机密密钥加密通信。简要通信过程如下客户端向监控器请求会话密钥同时传递共享秘钥给监视器。监视器使用客户端的共享机密密钥加密会话密钥再将会话密钥提供给客户端。由客户端解密会话密钥然后再从监控器请求票据以便对集群守护进程进行身份验证。Cephx 使用共享密钥进行身份验证 客户端和MON群集都保存着共享秘钥副本。Cephx 协议的认证流程client 向 MON 请求会话秘钥。MON 创建会话秘钥同时将产生的会话秘钥分享给 MDS 和 OSD。MON 使用共享密钥加密会话密钥并返回给 client。client 使用共享秘钥解密数据获得会话密钥。后续通信都使用会话秘钥进行加密和解密。client 然后使用会话密钥加密会话向 MON 请求票据数据。MON 使用会话密钥解密客户端请求并创建 ticket使用会话密钥加密返回给 client。client 使用会话密钥解密数据收到ticket。client 使用ticket与MDS和OSD进行交互。由于client、MDS和OSD都拥有MON产生的秘钥因此它们之间可以验证ticket是否合法。管理用户账户查看用户账户要列出现有用户帐户可运行 ceph auth ls 或者 ceph auth list 命令。[rootceph1 ~]# ceph auth listosd.0 key:AQA8EqRojLYOOBAAVprA9Rs0Gkg4zK0dKZUUrAcaps:[mgr]allow profile osd caps:[mon]allow profile osd caps:[osd]allow *......要获取特定帐户的详细信息可使用 ceph auth get 命令。[rootceph1 ~]# ceph auth get osd.0[osd.0]keyAQA8EqRojLYOOBAAVprA9Rs0Gkg4zK0dKZUUrAcaps mgrallow profile osdcaps monallow profile osdcaps osdallow *exported keyringforosd.0要获取特定帐户的key内容可使用命令ceph auth get-keyceph auth print-keyceph auth print_key[rootceph1 ~]# ceph auth get-key osd.0AQA8EqRojLYOOBAAVprA9Rs0Gkg4zK0dKZUUrA[rootceph1 ~]# ceph auth print-key osd.0AQA8EqRojLYOOBAAVprA9Rs0Gkg4zK0dKZUUrA[rootceph1 ~]# ceph auth print_key osd.0AQA8EqRojLYOOBAAVprA9Rs0Gkg4zK0dKZUUrA创建用户账户要创建用户帐户可使用命令ceph auth addceph auth get-or-createceph auth get-or-create-key[rootceph1 ~]# ceph auth add client.app1added keyforclient.app1[rootceph1 ~]# ceph auth get-or-create client.app2[client.app2]keyAQC2vKZoZQzOCRAAWn6PfXhyMxh3/i4KTTvKQg[rootceph1 ~]# ceph auth get-or-create-key client.app3AQDFvKZoF8/iDxAAV7gMq2lnCQcLs9NAQGH5Kg还可以在创建用户账户的时候赋予用户账户权限。赋予用户账户权限稍后讲解。[rootceph1 ~]# ceph auth add client.app4 mon allow radded keyforclient.app4删除用户账户要创建用户帐户可使用命令ceph auth delceph auth rm[rootceph1 ~]# ceph auth del client.app3updated[rootceph1 ~]# ceph auth rm client.app2updated[rootceph1 ~]# ceph auth ls | grep client.appinstalled auth entries: client.app1 client.app4导出和导入用户账户要导出特定帐户的详细信息可使用命令ceph auth export -oceph auth get -o[rootceph1 ~]# ceph auth export osd.0 -o ceph.osd.0.keyring.1exportauth(keyAQA8EqRojLYOOBAAVprA9Rs0Gkg4zK0dKZUUrA)[rootceph1 ~]# cat ceph.osd.0.keyring.1[osd.0]keyAQA8EqRojLYOOBAAVprA9Rs0Gkg4zK0dKZUUrAcaps mgrallow profile osdcaps monallow profile osdcaps osdallow *[rootceph1 ~]# ceph auth get osd.0 -o ceph.osd.0.keyring.2exported keyringforosd.0[rootceph1 ~]# cat ceph.osd.0.keyring.2[osd.0]keyAQA8EqRojLYOOBAAVprA9Rs0Gkg4zK0dKZUUrAcaps mgrallow profile osdcaps monallow profile osdcaps osdallow *要导入特定帐户的详细信息可使用 ceph auth import -i 命令。# 先导出client.app4然后删除client.app4[rootceph1 ~]# ceph auth export client.app4 -o ceph.client.app4.keyringexportauth(keyAQDnvKZoY7irCRAA5ap2HQ1nQ2ADHSJRJWtczw)[rootceph1 ~]# ceph auth rm client.app4updated[rootceph1 ~]# ceph auth get client.app4Error ENOENT: failed tofindclient.app4inkeyring# 将刚才删除的client.app4导入观察现象[rootceph1 ~]# ceph auth import -i ceph.client.app4.keyringimported keyring[rootceph1 ~]# ceph auth get client.app4[client.app4]keyAQDnvKZoY7irCRAA5ap2HQ1nQ2ADHSJRJWtczwcaps monallow rexported keyringforclient.app4配置用户账户功能用户账户功能cephx 中的权限称为功能使用功能来限制或提供对池中数据、池的命名空间或一组池的访问权限。功能还允许集群中的守护进程之间互相交互。通过守护进程类型mon、osd、mgr 或 mds来授予它们。在 cephx 内对于每个守护进程类型来说都有多项功能可用allow在守护进程的访问权限之前设置。r授予读取访问权限。每一用户帐户至少应在监控器上具有读取访问权限以便能够检索 CRUSH 映射。w授予写入访问权限。客户端需要写入访问权限以在 OSD 上存储和修改对象。对于管理器 (MGR)w 授予启用或禁用模块的权限。x授予执行扩展对象类的权限。让用户能够调用类方法即读取和写入并对监控器执行身份验证操作。这使得客户端能够在对象上执行额外的操作如使用 rados lock get 设置锁定或使用 rbd list 列出 RBD 镜像。class-read 让用户能够调用类读取方法。x 的子集。通常用在 RBD 池中。class-write让用户能够调用类写入方法。x 的子集。通常用在 RBD 池中。*授予完整访问权限。授予用户对特定守护进程或池的读取、写入和执行权限并允许用户执行管理命令。要赋予用户帐户功能可运行 ceph auth caps 命令运行该命令前确保用户账户已创建。示例[rootceph1 ~]# ceph auth add client.laogaoadded keyforclient.laogao[rootceph1 ~]# ceph auth caps client.laogao mon allow r osd allow rwupdated capsforclient.laogao在创建用户账户时直接赋予权限。[rootceph1 ~]# ceph auth add client.laogao mon allow r osd allow rw用户账户功能配置文件创建用户帐户时可使用cephx 预定义的功能配置文件简化用户访问权限配置。实现守护进程之间的内部通信。Ceph 会在内部定义这些文件用户无法自行创建配置文件。cephx 预定义的部分功能配置文件如下osd授予用户作为 OSD 连接其他 OSD 或监控器的权限 以便 OSD 能够 处理复制心跳流量和状态报告。[rootceph1 ~]# ceph auth get osd.1[osd.1]keyAQA8EqRoxyM2OBAAQuVUxOvvVZL7Ydg4niwLPQcaps mgrallow profile osdcaps monallow profile osdcaps osdallow *exported keyringforosd.1bootstrap-osd授予用户引导 OSD 的权限以便他们在引导 OSD 时具有添加密钥的权限。[rootceph1 ~]# ceph auth get client.bootstrap-osd[client.bootstrap-osd]keyAQCgDqRoADsABAAP2icy5PAW2sgh8sU/An5Pwcaps monallow profile bootstrap-osdexported keyringforclient.bootstrap-osdrbd授予用户读写访问 Ceph 块设备的权限。rbd-read-only授予用户只读访问 Ceph 块设备的权限。示例[rootceph1 ~]# ceph auth add client.forrbd mon profile rbd osd profile rbdadded keyforclient.forrbd[rootceph1 ~]# ceph auth get client.forrbd[client.forrbd]keyAQDLwqZo4W28KxAA8onfLsxAxUvYt2cKqcomQcaps monprofile rbdcaps osdprofile rbdexported keyringforclient.forrbd限制访问范围池限制用户只能访问他们需要的池。示例[rootceph1 ~]# ceph auth get-or-create client.formyapp1 mon allow r osd allow rw poolmyapp[client.formyapp1]keyAQAMxqZodL12BhAA0IyPEV6SqT9cLprk1DPw如果在配置功能时不指定池则 Ceph 会将它们设置到所有现有的池。命名空间限制用户帐户仅访问从属于特定命名空间中对象。示例[rootceph1 ~]# ceph auth get-or-create client.formyapp2 mon allow r osd allow rw namespacephotos[client.formyapp2]keyAQA6xqZolcVtBxAAMGJtK4hes9LLfuwaoTnMFA池和命名空间限制用户帐户仅访问特定池中特定命名空间中对象。示例[rootceph1 ~]# ceph auth get-or-create client.formyapp3 mon allow r osd allow rw poolmyapp namespacephotos[client.formyapp3]keyAQBmxqZo9uExExAAePkx63ERHvgGmMiEJd4GEg对象名称前缀限制用户帐户仅访问特定名称前缀的对象。示例[rootceph1 ~]# ceph auth get-or-create client.formyapp4 mon allow r osd allow rw object_prefix pref[client.formyapp4]keyAQCYxqZorsmOHxAAlQMGOOuv719SN1/BLpy8w文件路径限制用户帐户仅访问 Ceph 文件系统 (CephFS) 中特定目录。示例# ceph fs authorize cephfs client.webdesigner /webcontent rwmonitor 命令限制用户帐户只能使用一组特定的命令。示例[rootceph1 ~]# ceph auth get-or-create client.operator1 mon allow r, allow command auth get-or-create, allow command auth list[client.operator1]keyAQDdxqZotZpCFRAAI1DFw519uGF/EbAF2KB6GQ实践1创建一个可执行ceph auth list的用户并使用该用户执行该命令[rootceph1 ~]# ceph auth get-or-create client.gaoqiaodong mon allow r,allow command auth list[client.gaoqiaodong]keyAQCn56Zo8hxHFxAA1GnGWHE9RRGe6TnglJIoVg[rootceph1 ~]# ceph auth get client.gaoqiaodong -o /etc/ceph/ceph.client.gaoqiaodong.keyringexported keyringforclient.gaoqiaodong[rootceph1 ~]# ceph auth ls --id gaoqiaodong#执行等同于auth list的auth ls都不行Error EACCES: access denied[rootceph1 ~]# ceph auth list --id gaoqiaodongosd.0 key:AQA8EqRojLYOOBAAVprA9Rs0Gkg4zK0dKZUUrAcaps:[mgr]allow profile osd caps:[mon]allow profile osd caps:[osd]allow *......实践2通过client管理cephclient:[rootclient ~]# mkdir /etc/ceph[rootclient ~]# cat EOF /etc/yum.repos.d/ceph.repo[Ceph]nameCephbaseurlhttps://mirrors.aliyun.com/centos-vault/8-stream/storage/x86_64/ceph-pacificenabled1gpgcheck0EOF[rootclient ~]# dnf install -y ceph-commonceph1:# 将/etc/ceph/ceph.client.admin.keyring拷贝到client[rootceph1 ~]# scp /etc/ceph/ceph.client.admin.keyring rootclient:/etc/ceph/# 将/etc/ceph.conf拷贝到cleint[rootceph1 ~]# scp /etc/ceph/ceph.conf rootclient:/etc/ceph/client:#查看 Ceph 集群整体运行状态[rootclient ~]# ceph -scluster: id: 2faf683a-7cbf-11f0-b5ba-000c29e0ad0e health: HEALTH_OK services: mon:3daemons, quorum ceph1.laogao.cloud,ceph2,ceph3(age 3h)mgr: ceph2.oetbal(active, since 3h), standbys: ceph1.laogao.cloud.zoqmbt, ceph3.npaxvt osd:9osds:9up(since 3h),9in(since 2d)data: pools:1pools,1pgs objects:0objects,0B usage:2.6GiB used,177GiB /180GiB avail pgs:1activeclean

相关新闻

SpringBoot智慧物业管理系统开发实践与优化

SpringBoot智慧物业管理系统开发实践与优化

1. 项目概述:SpringBoot智慧物业管理系统这个智慧物业管理系统本质上是一个面向现代社区的数字化运营平台。我去年为本地一个中型社区开发过类似系统,上线后物业报修响应时间从平均48小时缩短到4小时以内,业主满意度提升了35%。系统基于Sprin…

2026/10/16 19:38:23 阅读更多 →
WuminPy 一个在 Android 设备上运行 Python 脚本的工具应用

WuminPy 一个在 Android 设备上运行 Python 脚本的工具应用

WuminPy — 在 Android 上运行 Python,还能打包成独立 APK 项目简介 WuminPy 是一个在 Android 设备上运行 Python 脚本的工具应用。它不仅提供完整的 Python 3.14 运行环境,还集成了代码编辑器、终端模拟器、Git、AI 助手、无障碍自动化、插件系统&am…

2026/10/16 19:38:26 阅读更多 →
DM6467硬件设计核心:仿真控制、电源时钟与上拉电阻实战解析

DM6467硬件设计核心:仿真控制、电源时钟与上拉电阻实战解析

1. 项目概述:深入DM6467的硬件设计核心在嵌入式系统,尤其是涉及音视频编解码、通信处理这类复杂实时任务的领域,硬件平台的稳定性和可调试性直接决定了项目的成败。我接触过不少基于TI Davinci系列DMSoC(数字媒体片上系统&#xf…

2026/10/16 19:38:10 阅读更多 →

最新新闻

Linux内核Buddy分配器详解:物理页分配机制与调试实战

Linux内核Buddy分配器详解:物理页分配机制与调试实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/17 5:53:31 阅读更多 →
foobox-cn 皮肤配置:5 步搞定 foobar2000 界面美化完整指南

foobox-cn 皮肤配置:5 步搞定 foobar2000 界面美化完整指南

foobox-cn 皮肤配置:5 步搞定 foobar2000 界面美化完整指南 【免费下载链接】foobox-cn DUI 配置 for foobar2000 项目地址: https://gitcode.com/GitHub_Trending/fo/foobox-cn 装完 foobar2000,界面灰得像十年前的系统窗口,找了一圈…

2026/10/17 5:53:31 阅读更多 →
PyTorch从零手写DQN:深入experience replay与target network原理

PyTorch从零手写DQN:深入experience replay与target network原理

1. 这不是“调包即用”的PyTorch课,而是一次从零手写DQN的硬核复盘你点开这个标题,大概率不是想看“import torch, import gym,然后run一下就完事”的演示。我见过太多人卡在DQN的Q网络更新逻辑里,对着target network和experience…

2026/10/17 5:53:31 阅读更多 →
一文读懂声纹识别:原理、模型与落地实践

一文读懂声纹识别:原理、模型与落地实践

声音是每个人随身携带的生物身份证。你不需要出示任何证件,不需要刷卡,只要开口说一句话,熟悉你的人就能从电话那头立刻判断出是你——这种"听声辨人"的能力,人类天生就有,但想要让机器学会,却整…

2026/10/17 5:53:31 阅读更多 →
金融系统架构设计:服务化、幂等、风控与对账全解析

金融系统架构设计:服务化、幂等、风控与对账全解析

窗外下着雨,凌晨两点四十分,我的手机屏幕亮起,是一串告警短信——交易系统某核心接口耗时突破了两秒。两秒在大多数互联网系统里不算什么,但在金融服务场景中,两秒就意味着这条交易链路随时可能断裂,意味着…

2026/10/17 5:53:31 阅读更多 →
储能电池主动均衡方案:MP2642GR-Z与STM32F423RH硬件设计与软件实现

储能电池主动均衡方案:MP2642GR-Z与STM32F423RH硬件设计与软件实现

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/17 5:52:31 阅读更多 →

日新闻

DeepSeek选型与部署:V3/R1、Ollama、API全攻略

DeepSeek选型与部署:V3/R1、Ollama、API全攻略

简介:《DeepSeek使用方法.pdf》是一份面向DeepSeek入门及进阶用户的完整使用指南,重点围绕V3与R1两款模型的能力差异与适用场景展开,帮助读者根据任务类型与成本选择合适的模型。资源共1个PDF文件,压缩包大小约311KB,篇…

2026/10/17 0:00:25 阅读更多 →
200+Deepseek润色指令拆解:从底层原理到场景落地的完整指南

200+Deepseek润色指令拆解:从底层原理到场景落地的完整指南

简介:这是一份聚焦DeepSeek提示词优化的《200Deepseek润色指令》PDF文档,共收录两百余条可直接套用的润色指令,涵盖语法修正、风格统一、逻辑梳理、表达精炼等维度,并针对商务写作、学术论文、广告文案等场景给出差异化建议。文档…

2026/10/17 0:00:25 阅读更多 →
OpenCV轮廓法物体计数系统:轻量、可控、可落地的工业级实现

OpenCV轮廓法物体计数系统:轻量、可控、可落地的工业级实现

简介:本资源是一份基于OpenCV的本科课程设计完整报告,面向计算机视觉初学者、图像处理学习者及高校通信/信息类专业学生,解决物体智能计数与检测结果结构化记录的实际问题。项目覆盖图像预处理、轮廓检测、边界框绘制、轨迹栏交互式参数调节、…

2026/10/17 0:00:25 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/16 21:35:51 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/17 1:44:59 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/16 15:04:24 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/16 21:54:38 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/16 3:49:43 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/16 14:23:36 阅读更多 →