艰难地打开一个文件在不同场景下打开文件难度不同。若开发涉及安全边界且与文件有关的东西打开文件可能极其困难。在最坏情况下安全边界两侧进程操作共享文件系统树会面临子路径含 ..、路径组件为符号链接、TOCTOU 竞态等问题。安全基本操作是使用文件描述符绝对不要用路径调用特权进程从文件描述符转换回路径易出现竞态问题。有时使用路径不可避免可使用 O_PATH 打开目录获文件描述符用 openat 结合 O_NOFOLLOW 标志处理路径。libglnx chaselibglnx 是用于 GNOME C 项目的实用库以基于文件描述符的文件系统操作作为主要 API。新增的 glnx_chaseat 函数提供安全路径遍历功能其标志可控制不同行为实现细节棘手。关于标准库的补充说明POSIX API、GLib/Gio API 和 Rust 的跨平台抽象在处理文件问题上表现不佳使用这些 API 易引入安全漏洞。更好的 GLib 跨平台 API 应与 chaseat() 类似返回不透明句柄。当前 GFile 抽象层选择错误访问应由 FUSE 提供。等等你为什么要谈论这个作者维护的 Flatpak 项目经 Codean Labs 安全分析发现问题其中一个是沙盒逃逸漏洞。flatpak run 原是为受信任用户设计Flatpak 门户将其与不受信任调用者连接导致安全问题。修复需审核调用链并用文件描述符替换路径字符串。此外Flatpak 子沙盒方法源于 15 年前如今可让应用使用内核原生无特权用户命名空间创建子沙盒大规模更改曾出现问题最终成功修复使 Flatpak 更安全。