LWN:在内核里支持PGP密钥和签名!

六、大模型(LLMs)参数高效微调(PEFT) 面 链接: https://pan.baidu.com/s/1TYqdCK53tDFEYGtAvpnTbA 提取码: 6a9s。考核中的核心考点,并针对这些考点提供了详尽的解答。通过网盘分享的文件:06大模型(LLMs)参数高效微调(PEFT) 面。)有哪些方法,能不能稍微介绍一下它们间?这种微调方法和全参数比起来有什么劣势吗?能不能总结一下各种参数高效微调方法?高效参数微调,如何进行存储?多种不同的高效微调方法对比。模型显存占用的部分有哪些?微调方法为啥能加速训练?微调计算可训练参数的比例。 阅读详情

关注了就能看到更多这么棒的文章哦~

Supporting PGP keys and signatures in the kernel

By Jake Edge
January 25, 2022
DeepL assisted translation
https://lwn.net/Articles/882426/

几周前,我们介绍了为 Fedora 添加完整性管理(integrity-management)功能的建议。其中的一个主要卖点是,可以把这个完整性检查(integrity check)完全基于 Fedora 使用的 RPM 包文件中内置的 PGP 签名来完成。但是内核需要能够对 PGP 签名进行验签,才能让 Fedora 的这个功能起效果。有人提议在内核中增加这个功能,但内核开发社区的一些人似乎对于在内核里面支持 PGP 不怎么感兴趣。

Roberto Sassu 提议在 David Howells 的早期工作基础之上来增加对 PGP 密钥和签名的支持。Sassu 还提议在内核中加入 Digest Lists Integrity Module (DIGLIM),他是 Fedora 中负责在发行版里支持 DIGLIM 的提案人。该提案最初是针对 Fedora 36 的,但在 DIGLIM 和 PGP 支持进入 kernel mainline 之前,这个功能不可能被某个 Fedora 版本采用。

Parser

为了处理密钥和签名,内核就需要理解 PGP 格式,所以 Sassu 建议在内核中加入一个解析器。不出意料 这引起了很多抱怨。Maciej S. Szmigiero 想知道是否有更好的方法:

PGP 密钥不就是带有额外元数据(metadata)的 RSA/ECC/EdDSA 密钥吗?难道它们不能由用户空间来把(复杂的)PGP 格式解开,然后采用类似于某些 SSH 认证的方式来把原始数据加载到内核中吗?

这将使我们不必在内核中添加复杂的 parser(众所周知这是不少 bug 的来源)[…] 。

Sassu 说 Howells 已经实现了一个 parser,遵循 PGP 数据的 RFC。但是将其进一步解开成另一种格式,还仍然需要一个 parser。此外,那段代码已经用几种不同的方式进行过测试:

我用一个临时的 fault injector 来对该实现进行了深入的测试,以了解该代码是否能够正确处理错误情况。我还开发了一个 fuzzer(模糊器),在数据被内核读取之前来破坏这些数据。最后,我检查了是否有内存泄漏的问题。当然我同意,还是有可能有漏网的 bug。

Sassu 同时说,Szmigiero 称为 "内核内 PGP 信任网(in-kernel PGP Web of Trust)" 的功能将限制在小范围内使用。内核里的某些 keyring,比如 Integrity Measurement Architecture(IMA)keyring,要求被添加到其中的各个密钥都要由内核 keyring 上的另一个 key 来担保(vouched for)。Sassu 在 patch set 中实现的一部分功能就是来支持检查密钥中的 PGP 签名,如果检查失败则拒绝该密钥。

但是 Szmigiero 仍然对内核中的 parser 感到担忧:

用户空间中的 parser 比起内核中的 parser 要更好,因为万一某个地方出现了 bug 的话后果会轻得多。而经验表明,parser 特别容易出现错误。用户空间的实现也可以是控制为严格管理的 sandbox 来获得更高的安全性。

他还指出可以使用现有的 OpenPGP 的用户空间 parser,但 Sassu 并不认为这条道路会更加轻松:

然而,在我看来,定义一种新的格式来上传 RSA 密钥及签名来避免 PGP 的复杂性,这种做法的风险也并不小。而且,这似乎并不比已经在内核中的 PKCS#7 更复杂。

[…] 我的另一个担心是,使用 OpenPGP 库的这种方法仍然需要 Linux 发行商将他们所拥有的源数据转换为另一种格式。他们必须对这个转换动作进行认证,哪怕是在用户空间完成的也一样。比起对一个在用户空间中运行的包含了很多其他功能的库进行验证,也许把原始数据以及用来在内核中最低限度地验证处理 PGP 密钥和签名的功能放在内核里会更容易,。

PGP deprecated?

Jason A. Donenfeld 对在内核中添加 PGP 支持有一个更根本的担忧:"加密工程界(crypto engineering world)的普遍共识是,PGP 应该被淘汰。" 他引用了 2019 年的一篇博文,作为 PGP(以及实现它的应用程序,如 GnuPG)的广泛问题的一个例子。他建议使用基于 Ed25519 的签名机制,在用户空间使用 Minisign 或 signify 之类的东西,并在内核中只使用最小的代码;他说,这可以确保 "只有很少的可用功能会被破坏"。

但是 James Bottomley 不同意。虽然有很多人反对 PGP,但是 "实际上没有人能够想出一个更好用的替代品"。此外,Ed25519 不被可信平台模块(TPM,Trusted Platform Module)支持,而且可能永远不会支持,因为当 TPM 标准组织增加新的算法时,它可能会跳过 Ed25519 而直接选择更强大的算法。他说,加密社区经常想要最小化解决方案,但这些解决方案 "只有相对比较小的使用场景,没有未来的用例来证明(no future proofing)",而更复杂的可扩展解决方案则被批评为 "是一把'瑞士军刀'"。

Antony Vennard 认为这是一个错误的看待问题的方式。内核中已经有对 PKCS #7 的支持了,增加 PGP 的支持会让事情变得更加复杂:

我们已经有一个可扩展的系统,在内核中的实现已经很复杂了。这个 patch 希望能增加另一个来实现同样目的的系统,而不是利用现有代码的用户空间解决方案。我认为后者更可取,也更安全。

Sassu 回答说,要使用替代机制仍有障碍。无论采用何种密钥格式,仍需要某种 parser 以及验证密钥签名的方法,这些都需要在内核中出现才行。他已经考虑了这些问题,并相信他的方法达到了正确的平衡:

经过几次迭代试图从 patch set 中删除不那么重要的内容,我得出的结论是,能同时拥有密钥和签名的逻辑就是最好的折衷方案了。诚然,这意味着要为内核做更多的维护工作,但这能确保与当前生态系统的互操作性达到最佳。

我认为代码并没有复杂到无法进行 review 的程度。

虽然 PGP 格式有很多不同的数据包类型(packet types),但内核内的 parser "只需要解析 key、user ID 和 signature packet 以及 subpacket",他说。分发系统生态方面的问题是他对其他其他解决方案一个担忧;"我认为强迫所有 Linux 分发系统都这样做似乎并不现实"。但是如果一个最小化的 PGP parser 可以被审核通过,那么发行版的那些使用场景就可以得到支持:

解析 PGP 格式里的数据似乎是唯一的障碍。一旦我们确信可以正确地解析这少数几种类型的 packet,那么剩下的就只是要重复使用已经存在的机制就够了。而且这样可以让人们采用安全功能的时候感到更加容易。

他在给 Donenfeld 的回复中进一步阐述了发行版这边的困难。要切换到新的软件包签名机制(比如像 Donenfeld 建议的那样,采用基于 Ed25519 的机制)对发行版来说是一个重大转变,这可能需要数年才能完成:

更具体地说,第一个任务就是修改 RPM 的签名方式(以及它们的验证方式)。第二项任务是换一种方式来认证公钥。最后,Linux 发行商将不得不改变他们的构建功能的基础设施来使用新的认证密钥,提供一个新版本的 rpm 软件包管理器可以根据新的密钥作为输入来产生一个不同类型的签名,并将其嵌入到 RPM 头。

[……]这套 patch 的目的是能尽快地提供一些 security 功能,大大减轻 Linux 发行商管理这些安全功能的负担。

Donenfeld 对发行版这边要做的工作表示同情,但他指出,这最终还是出于短期思维和长期思维的对比:与其投入大量工作过渡到更好的方案(这里需要 "评估 最好的方案 是什么"),不如继续支持一个有缺陷的(但可以用的)系统,这是一条更容易的前进道路。他想知道是不是应该停止这种想法,至少对于 PGP 来说:

我对长期思考与短期思考没有什么技术上的发言权, 但我觉得 PGP 就是这样一个例子, 人们知道它的缺陷已经有几十年了, 但由于人们继续采用短期的解决方案, 生态系统不断扩展, 一个接一个, 现在已经来到了内核的门口了。也许在某个时候,需要有人停下脚步说,"短期方案之路到此为止",可能才会逐渐有动力去寻找长期的解决方案,例如可行的 PGP 的替代品?这只是我的想法。

虽然 Ed25519 可能很有吸引力, Konstantin Ryabitsev 说, 但是它的密钥管理还有待改进:

我觉得 Ed25519 的私钥管理非常简陋。多数情况下它只是保存在磁盘的某个地方,通常也没有用任何 passphrase 加密。

尽管 GnuPG 有很多遗留问题,但至少在 GnuPG 2.3 中通过 OpenPGP smartcards 或 TPM integration 功能很好地支持了 hardware off-load (硬件处理),而我们对 ed25519 最好的支持就是 minisign 中实现的 passphrase 保护(甚至这个功能也是非常简陋的,如果你需要对 10 件东西签名,就需要 10 次输入 passphrase,因为没有任何形式的 passphrase agent 代理)。

他说,把对 FIDO2 的支持整合到 OpenSSH 中是 "我最近看到的 PKI(公钥基础设施,public-key infrastructure)签名方面最有希望的非 PGP 的方向"。多年来,密钥管理一直是许多公钥签名方案的一个已知弱点,因此他 "担心这将导致整体安全性算下来其实损失比收益大"。

目前还不太清楚这个提议最终结果会是怎样。内核显然是存储密钥的 "可靠" 位置,而验证用这些密钥制作的签名在逻辑上就是这个功能的延伸。但是,对于 PGP 以及再添加一个复杂格式的内核 parser 这两个担忧非常难以克服。

全文完
LWN 文章遵循 CC BY-SA 4.0 许可协议。

欢迎分享、转载及基于现有协议再创作~

长按下面二维码关注,关注 LWN 深度文章以及开源社区的各种新近言论~

4b7b34eade419db2461a6af03f8ec7a1.png

DB文件在编程中的作用及示例代码 通过使用DB文件,我们可以实现数据的持久化存储,并能够高效地进行数据的增删改查操作。在本文中,我们以SQLite数据库为例,演示了如何使用Python语言创建和操作DB文件的示例代码。在实际的编程中,我们可以根据具体的需求和使用的数据库系统来进行更复杂的操作和优化。通过使用DB文件,我们可以实现数据的持久化存储,确保数据在程序关闭后也能被保留,并且能够高效地进行数据检索和更新。在本文中,我们将探讨DB文件的作用,并提供一些示例代码展示如何在编程中使用DB文件。上述代码中,我们使用SQLite提供的。 阅读详情

相关推荐

新手必看|HDevelop核心算子快速上手,为C#移植打基础

在上一篇文章中,我们完成了C#+HALCON的开发环境搭建。但在实际工业开发中,绝不会直接在C#中编写视觉算法HDevelop可视化调试算法 → 验证效果 → 导出C#代码 → 集成到上位机。HDevelop是HALCON专属的算法调试工具,支持实时预览图像、参数动态调节、零编译运行,是新手入门和工业算法调试的核心工具。本文聚焦工业场景高频使用的核心算子,从基础操作到实战案例,手把手教你使用HDevelop;同时重点讲解算法导出C#的规范,让你调试完成的算法,能无缝移植到WinForm上位机中。

这里只有干货:从 Modbus 通信到 MES 对接,从 YOLO 训练到工控机部署,带你搞定工业软件开发全流程。 777

linux: 管理GPG密钥的实用指南

自动生成GPG密钥对。列出当前系统中的GPG密钥。导出生成的GPG公钥和私钥。自动删除生成的GPG密钥。本文介绍了如何通过Bash脚本自动化GPG密钥的生成、导出和删除操作。通过这种方式,开发者和系统管理员可以有效地简化密钥管理流程,提升工作效率。如果你需要频繁生成和管理GPG密钥,推荐将此脚本纳入你的工具集。

十年运维开发经验的王义杰在此分享自己的知识和经验 2473

华为OD机试2025C卷 - CPU调度策略 (C++ & Python & JAVA & JS & GO)

华为OD机试 2025C卷 CPU调度策略,提供Java、C++、Python、Go、JavaScript源码实现,并提供完整思路讲解

qq_45776114的博客 1295

LWN: OpenWrt和自签名证书!

关注了就能看到更多这么棒的文章哦~OpenWrt and self-signed certificatesBy Jake EdgeNovember 18, 2020DeepL assis...

Linux News搬运工 4019

【ArcPy】用Python批量处理大规模地理数据的几何校正

在许多GIS应用中,尤其是在大规模地理数据处理时,几何校正(Geometric Correction)是一个至关重要的任务。它确保了不同来源的地理数据能够正确地对齐和匹配,从而为后续分析提供准确的基础。几何校正的常见应用包括遥感影像的地理配准、矢量数据的投影转换等。几何校正通常包括坐标转换、重采样等步骤。以下示例展示了如何使用arcpy的工具进行几何校正。"""实施几何校正:param input_layer: 输入待校正数据层。

陈书予 995

SPI 总线信号完整性与时序一致性测试

SPI总线测试的核心目标是验证其电气与时序行为是否满足芯片规格要求,确保通信可靠性

硬核科技 328

在Linux上使用PGP签名验证文件完整性

文件在下载及存储过程中可能由于传输错误、硬件故障、文件系统错误等网络、硬件和软件方面的原因导致文件损坏,也可能在传输过程中受到攻击(如“中间人攻击”)导致下载的文件被篡改或者下载到了其它非原始文件。所以,在使用一个文件之前(如安装一个软件或操作系统)最好先对文件进行完整性(或者说“原始性”)的检验。常用的文件校验方法有SHA、MD5、CRC和PGP签名等。本文主要阐述一下在Linux上使用P...

考研数学课程、高等数学课程、线性代数课程、考研数一真题解析、考研数二真题解析、考研数三真题解析、考研数学讲义、考研数学资料、考研数学学习规划、考研数学辅导、考研数学习题、考研数学提分、荒原之梦考研数学 1万+

【系统分析师】写作框架:软件设计模式及其应用

本文围绕"软件设计模式及其应用"展开论述。首先介绍了近三年参与的某软件开发项目背景及个人承担的系统设计工作。其次系统阐述了设计模式的三大分类:创建型(如工厂方法、单例模式)、结构型(如适配器、装饰器模式)和行为型(如观察者、策略模式),重点分析了各类模式的特点和典型应用场景。最后结合项目实践,详细说明了采用的三种设计模式的具体实施过程及效果,包括提高代码复用性、降低耦合度等优势。文章还总结了项目经验,指出存在的不足及改进方向,强调合理运用设计模式对构建高质量软件系统的重要性。全文通过理论

数据知道的博客 5060

Linux下使用GPG(GnuPG)加密及解密文件

文章目录Linux下使用GPG(GnuPG)加密及解密文件1. 简介2.环境及版本3.GPG公钥生成4.查看公钥5.查看私钥6.导出公钥7.导出私钥8.加密文件本机加密其他电脑加密9.解密文件本机解密其他电脑解密10.卸载密钥对 Linux下使用GPG(GnuPG)加密及解密文件 1. 简介 GNU Privacy Guard(GnuPG或GPG)是一种加密软件,它是PGP加密软件的满足GPL的...

懒人 1万+

华为OD机考真题 新系统 - 数列求值(Java/Py/C/C++/Js/Go)

华为OD机试真题 新系统【数列求值】,提供C语言、Java、C++、Python、Go、JavaScript源码实现,并提供完整思路讲解,以及在线OJ模拟做题。华为OD机试真题 【数列求值】多语言题解。

qq_45776114的博客 661

大数据ZooKeeper(一):ZooKeeper基本知识

Zookeeper是一个分布式协调服务的开源框架。主要用来解决分布式集群中应用系统的一致性问题。ZooKeeper本质上是一个。

Lansonli(蓝深李)的博客 3148

【翻译】 改进内核工作流程的下一步措施

LWN.net 需要您!没有订阅者,《生活周刊》将不复存在。 请考虑注册订阅,帮助 LWN 继续出版。 作者:Jonathan Corbet2019年11月1日OSS EU 内核项目基于电子邮件的开发流程已经非常成熟,并拥有一些强有力的支持者,但它也正在显露老态。 在2019 年内核维护者峰会上,内核的流程显然亟需更新,维护者们也开始意识到这一点。 不过,...

超级码力 3073

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

Spring AI + GPT-5.5 + Ollama 配置教程:Base URL、超时与流式调用

由于不同 Spring AI、Spring Boot 小版本之间仍可能存在差异,创建项目时应检查 Spring Initializr、Spring AI BOM 和官方兼容矩阵,不要直接复制旧教程中的 Starter 名称和版本号。多人项目最好隔离不同客户端,并在脱敏前提下记录最终 URL、状态码、请求耗时、请求 ID 和模型 ID。Spring AI 接入模型 API,至少要同时确认 Starter、Base URL、请求路径、API Key、模型 ID、连接超时、读取超时和流式客户端这 8 项。

2601_95893075的博客 221

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

V8 机制、手写核心函数与 TypeScript 类型体操

或固定初始化(如数组先定长、对象先给全字段)保持类型与形状稳定;这些都比"换框架"更基础。只能处理纯数据(丢函数、Date、RegExp、循环引用报错)。生产级深拷贝要处理:原始值短路、循环引用、V8(Chrome / Node 的 JS 引擎)不是"解释一行跑一行"那么简单,它用。图:V8 执行流程——解释执行 + 热点优化,优化失败会 Deopt 回退。JS 内存自动管理,但"自动"不等于"不会漏"。是"固定间隔最多执行一次"。手写 Promise 是"懂异步"的试金石。是"停下后才执行最后一次",

qq_38468358的博客 328

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

【JVM】对象内存布局

HotSpot JVM 中,Java 对象内存布局由对象头(12字节,含Mark Word与压缩Klass Pointer)、实例数据及对齐填充构成,总大小为8字节倍数。对象头支持锁状态动态复用,指针压缩使引用仅4字节,但堆超32GB时失效。实例字段按类型优先级重排序以减少间隙,最小对象大小为16字节。通过JOL工具可精准验证布局,理解锁机制、GC、伪共享等底层行为。

2301_79732484的博客 149

Spring Boot 数据源与 MyBatis(-Plus) 自定义配置详解

本文详解 Spring Boot 中单数据源环境下 HikariCP 与 MyBatis-Plus 的自定义配置。通过手动声明 SqlSessionFactory,实现下划线转驼峰、日志输出、一级缓存策略等精细化控制。结合 HikariCP 核心参数调优(如最大连接数、连接生命周期),确保高性能与稳定性。适用于仅需访问单一数据库的场景,避免多数据源复杂性,兼顾性能与可维护性。

BADAO_LIUMANG_QIZHI的博客 192

Java EE 进阶:8.MyBatis 操作数据库(入门)(第一弹)

Java EE 进阶:8.MyBatis 操作数据库(入门)(第一弹)

要努力去发光,而不是被照亮~ 114

LeetCode Hot 100 二叉树专题(二)3 题(Java)

本篇文章共 3 题:543. 二叉树的直径、102. 二叉树的层序遍历、108. 将有序数组转换为二叉搜索树。 每道题都统一按「① 题目分析 & 解题思路 → ② 常见解法(附代码)及讲解 → ③ 知识点总结」的顺序组织;代码使用 Java 编写,节点定义沿用 LeetCode 默认的 TreeNode。

2401_88612756的博客 362

Decorator

TaskDecorator 是异步场景下"跨线程传递上下文"的标准方案,主要用于传递 MDC、用户信息、数据源路由等上下文数据,核心价值是让异步任务的日志链路不中断、业务上下文不丢失。TaskDecorator 是 Spring 提供的一个钩子接口,用于在异步任务执行前对 Runnable 进行包装,常用于跨线程传递上下文。如果你在项目中遇到具体的异步上下文传递问题,可以把代码贴出来,我帮你给出最合适的 Decorator 方案 👍。✅ 核心能力:在线程切换时,把"父线程的上下文"搬到"子线程"

wlwork66的博客 102

JDK 下载安装:装完 Java 提示「不是内部或外部命令」?环境变量没配

JDK 是写 Java 程序必须装的东西。它包含运行 Java 的虚拟机(JRE)和编译 Java 的编译器(javac)——装了它,能跑、.java文件能编译成可执行程序。免费,学习和小规模生产都不花钱。

科小怪的博客 624

数据库乐观锁深度解析:MySQL、PostgreSQL 实战 + Spring Boot 集成指南

Oracle 提供了ORA_ROWSCN伪列(System Change Number),记录最后修改行的 SCN,类似 PostgreSQL 的xmin。实践中通常仍使用 version 字段方案,逻辑与 MySQL 完全相同。-- Oracle:通过 ORA_ROWSCN 实现乐观锁-- 更新时比对 SCN// 自定义注解// AOP 切面@Aspect@Component@Slf4jtry {

yjc_1111的专栏 395

C++ 多态详解:作用、原理与实战用法

多态是C++面向对象的核心特性,通过虚函数实现运行期动态绑定,使同一接口在不同对象上表现出不同行为。其核心作用包括统一接口、提升可扩展性、降低耦合、支持运行时分派与批量处理。实现依赖虚函数表(vtable)和虚指针(vptr),需注意虚析构函数、对象切片等陷阱。相比编译期多态(模板),运行期多态灵活性高但有调用开销。合理结合两者,可兼顾代码的灵活性与性能,是构建可扩展、低耦合系统的关键。

2402_85743155的博客 376

java框架大全

java框架大全

qq_39326137的博客 183

Java 多态 学习笔记

多态是面向对象编程的重要特性,指同一操作作用于不同对象时产生不同行为。其核心在于“父类引用指向子类对象”,结合方法重写实现运行时动态绑定。多态使代码更灵活、可扩展,如用Person p = new Student();统一处理各类人员注册,无需修改调用逻辑。但多态无法直接调用子类特有方法,需通过instanceof判断并强制转换。编译时看左边(类型),运行时看右边(实际对象),实现解耦与维护便利。

AA_AA114514的博客 337

SecureRandom做随机源,这个Java随机字符串工具类有3个方法

本文分享一款JDK17环境下的Java随机字符串工具类,内置3个开箱即用的方法,全部采用SecureRandom加密安全随机源,不存在弱随机、可预测、取模偏差等问题。工具类支持默认62字符集随机串、纯数字随机串、自定义字符集随机串三种生成模式,支持Unicode码点级别的字符集处理,兼容Emoji等增补字符,边界处理严格,异常信息明确,适合验证码、邀请码、盐值、随机口令、短链码等场景,源码可直接复制使用。

Java后端 | AI智能体应用实战派 | 电脑技能行家 294

Java实现批量线段相交检测(跨积判定+扫描线优化与踩坑复盘)

【代码】Java实现批量线段相交检测(跨积判定+扫描线优化与踩坑复盘)

m0_64476639的博客 318
上一篇: LWN:内核热点: folio,多代LRU,以及Rust!
下一篇: LWN:内核该如何处理argc为0的情况?
LinuxNews搬运工
博客等级 码龄7年 438粉丝 20原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值