Okular 沙箱化 MuPDF 后端 okular-mupdf-ng 发布 Beta 版
Show HN: Make Okular safer with a sandboxed MuPDF backend
okular-mupdf-ng 为 Okular 提供基于 MuPDF 的安全快速后端,将文档渲染移入隔离加固的 worker 进程,支持 PDF、ePUB、MOBI,并借助 Landlock、Seccomp、命名空间和资源限制实现沙箱隔离。
基于 MuPDF 的 Okular 安全快速后端。文档渲染被移至一个隔离且加固的工作进程。这降低了 MuPDF 漏洞的影响,同时保持 Okular 桌面集成的无缝性。支持 PDF、ePUB 和 MOBI 格式。
重要
此项目处于测试阶段,尚不稳定。请参阅功能成熟度矩阵了解各功能的成熟度和测试覆盖情况。如果遇到任何问题,请通过 Github Issues 报告。如果您正在处理重要的 PDF,请改用 Okular 自带的官方 PDF 后端(Poppler 生成器)。
安装
请参阅 INSTALL.md 了解预构建包、构建要求以及从源代码构建的说明。
动机
Okular 是一款出色的软件:它功能丰富,还可通过灵活的插件系统进行扩展。然而,也有一些限制因素阻碍了它的发展。本插件解决了当前 Okular 后端的以下问题,希望能使其更加完善:
- PDF 是一种复杂的格式,不应在 Okular 的内存空间中不受限制地解析和渲染。
- 使用 Poppler 的 PDF 后端功能丰富,但在处理大型 PDF 时速度缓慢。这是 Poppler 的一个已知弱点。
- 默认 ePUB 和 MOBI 后端的渲染质量很差,而且即使在高端的 CPU 上渲染速度也极其缓慢。
架构
文档引擎运行在一个隔离的工作进程中,可能不安全的文档在此进行解析和渲染。请参阅 ARCHITECTURE.md 了解组件职责、IPC、共享渲染缓冲区、沙箱、缓存以及源代码树布局。
功能对比
| 功能类别 | 能力 | okular-mupdf-ng | Okular 官方后端 |
|---|---|---|---|
| 安全与隔离 | 沙箱化进程外工作进程(Landlock、Seccomp、命名空间、资源限制) | ✓ | ✗(进程内执行) |
| 格式 | PDF、ePUB、MOBI | ✓ | ✓ |
| ePUB 自定义 | 自定义 CSS、页面尺寸 | ✓ | ✗ |
| ePUB/MOBI 导出 | 将 ePUB/MOBI 导出为 PDF | ✓(通过 MuPDF 渲染) | ✓(基础功能,通过文档打印) |
| PDF 表单 | AcroForm 文本输入、复选框、单选按钮、选择框和按钮 | ✓(AcroForm;仅检测 XFA) | ✓(AcroForm;仅检测 XFA) |
| PDF 表单 JavaScript | 计算和按钮/字段事件操作 | ✓(MuPDF/MuJS 在沙箱化工作进程中执行;实验性,需选择启用) | ✓(Poppler 将脚本传递给 Okular,由其在 QJSEngine 中执行) |
| 签名 | 验证和创建(NSS 加密) | ✓ | ✓(外加 GPG) |
| 证书管理器 | NSS 证书管理器;生成 RSA 和 ECDSA P-256 签名证书 | ✓ | ✗ |
| 注释 | 文本、高亮、线条、形状、墨迹、图章、插入符 | ✓ | ✓(外加声音、影片和文件附件注释) |
| 注释导出 | 将 PDF 注释导出为 XFDF | ✓ | ✗ |
| 扁平化 PDF 导出 | 将注释和表单字段烘焙到 PDF 页面内容中 | ✓ | ✗ |
| 文档工具 | 文本搜索、大纲/目录、链接、字体、元数据、嵌入文件 | ✓ | ✓ |
| PDF 启发式大纲 | 为没有嵌入大纲的 PDF 生成大纲 | ✓ | ✗ |
| 打印与导出 | 打印与导出 | ✓ | ✓ |
| PDF 图层 | 在图层侧边栏中切换可选内容 | ✓ | ✓ |
| OCR | 内置 Tesseract 页面 OCR 引擎 | ✓ | ✗ |
限制
- MuPDF 的 ePUB 和 MOBI 支持不完整。ePUB 3.0 和现代 MOBI 未完全支持,因此某些文档可能渲染不正确。
- NSS 加密代码尚未经过完整审计。
- 沙箱仅支持 Linux,其可用性取决于 Linux 内核和系统支持。默认采用严格强制执行。
- Worker 重启无法恢复未保存的表单。
有关各功能的成熟度和自动化测试覆盖情况,请参阅功能成熟度矩阵。
更新日志
有关版本亮点、修复和其他变更,请参阅CHANGELOG.md。
贡献
有关贡献和测试指南,请参阅CONTRIBUTING.md。 有关安全联系方式,请参阅SECURITY.md。
致谢
本项目从以下出色的项目中学习
- Okular Poppler 后端 - Okular 集成
- SumatraPDF - MuPDF API 用法
- Zathura MuPDF 后端 - Seccomp 规则
- Sioyek - MuPDF API 用法
许可证
原始项目源代码依据GNU 通用公共许可证 v3.0 或更高版本(GPL-3.0-or-later)授权,除非另有说明。
第三方组件保留其各自的许可证和版权声明:
- MuPDF,包括其签名徽标:
GNU Affero 通用公共许可证 v3.0 或更高版本
(
AGPL-3.0-or-later)。Worker 链接到 MuPDF;其许可证适用于引擎以及徽标。GPLv3 允许这种组合,AGPL 的网络交互要求适用于组合作品;请参阅GPLv3 第 13 节。 - Allura 字体:SIL 开放字体许可证 1.1。
- zpp::bits:MIT 许可证。
- cxxopts:MIT 许可证。
其他依赖项和捆绑资源,包括 MuPDF 嵌入的字体,保留其上游许可证。本摘要不能替代完整的许可证文本或组件特定声明。
来源:Hacker News · github.com
