Ceph:关于 Ceph 用户认证授权管理的一些笔记

news2024/11/16 5:28:08

写在前面


  • 准备考试,整理 Ceph 相关笔记
  • 博文内容涉及, Ceph 用户管理,认证管理,权限管理 以及相关 Demo
  • 理解不足小伙伴帮忙指正

对每个人而言,真正的职责只有一个:找到自我。然后在心中坚守其一生,全心全意,永不停息。所有其它的路都是不完整的,是人的逃避方式,是对大众理想的懦弱回归,是随波逐流,是对内心的恐惧 ——赫尔曼·黑塞《德米安》


管理Ceph用户认证授权

简单介绍

用户身份验证

Ceph 使用 cephx 协议对集群中客户端、应用程序和守护进程之间的通信进行授权。cephx协议基于共享密钥

在 Ceph 的安装过程默认启用 cephx,因此集群需要对所有客户端应用程序进行用户身份验证授权,Ceph使用用户帐户有以下几个目的:

  1. 用于 Ceph 守护进程之间的内部通信,Ceph 守护进程使用的 帐户名称 与其关联的守护进程 osd.1mgr.serverc 相匹配,并且在安装过程中创建。下面是一些 Demo
[root@serverc ~]# ceph auth  ls
osd.0
        key: AQAG9ZpkY8o4MBAArdipzo8A9Yg3dy/fTcV7Yw==
        caps: [mgr] allow profile osd
        caps: [mon] allow profile osd
        caps: [osd] allow *
osd.1
        key: AQAG9ZpkX0/EOhAALauZTeHY/ojBuMGdspJh4A==
        caps: [mgr] allow profile osd
        caps: [mon] allow profile osd
        caps: [osd] allow *
......
mgr.serverd.nlmuvp
        key: AQAx9Zpk1DpCDRAAaGWCs3xKEXWkqemXGI7HAw==
        caps: [mds] allow *
        caps: [mon] profile mgr
        caps: [osd] allow *
mgr.servere.muoasq
        key: AQA89Zpki0tIABAAMUGi7GitoTqjYBtTUPmaWw==
        caps: [mds] allow *
        caps: [mon] profile mgr
        caps: [osd] allow *
..........    
  1. 对于通过 librados 库访问集群的客户机应用程序,比如 rbd,radosgw-admin 客户端等,使用 librados客户端应用程序所使用的帐户具有client.名称前缀。对于Ceph对象网关,安装会创建一个专用的client.rgw.hostname用户帐号,在 librados 之上创建定制软件的开发人员应该创建具有适当功能的专用帐户
client.rgw.realm.zone.serverc.bdiyfs
        key: AQBj9ZpkCDimLRAAnr2HTGH2wUFUsLfeag8lew==
        caps: [mgr] allow rw
        caps: [mon] allow *
        caps: [osd] allow rwx tag rgw *=*
client.rgw.realm.zone.serverd.gwezgs
        key: AQBn9Zpkajo3GxAAA8epFoWVLVlNAiuAaUqFgg==
        caps: [mgr] allow rw
        caps: [mon] allow *
        caps: [osd] allow rwx tag rgw *=*
  1. 为集群管理员 账号,管理员帐户名也具有client.前缀。在运行ceph、rados等命令时使用,安装程序创建超级用户帐户client.admin,具有允许帐户访问所有内容和修改集群配置的功能。Ceph 使用 client.admin 帐户用于运行管理命令,除非使用 --name--id 选项明确指定用户名
client.admin
        key: AQCv9Jpk9A0+GhAA5s66DQyZqVWHf3f3UioMMA==
        caps: [mds] allow *
        caps: [mgr] allow *
        caps: [mon] allow *
        caps: [osd] allow *

可以设置CEPH_ARGS环境变量来定义诸如集群名称用户ID等参数

[ceph: root@node /]# export CEPH_ARGS="--id cephuser" 

Ceph-aware 应用程序的最终用户没有Ceph集群上的帐户。相反,他们访问应用程序,然后应用程序代表他们访问Ceph。从Ceph的角度来看,应用程序就是客户端。应用程序可以通过其他机制提供自己的用户身份验证

应用程序如何提供自己的用户身份验证

在这里插入图片描述

Ceph对象网关有自己的用户数据库来认证Amazon S3和Swift用户,但使用client.rgw.hostname 用于访问集群的帐号

配置用户授权

创建新用户帐户时,授予集群权限,以授权用户的集群任务,cephx 中的权限被称为 能力,可以通过守护进程类型(mon、osd、mgr或mds)授予它们。

使用能力来根据应用程序标记限制或提供对池、池的名称空间或一组池中的数据的访问。能力还允许集群中的守护进程相互交互

用户管理

需要查询现有用户,使用 ceph auth list命令,或者 ceph auth ls

[ceph: root@node /]# ceph auth list 
... output omitted ... 
osd.0 
key: AQBW6Tha5z6OIhAAMQ7nY/4MogYecxKqQxX1sA== 
caps : [mgr] allow profile osd
caps: [mon] allow profile osd 
caps: [osd] allow * 
client.admin 
key: AQCi6Dhajw7pIRAA/ECkwyipx2/raLWjgbklyA== 
caps: [mds] allow * 
caps: [mgr] allow * 
caps: [mon] allow * 
caps: [osd] allow * 
. . . output omitted ... 

要获取特定帐户的详细信息,使用ceph auth get命令:

[ceph: root@node /]# ceph auth get client.admin 
exported keyring for client.admin 
[client . ad min] 
key = AQCi6Dhajw7pIRAA/ECkwyipx2/raLWj gbklyA== 
caps mds = "allow *" 
caps mgr = "allow *" 
caps mon = "allow *" 
caps osd = "allow *" 

可以打印密钥:

[ceph: root@node /]# ceph auth print-key client.adrnin 
AQCi6Dhajw7pIRAA/ECkwyipx2/raLWjgbklyA== 

需要导出和导入用户帐号,使用ceph auth exportceph auth import命令

[ceph: root@node /]# ceph auth \
 export client.operator1 > ~/operatorl.export 
[ceph: root@node /]# ceph auth \
 import -i ~/operator1.export 

用户创建

ceph auth get-or-create 命令创建一个新用户帐户并生成它的密钥,该命令默认将该密钥打印到stdout,因此通常会添加-o选项来将标准输出保存到密钥环文件中。

创建了对所有池具有读写权限的 app1 用户帐户,并将密钥环文件存储在 /etc/ceph/ceph.client.app1.keyring

[ceph: root@node /]# ceph auth \
 get-or-create client.app1 \
 mon 'allow r' \
 osd 'allow rw' \
 -o /etc/ceph/ceph.client.app1.keyring

创建 Ceph 用户 liruilong , 可以读写 demo_pool 存储池中的 prod namespace 中的对象

[root@serverc ~]# ceph auth get-or-create client.liruilong1 \
   mon 'allow r '  \
   osd 'allow rw pool=demo_pool namespace=prod' \
   -o /etc/ceph/ceph.client.liruilong1.keyring
[root@serverc ~]# ceph auth  get client.liruilong1
[client.liruilong1]
        key = AQBs/5pkMyVkLRAAM/IWCQf+9ThFjHzjMpOBBg==
        caps mon = "allow r "
        caps osd = "allow rw pool=demo_pool namespace=prod"
exported keyring for client.liruilong1
[root@serverc ~]#

创建 Ceph 用户 liruilong, ceph-pool 存储池执行读、写和执行扩展的对象类

[root@serverc ~]# ceph auth get-or-create client.liruilong \
   mon 'allow profile osd'  \
   osd 'allow rwx pool=ceph-pool' \ 
   -o /etc/ceph/ceph.client.liruilong.keyring

身份验证需要密匙环文件,因此必须将该文件复制到使用此新用户帐户操作的所有客户端系统

用户认证

Keyring 文件

对于身份验证,客户端配置一个 Ceph 用户名和一个包含用户安全密钥的密钥环文件,Ceph在创建每个用户帐户时为其生成密匙环文件,但是,必须将此文件复制到需要它的每个客户机系统或应用程序服务器

在这些客户机系统上,librados 使用来自 /etc/ceph/ceph.conf 的密匙环参数。Conf 配置文件以定位密钥环文件。默认值为/etc/ceph/$cluster.$name.keyring 密匙环。

例如,对于client.openstack帐户,密钥环文件/etc/ceph/ceph.client.openstack.keyring 密匙环

密钥环文件以纯文本的形式存储密钥,对文件进行相应的 Linux 文件权限保护,仅允许 Linux 授权用户访问,只在需要 Ceph 用户的密匙环文件进行身份验证的系统上部署它

[root@serverc ceph]# ll
总用量 36
-rw-------. 1 root root  63 627 10:39 ceph.client.admin.keyring
-rw-r--r--. 1 root root  68 627 11:25 ceph.client.liruilong1.keyring
-rw-r--r--. 1 root root  67 627 11:22 ceph.client.liruilong.keyring
-rw-r--r--. 1 root root 177 627 10:39 ceph.conf
-rw-r--r--. 1 root root 595 627 10:40 ceph.pub
-rw-------. 1 root root 153 627 10:40 podman-auth.json
-rw-r--r--. 1 root root  92 818 2021 rbdmap
[root@serverc ceph]#

传输密钥

cephx 协议不以纯文本的形式传输共享密钥,相反,客户机从 Monitor 请求一个会话密钥Monitor 使用客户机的共享密钥加密会话密钥,并向客户机提供会话密钥,客户机解密会话密钥并从 Monitor 请求票据,以对集群守护进程进行身份验证。这类似于 Kerberos 协议,cephx 密钥环文件类似于 Kerberos keytab文件

在 Kerberos 中,有三个主要的组件:认证服务器(AS)、票证授予服务器(TGS)和客户端。当一个用户需要访问受保护的资源时,它首先向 AS 发送请求,AS 验证用户的身份,然后生成一个票证并将其发送给 TGS。TGS 再次验证用户的身份,并为用户生成一个可用于访问特定资源的票证。最后,TGS 将票证发送给客户端,客户端使用这个票证来访问所需的服务。

配置用户身份验证

使用命令行工具,如ceph、rados和rbd,管理员可以使用 --id--keyring 选项指定用户帐户密钥环文件。如果没有指定,命令作为 client.admin 进行身份验证

在本例中,ceph 命令作为 client.operator3进行身份验证列出可用的池

[root@serverc ceph]# ceph --id app1 osd lspools
1 device_health_metrics
2 .rgw.root
3 default.rgw.log
4 default.rgw.control
5 default.rgw.meta
6 ceph-pool
[root@serverc ceph]#

在使用--id 的时候不需用 client. 的前缀,--id 会自动使用 client. 前缀,而使用--name的时候就需要使用 client. 的前缀

如果将密钥环文件存储在默认位置,则不需要--keyring选项。cephadm shell 自动从/etc/ceph/目录挂载密钥环,如果不在默认位置,需要显示指定

修改用户权限

ceph auth caps 命令修改用户帐户的能力(权限),这个例子修改了 osd 上的 appuser account 功能,只允许对 myapp 池进行读写访问:

[ceph: root@node /]# ceph auth \
 caps client.app1 \
 mon 'allow r' \
 osd 'allow rw pool=myapp' 
updated caps for client.app1 

ceph auth caps 命令覆盖现有能力,使用该命令时,必须为所有守护进程指定完整的能力集,而不仅仅是要修改的那些。

可以定义一个空字符串来删除所有功能。

[ceph: root@node /]# ceph auth caps client.app1 osd '' 
updated caps for client.app1 

Cephx能力(权限)

在 cephx 中,对于每个守护进程类型,有几个可用的能力:这里的能力,也就是权限,也做功能

  • R,授予读访问权限,每个用户帐户至少应该对监视器(mon)具有读访问权限,以便能够 检索CRUSH map
  • W,授予写访问权限,客户端需要写访问来存储和修改 osd 上的对象。对于 manager (MGRs), w 授予启用或禁用模块的权限
  • X,授予执行扩展对象类的授权,这允许客户端对对象执行额外的操作,比如用rados lock get或list列出RBD图像.class-read和class-writex的子集,你通常在 RBD 池中使用它们
  • * 授予完全访问权

创建了 formyappl 用户帐户,并赋予了从任意池中存储和检索对象的能力:

[ceph: root@node /]# ceph auth \
 get-or-create client.formyappl \
 mon 'allow r' \
 osd 'allow rw'

使用配置文件设置能力

Cephx 提供 预定义的功能配置文件,在创建用户帐户时,利用配置文件简化用户访问权限的配置

本例通过 profile rbd 定义新的 forrbd 用户帐号的访问权限,客户端应用程序可以使用该帐户使用 RADOS块设备对 Ceph存储进行基于块的访问

[ceph: root@node /]# ceph auth \
 get-or-create client.forrbd \
 mon 'profile rbd' \
 osd 'profile rbd'

rbd-read-only 配置文件的工作方式相同,但授予只读访问权限,Ceph利用其他现有的配置文件在守护进程之间进行内部通信,不能创建自己的配置文件,Ceph在内部定义它们

profile rbd-read-only

下表列出了默认安装下Ceph的权限

能力描述
allow授予允许能力
r赋予用户读访问权限,需要监视器来检索CRUSH map
w赋予用户对对象的写访问权
x使用户能够调用类方法(即读取和写入)并在监视器上执行身份验证操作
class-read赋予用户调用类读取方法的能力,x的子集
class-write赋予用户调用类写入方法的能力,x的子集
*为用户提供特定守护进程或池的读、写和执行权限,以及执行管理命令的能力
profile osd允许用户作为OSD连接到其他OSD或监视器,授予osd权限,使osd能够处理复制心跳流量和状态报告。
profile bootstrap-osd允许用户引导一个OSD,这样用户在引导一个OSD时就有了添加key的权限
profile rbd允许用户对Ceph块设备进行读写访问
profile rbd-read-only为用户提供对Ceph块设备的只读访问权限

权限限制访问

限制用户 OSD 的权限,使用户只能访问自己需要的池,即可以通过不同的方式来对池等相关对象做限制访问,类似 白名单一样。

池限制

创建了 formyapp2 用户,并限制了他们对myapp池的读写权限:

[ceph: root@node /]# ceph auth \
 get-or-create client.formyapp2 \
 mon 'allow r' \
 osd 'allow rw pool=myapp'

如果在配置功能时没有指定池,那么Ceph将在所有现有的池上设置它们,cephx机制可以通过其他方式限制对对象的访问:

对象名称前缀 限制

通过对象名称前缀,下面的示例限制对任何池中名称以pref开头的对象的访问

[ceph: root@node /]# ceph auth \
 get-or-create client.formyapp3 \
 mon 'allow r' \
 osd 'allow rw object_prefix pref'

namespace 限制

通过namespace,实现namespace来对池中的对象进行逻辑分组,然后可以将用户帐户限制为属于特定namespace的对象:

[ceph: root@node /)# ceph auth \
 get-or-create client.designer \
 mon 'allow r' \
 osd 'allow rw namespace=photos'

路径限制

通过路径,Ceph文件系统(cepphfs)利用这种方法来限制对特定目录的访问,下面的例子创建了一个新的用户帐户webdesigner,它只能访问/webcontent目录及其内容:

[ceph: root@node /]# ceph \
 fs authorize WEBFS \
 client.webdesigner \
  /webcontent rw 
[ceph: root@node /]# ceph auth get client.webdesigner 
exported keyring for client .webdesigner 
[client.webdesigner] 
key = AQBrVE9aNwoEGRAApYR6m71ECRzUlLpp4wEJkw== 
caps mds = "allow rw path=/webcontent" 
caps mon = "allow r" 
caps osd = "allow rw pool=cephfs_data"

命令限制

通过 command 命令,这种方法将管理员限制在特定的命令列表中,创建 operator1用户帐户并限制其访问两个命令的示例如下:

[ceph: root@node /]# ceph auth \
 get-or-create client.operator1 \
 mon 'allow r, allow command "auth get-or-create", allow command "auth list" '

删除用户帐号

ceph auth del 命令用于删除用户帐号

[ceph: root@node /]# ceph auth del client.app1
updated

然后可以删除相关的密钥环文件

Demo

# 在 Ceph 集群中创建两个新的客户端,分别用于编辑和获取名为 replpool1 下的文档资源
cephadm shell -- ceph auth get-or-create client.docedit mon 'allow r' osd 'allow rw pool=replpool1 namespace=docs' | tee /etc/ceph/ceph.client.docedit.keyring

cephadm shell -- ceph auth get-or-create client.docget mon 'allow r' osd 'allow r pool=replpool1 namespace=docs' | tee /etc/ceph/ceph.client.docget.keyring

# 列出 Ceph 认证密钥,并查找与 client.docedit 和 client.docget 对应的密钥
cephadm shell -- ceph auth ls | egrep -A3 'docedit|docget'

# 将客户端密钥文件同步到另一个服务器上
rsync -v /etc/ceph/ceph.client.doc*.keyring serverd:/etc/ceph/

# 在另一个服务器上挂载客户端密钥文件并使用客户端进行操作
cephadm shell --mount /etc/ceph:/etc/ceph

# 使用 client.docedit 客户端在 replpool1.docs 命名空间中写入数据
rados --id docedit -p replpool1 -N docs put adoc /etc/hosts

# 使用 client.docget 客户端从 replpool1.docs 命名空间中读取数据
rados --id docget -p replpool1 -N docs get adoc /tmp/test

# 比较两份数据文件
diff /etc/hosts /tmp/test

# 使用未授权的 client.docget 客户端试图写入数据并触发错误
rados --id docget -p replpool1 -N docs put mywritetest /etc/hosts || echo ERROR

# 更新客户端授权,将 client.docget 授予对 replpool1.docs 和 docarchive 池进行读写操作的权限
ceph auth caps client.docget mon 'allow r' osd 'allow rw pool=replpool1 namespace=docs, allow rw pool=docarchive'

# 使用已授权的 client.docget 客户端在 replpool1.docs 命名空间中写入数据
rados --id docget -p replpool1 -N docs put mywritetest /etc/hosts

# 删除客户端密钥文件和认证记录
rm /etc/ceph/ceph.client.doc*.keyring
ssh serverd rm /etc/ceph/ceph.client.doc*.keyring
cephadm shell -- ceph auth del client.docedit
cephadm shell -- ceph auth del client.docget

博文部分内容参考

© 文中涉及参考链接内容版权归原作者所有,如有侵权请告知,这是一个开源项目,如果你认可它,不要吝啬星星哦 😃


https://docs.ceph.com/en/pacific/architecture/

https://github.com/ceph/ceph

https://docs.ceph.com

CL260 授课老师课堂笔记


© 2018-2023 liruilonger@gmail.com, All rights reserved. 保持署名-非商用-相同方式共享(CC BY-NC-SA 4.0)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/706258.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

antdesginVue a-date-picker(日期时间选择器)禁用当前时间之前的时间,包含时分秒

antdesginVue a-date-picker(日期时间选择器)禁用当前时间之前的时间&#xff0c;包含时分秒 话不多说直接上效果 <a-form-item label"发生时间" name"start_time"><a-date-pickerstyle"width: 100%"allowClearv-model:value"f…

C++模板进阶知识

文章目录 前言模板进阶1.非类型模板参数2.模板的特化2.1概念2.2函数模板特化2.3类模板特化2.3.1 全特化2.3.2 偏特化2.3.3 类模板特化应用示例 3.模板的分离编译3.1 什么是分离编译3.2 模板的分离编译3.3 解决方法 4 模板总结 后记 前言 之前我们讲过模板初阶的知识&#xff0…

Linux 解决root用户被限制连接服务器

Linux 解决root用户被限制连接服务器 1. 问题描述2. 解决问题2.1 方式一&#xff08;忘记root密码的情况&#xff09;2.2 方式二&#xff08;知道root密码的情况&#xff09; 3. 其他 1. 问题描述 使用 root 用户不能链接服务器&#xff0c;密码对&#xff0c;就是连接不上&am…

uniapp:分享一个自定义侧滑样例

首先看html,分为两部分&#xff0c;主体内容部分和功能部分&#xff0c;功能部分在css中定位到主体部分的右边 <view class"section" ref"box_center" touchstart"drawStart" touchmove"drawMove($event)"touchend"drawEnd($…

晨控智能UWB室内定位:工厂智能化的新引擎

晨控智能UWB室内定位&#xff1a;工厂智能化的新引擎 工厂是一个复杂而庞大的环境&#xff0c;通常包括多个车间、设备、人员以及大量的物料和产品。需要实时、准确的定位数据来支持各项运营活动。然而&#xff0c;传统的定位技术无法满足工厂内部的高精度定位需求。而UWB室内…

u-boot的烧写及使用,u-boot-2013.01的移植 6.30

1.将Linux的执行文件放到板子上运行 嵌入式系统 1.嵌入式系统 定制2.硬件&#xff1a;核心芯片底板软件&#xff1a;驱动应用 驱动系统应用&#xff08;并发&#xff0c;网络&#xff0c;文件。。。&#xff09;3.系统&#xff1a;linux 开源 模块化 支持芯片众多 功能…

针对字符串输入之间有空格的问题相关的问题

先说结论&#xff1a; bool flag true;while (cin >> s) {if (flag) {flag false;cout << s.size();} else {cout << , << s.size();}} 即用while&#xff08;cin>>s&#xff09;来输入&#xff0c;一段单词一段单词的来做&#xff08;遇到ci…

第十一章 原理篇:transformer模型入门

说在前面的话&#xff1a; 找工作面试不是特别顺利。进了目标公司的二面&#xff0c;但是一面面试官问的一些“新技术”问题答得不太好&#xff0c;尤其是transformer相关的。这一点确实是自己的问题&#xff0c;在工作后总是面向业务学习&#xff0c;对很多算法都是处于“听说…

AD从原理图到PCB超详细教程

AD超详细教程 前言一、建立一个工程模板二、原理图1.设计原理图。2.使用AD自带库和网上开源原理图库3.画原理图库4.编译原理图 三、PCB1.确定元器件尺寸大小2.绘制PCB Library①使用元器件向导绘制元件库②原理图与PCB的映射 3.绘制PCB①更新PCB②调整元件位置③布线④漏线检查…

库操作和表操作(数据库系列2)

目录 前言&#xff1a; 1.数据库的操作 1.1显示当前的数据库 1.2创建数据库 1.3使用数据库 1.4删除数据库 2.常用数据类型 2.1数值类型 2.2字符串类型 2.3日期类型 3.表的操作 3.1查看表结构 3.2创建表 3.3查看表 3.4删除表 结束语&#xff1a; 前言&#xff1…

【硬件自动化测试--测试软件的设计及实现】如何设计并实现!

今天来聊聊关于硬件方向的自动化软件设计及实现,后面我会用实例来让我们更加深入的了解硬件自动化,首先开发工具选择的是python语言,为啥选择python语言呢,因为他的语法比较简洁,外置库非常多,反正就是对于做自动化方面很实用就对了。 1.硬件自动化测试大致分为三个阶段实…

拓展:IDEA如何使用不同版本的JDK?(改了还报错很可能因为没改全,以mac为例)

以下面的案例为例 Enhanced ‘switch’ blocks are not supported at language level ‘8’ 后面知道是因为Spring的版本和JDK的版本不对应&#xff0c;结果网上找到的解决方案都很简单。下载了一个新版本的JDK&#xff0c;然后IDEA里面Project Structure的Project标签里把SDK给…

ubuntu的aarch64版本上安装anaconda

ubuntu的aarch64版本上安装anaconda 问题背景&#xff1a;今天在基于docker安装的ubuntu18-04的版本上想要安装anaconda&#xff0c;但是出现了问题&#xff0c;发现ubuntu的版本18-04对应的是aarch64&#xff0c;因此记录安装方法。 首先下载安装包没问题但是&#xff0c;在具…

机器学习复习7

机器学习复习7 1 - 根据下图中绘制的决策树&#xff0c;如果一个动物的耳朵是软的&#xff0c;脸型是圆的&#xff0c;并且有胡须&#xff0c;那么这个模型会预测它是猫还是不是猫&#xff1f; A. 不是猫 B. 是猫 **答案&#xff1a;B ** 2 - 以一棵决策树学习来对垃圾邮件和非…

spring boot启动原理分析

springboot启动类中有两个关键的地方 1.SpringBootApplication注解 2.SpringApplication.run方法 SpringBootApplication注解分析 SpringBootApplication注解由三大注解构成&#xff0c; SpringBootConfiguration、EnableAutoConfiguration、ComponentScan。 SpringBootCon…

Java-八股文-基础本部分<一>

Java基础部分 基础篇<一> Java基础部分 基础篇<二> Java基础部分 基础篇<三> Java基础部分 异常篇 Java基础部分 集合篇 Java基础部分 线程篇 ❤️ &#x1f9e1; &#x1f49b; &#x1f49a; &#x1f499; &#x1f49c;&#x1f5a4; &#x1f90d;…

什么是网络货运平台?

一、什么是网络货运平台&#xff1f; 网络货运平台是依托互联网平台整合配置运输资源&#xff0c;以承运人身份与托运人签订运输服务合同、承担承运人责任&#xff0c;委托实际承运人完成运输服务的物流平台。它通过互联网形式实现运输过程真实、公平、公正、合法&#xff0c…

【LeetCode】239. 滑动窗口最大值

239. 滑动窗口最大值 思路 当我们遍历数组时&#xff0c;我们需要维护一个双端队列&#xff0c;用于存储滑动窗口中的元素的索引。 队列中的元素按照降序排列&#xff0c;即「队头元素是当前滑动窗口中的最大值」。 具体的步骤如下&#xff1a; 创建一个双端队列 window&#…

Spring Boot中的Elasticsearch自动配置:原理与使用

Spring Boot中的Elasticsearch自动配置&#xff1a;原理与使用 简介 在Spring Boot中&#xff0c;Elasticsearch是非常流行的搜索引擎。为了方便开发人员使用Elasticsearch&#xff0c;Spring Boot提供了Elasticsearch自动配置功能。本文将介绍Elasticsearch自动配置的原理与…

burpsuite踩坑(一)

今天在使用burpsuite的时候&#xff0c;能抓到https或者http的包。 但是repeater模块无法使用&#xff0c;而且放行包之后&#xff0c;会出现提示。 搞了半天&#xff0c;以为是证书的问题&#xff0c;或者是burp汉化版的原因&#xff0c;还把汉化版的burp给删除了。 发现都…