Linux 最新资讯 20260703——Fedora 45 考虑默认启用 x86_64 Shadow Stack
Fedora 45 考虑默认启用 x86_64 Shadow Stack 一项针对 Fedora Linux 45 的变更提议,计划默认启用 x86_64 Shadow Stack 功能,以提升现代 Intel 和 AMD 系统的安全性。 该提议旨在默认启用通过 GCC、LLVM Clang 或 Rustc 编译的应用程序/库的 Shadow Stack 保护。动态链接器或静态启动例程将为满足条件的进程激活 Shadow Stack——即该进程的二进制及其所有共享库依赖均包含 Shadow Stack 支持。Shadow Stack 由现代 Intel 和 AMDCPU 通过硬件强制执行,用于防御面向返回编程(ROP)类攻击。 "此变更将在支持 Shadow Stack 的 x86_64 机器上,于 Fedora Linux 45 中默认启用 Shadow Stack 保护。动态链接器或静态启动例程将为所有二进制及其共享库依赖均构建了 Shadow Stack 支持的进程激活 Shadow Stack,从而尽可能默认保护进程。Shadow Stack 是 Intel CET 引入的两项控制流强制功能之一,另一项是间接分支追踪(IBT),旨在通过保护返回地址来防御面向返回编程(ROP)和面向跳转编程(JOP)攻击。本次 Fedora 变更仅涉及启用 Shadow Stack 支持,默认启用间接分支追踪不在范围内。 此变更基本向后兼容:自 2018 年起,Fedora 的 redhat-rpm-config 已默认启用编译时标志 -fcf-protection,因此大多数二进制已包含相应标记。应用此变更后,依赖项带有 Shadow Stack 标记的应用程序将透明地获得保护,而启动时加载任何不合规对象的应用程序将继续无 Shadow Stack 保护运行。唯一的新的失败场景是:一个已启用 Shadow Stack 的进程在运行时尝试 dlopen 一个不合规的共享对象,这将导致类似 error: dlopen: /path/to/library.so: rebuild shared object with SHSTK support enabled 的 dlopen 错误。"使用 Shadow Stack 带来的性能开销通常极小甚至可忽略不计,同时能提升系统安全性。这也为后续 Fedora Linux 版本启用间接分支追踪(IBT)以提供完整的控制流强制技术(CET)保护铺平了道路。 有关 Fedora 45 中 Shadow Stack 提议的更多详情,请参阅 Fedora Wiki。 Rust Coreutils cp 因最新不兼容性破坏 Ubuntu 镜像构建 虽然 Rust Coreutils 因采用 Rust 编程语言编写而比 GNU Coreutils 具备更好的内存安全性,但其各命令实现中仍不断被发现微小的不兼容问题。本周最新曝光的是,Rust Coreutils 的 cp 命令因参数处理差异导致 Ubuntu 镜像构建失败。 自去年 Ubuntu 25.10 转向 Rust Coreutils 以来,大多数与 GNU Coreutils 兼容性相关的细节问题已被逐一解决。此前曾出现过 部分可执行文件损坏、性能不足,以及 Ubuntu 无人值守升级失效 等问题。自 Ubuntu 26.04 LTS 发布以来,已有数周/数月未再听到 Rust Coreutils 在 Ubuntu 上出问题。但本周又曝出一项重大缺陷,导致 Ubuntu 将复制(cp)命令回退至 GNU Coreutils 版本。 根据 此 Launchpad 缺陷报告(已被标记为“严重”问题),Rust Coreutils 的 cp 命令在处理 "-L" 参数时存在错误,导致 Ubuntu live 介质 ISO 构建过程中的镜像构建失败。 有人提出建议,修改 Ubuntu 构建脚本而非回退到 GNU Coreutils: “恕我直言,如果我们一次次回退,可能就无法发现这类(边缘)问题。我们之所以知道这个 bug,正是因为构建失败。与其回退,不如考虑修补 'config' 文件(https://Git.launchpad.net/livecd-rootfs/tree/live-build/auto/config)。组合命令 cp -afL 仅在一处使用。或许我们可以将其改为类似 cp -RL --preserve=all $entry config/ 的形式?我在本地测试过,可以正常工作。”
但最终,最新的 Ubuntu coreutils-from 软件包更新已将 cp 回退至 GNU Coreutils 版本——此前因其他 bug 也曾采取过相同做法。 针对 Rust Coreutils 中 cp 参数处理问题的修复方案已 向上游提交,但截至本文撰写时尚未合入。