Ceph认证的三层含义(上)

一颗小胡椒2022-07-19 09:23:48

1. 背景

Ceph是分布式存储系统,允许多用户同时访问,为了保证访问的安全性,需要提供一套认证系统来对用户进行认证。Ceph采用了Kerberos认证设计思想。

2. Kerberos

Kerberos是一种计算机网络认证协议,它允许某实体在非安全网络环境下通信,向另一个实体以一种安全的方式证明自己的身份。

这个协议主要分为三部分

  • Key Distribution Center(KDC):认证中心以及分发ticket
  • Client:客户端
  • Service:客户端想要访问的服务

理论很复杂,简单的讲就是

  • Client带着认证信息去KDC进行认证
  • 认证通过,从ticket server获取service X服务的ticket-x
  • Client使用ticket-x去访问service X服务

tips: Kerberos用户认证的一个核心就是客户端用一个secret加密,服务端能解密出来就算认证成功。

3. 从Kerberos到Ceph

Ceph认证就是实现了Kerberos,首先把Ceph组件也进行三种组件分类

  • KDC:monitor
  • Client:radosclient、ceph-fuse
  • Service:MDS、OSD、MGR

大体流程跟上面Kerberos一样,多了service服务到monitor获取service secret,这个是从Kerberos依葫芦画瓢想到的,其实Ceph里面“Client”是一个范指,主要包含monclient模块的都可以称为“client”,比如OSD、MDS、MGR都包含monclient,从这个角度讲它们也属于“Client”,比如以OSD作为“Client”如下示意

下面来细说一下Ceph

4. Ceph的实现

为了方便理解我把Ceph认证分成三层含义(非kerberos原理):

(1) 组件和monitor的连接认证
(2) 用户认证
(3) 除monitor之外其他组件的连接认证

4.1 组件和monitor之间的连接认证

Ceph在tcp三次握手之上又加了一层自定义的网络连接协议,主要用来确认一些信息,比如banner,客户端的ip和端口,auth认证等

只有auth认证通过之后,Ceph连接才算建立完成,后面就可以用于消息发送。然而不同组件之间连接的auth认证行为不一样。这里先讨论组件和monitor之间的连接认证。client和其他组件跟monitor通信都是无条件通过。

我们可能好奇为什么这边会无条件认证,按理认证不应该进行用户身份的认证吗,而需要用户认证则需要在建立好的Ceph连接上发送MAuth消息,而现在Ceph连接都还没建立,根本无从认证,如果这里不设置无条件通过,就会出现鸡和蛋问题。

4.2 用户认证

用户认证是包含monclient模块的“Client”跟mon建立连接之后通过authenticate发送MAuth消息来认证用户

从kerberos可以看出用户认证的时候分为两个阶段发了两次请求,Ceph也确实是这么实现的。

第一阶段:认证用户
第二阶段:获取service服务的ticket

4.2.1 第一阶段—认证用户

说到认证用户,第一个想到的就是keyring,先简单聊一下keyring

4.2.1.1 访问钥匙

Ceph在使用中,如果我们开启了Cephx会有很多keyring,一个keyring类似如下:

client.admin
    key: AQBPWeZhTnH6FhAAd6hoo1oMkw3/G4teWXwKAA==
    caps: [mds] allow *
    caps: [mgr] allow *
    caps: [mon] allow *
    caps: [osd] allow *

这是一个admin用户的keyring,可以看到keyring内容主要包含两类: 一类是key,一类是caps,其中的key是一个secret,主要用来加密,caps是用户对于各个服务的访问权限。来一个灵魂四拷问:when、where、who、how

  • 何时生成(when)

当我们运行如下类似命令的时候生成

# ceph auth add xxx xxx
  • 存在哪里(where)

ceph auth命令最后发给mon,存在了mon的rocksdb中。

  • 谁会使用(who)

这个keyring谁会使用,主要大致有以下两类:

客户端:radosclient、ceph-fuse
组件服务:osd、mgr、mds

这些都会包含一个monclient

  • 怎么使用(how)

在客户端或者组件服务启动时,通过包含的monclient进行认证。

Kerberos认证的核心就是客户端使用秘钥对消息进行加密,如果KDC能通过秘钥进行解密成功就认证通过。Ceph有点不一样,Ceph使用keyring中的key以及其他的东西(challenge)在monclient和monitor分别算出一个key,进行匹配是不是相同,相同则认证通过,反正。

4.2.1.2 计算匹配

匹配通过就算认证用户ok

4.2.2 第二阶段—获取service Ticket

在发送client challenge请求的时候,也会把客户端想要访问组件以bit的方式(want_key)传过来,比特位代表如下

#define CEPH_ENTITY_TYPE_MON    0x01
#define CEPH_ENTITY_TYPE_MDS    0x02
#define CEPH_ENTITY_TYPE_OSD    0x04
#define CEPH_ENTITY_TYPE_CLIENT 0x08
#define CEPH_ENTITY_TYPE_MGR    0x10
#define CEPH_ENTITY_TYPE_AUTH   0x20

比如客户端会和MDS和OSD访问,则需要设置want_keys为6

4.3 除monitor之外其他组件的连接认证

有了service ticket,除montior之外其他组件就可以进行连接认证,如下


这里从monitor除了获取service ticket,还返回了session key,这个session key在下面验证的时候会用到。

4.3.1 验证方法

这里的连接认证方法和用户认证不一样,不是通过计算key来比对,而是通过加密解密来完成,大致思路就是monitor发送给客户端的service ticket是用一个service_secret进行了加密,而客户端会在加上一些其他的信息(比如nonce)通过session key加密然后和ticket一起发送给连接的另一端。

认证的大体思路是这样,那这里recv端的service secret是哪里来的?

4.3.2 service secret

service secret是用来加密service ticket的,monitor发送给客户端的ticket就已经加密好,所以service secret是monitor那边生成的,service服务组件获取service secret是在所包含的monclient模块用户认证完成之后从monitor取回属于自己service服务的service secret。

ceph
本作品采用《CC 协议》,转载必须注明作者和本文链接
Rook 将存储软件转变成自我管理、自我扩展和自我修复的存储服务,通过自动化部署、启动、配置、供应、扩展、升级、迁移、灾难恢复、监控和资源管理来实现。Rook 利用扩展功能将其深度集成到云原生环境中,并为调度、生命周期管理、资源管理、安全性、监控等提供了无缝的体验。
这表示一个service服务所拥有的的service secret列表,每个service服务都会有这样一个列表。
Ceph采用了Kerberos认证设计思想。
每个存储池的目标比例除非明确指出,否则默认为 0。一栏中检查存储池的目标比例。可以对一个已存在的存储池设置target_size_ratio。标志来打开或关闭所有的存储池的 autoscaler。默认情况下,除非另有规定,否则偏置值应为1.0。指定存储池允许的最小 pg 数量。使用 pg_num_max 设置存储池最大的 PG 数量指定一个存储池的最大 PG 数量是可能的。
据Techspot报道,一名澳大利亚男子因涉嫌创建并向全球数以万计的网络犯罪分子销售黑客工具而被捕。24岁的Jacob Wayne John Keen因涉嫌向来自128个不同国家的网络犯罪分子、家庭暴力实施者等人出售名为Imminent Monitor的木马病毒而被捕。这次逮捕是在2017年启动的全球刺探行动之后进行的。Keen最近的逮捕是基于世界各地的参与执法机构向AFP提供的额外证据。
据Techspot报道,一名澳大利亚男子因涉嫌创建并向全球数以万计的网络犯罪分子销售黑客工具而被捕。这名24岁的黑客被指控创建并销售一种远程访问木马,旨在窃取个人信息并监视毫无戒心的目标。该病毒创造者通过销售该工具赚取了30多万美元,其中大部分似乎从其15岁起就被用在了外卖和快递项目上。
一名 24 岁的澳大利亚国民因涉嫌制造和销售供家庭暴力犯罪者和儿童性犯罪者使用的间谍软件而受到指控。 目前居住在墨尔本弗兰克斯顿的雅各布·韦恩·约翰·基恩据说在 15 岁时创建了远程访问木马 (RAT),同时还从 2013 年到2019 年作为欧洲刑警组织领导的协调行动的一部分管理该工具,直到2019 年关闭。锻炼。
最近,多个黑客开始使用Ezuri内存加载器,将恶意软件直接执行到受害者的内存中。根据AT&T的Alien Labs的研究人员的说法,恶意软件作者正在为其恶意代码选择Ezuri内存加载器。专家指出,尽管这种技术在Windows恶意软件中很常见,但在Linux攻击中却很少。
根据澳大利亚联邦警察发布的一份声明,其中包括家庭暴力犯罪者和其他罪犯。澳大利亚联邦警察周六表示,已确认有201名澳大利亚人购买了该间谍软件。声明说,对可能使用该设备的潜在嫌疑人的调查正在进行中。今年7月早些时候,基恩被指控六项罪名,并将于下月在布里斯班地方法院出庭,他42岁的母亲也被指控涉嫌从事犯罪所得交易。
一颗小胡椒
暂无描述