综合 systemd v259 升级笔记:run0 提权、musl 编译,以及 v260 要删的几样东西

2026-09-30 21:01:12

systemd v259 升级笔记:run0 提权、musl 编译,以及 v260 要删的几样东西

systemd v259 于 2025-12-17 发布,距 v258 只有三个月,整体改动不算激进,但有几处会直接影响升级路径和现有脚本的兼容性。下面按改动类型过一遍。

  • 官方仓库:
  • v259 release:

run0 新增 --empower:不切 UID 到 root 的提权会话

run0 是 sudo 的替代品,v259 给它加了 --empower:在不把 UID 切换为 root 的前提下启动一个提权会话。

它的做法不是"切用户拿全部控制权",而是用内核 capability(例如 CAP_SYS_ADMIN)只授予执行特权系统调用所需的权限,同时把进程放进特定群组,以便访问 polkit 操作。相对传统 sudo 的权限分离,这个模型更严格。

musl libc 编译支持,但限制不少

v259 首次支持用 musl libc 编译 systemd,需要在 Meson 里手动配置 libc 选项。

限制来自 musl 没有 NSS(Name Service Switch):

  • nss-systemd、nss-resolve 不可用
  • systemd-homed、systemd-userdbd 不可用
  • DynamicUser 相关参数不可用
  • 无法在无特权下运行 systemd-nspawn

XZ 后门事件之后:依赖改成 dlopen 按需加载

XZ 后门事件之后,systemd 开始探索用 dlopen() 按需加载库。v259 把七个库从直接链接改成 dlopen()。

现在 systemd 只直接链接:自身共享库、GCC/glibc、libxcrypt(libcrypt)、OpenSSL(libcrypto)、libz。计划在 v260 把 libcrypt、libcrypto 也改成 dlopen 依赖。

libsystemd 侧同样改了:现在用 dlopen() 动态加载 libacl、libblkid、libseccomp、libselinux、libmount;libcap 的功能已并入 libsystemd。

systemd-vmspawn 的 --bind-user

systemd-vmspawn 新增 --bind-user= / --bind-user-shell=,通过 virtiofs 把宿主机用户家目录共享进 VM,并传递用户凭据。目标 VM 需要运行 v258+。另有 --bind-user-group=。

作为对照,systemd-nspawn 从 v249 起就已经有 --bind-user。

journald 默认存储模式改为 persistent

journald 的默认存储模式从 auto 改为 persistent。

含义很直接:不管 /var/log/journal 目录此前是否存在,日志默认持久化到磁盘,而不是只放在易失的内存(RAM)里。依赖"重启即清空日志"的环境需要显式改回配置。

NAT 规则只剩 nftables 后端

systemd-networkd 和 systemd-nspawn 不再支持用 iptables/libiptc 创建 NAT 规则,唯一后端是 nftables。legacy iptables 支持在 v259 移除。

systemd-boot / systemd-stub 移除 TPM 1.2

systemd-boot 和 systemd-stub 移除 TPM 1.2 支持,只保留 TPM 2.0。

其他行为与接口变化

模块加载并行化:systemd-modules-load.service 现在并行加载内核模块,模块较多的系统启动时间会缩短。

cgroup v2 内存统计:cgroupfs 以 memory_hugetlb_accounting 挂载,hugetlb 内存计入 cgroup 总内存。service 单元新增 OOMKills 与 ManagedOOMKills 属性,分别记录被内核或 systemd-oomd 杀掉的进程数。

Varlink IPC 扩展:服务管理器的 Varlink IPC 大幅扩展,暴露服务执行设置等;Unit.List() 支持按 cgroup 或 invocation ID 过滤。新增 ExecReloadPost=、UserNamespacePath=、RootDirectoryFileDescriptor=。LISTEN_FDS 新增 $LISTEN_PIDFDID(pidfd inode ID),用于避免 PID 回收带来的歧义。

完整性校验与分区:systemd-integrity-setup 新增 HMAC-SHA256、PHMAC-SHA256、PHMAC-SHA512 算法;systemd-repart 支持 TPM2PCRs=、KeyFile=,Subvolumes= 可加 :nodatacow,相关功能可通过 Varlink IPC 访问。

弃用项与 v260 的最低版本要求

System V 服务脚本支持已弃用。v260 将移除 systemd-rc-local-generator、systemd-sysv-generator、systemd-sysv-install,需要改成原生 systemd unit。

/run/lock/ 旧目录弃用。服务应使用 RuntimeDirectory= 或 $RUNTIME_DIRECTORY,用户程序用 $XDG_RUNTIME_DIR。

v260 计划提高的最低要求:

组件最低版本
Linux 内核>= 5.10(建议 >= 5.14)
glibc>= 2.34
libxcrypt>= 4.4.0
util-linux>= 2.37
elfutils>= 0.177
openssl>= 3.0.0
cryptsetup>= 2.4.0
libfido2>= 1.5.0
libseccomp>= 2.4.0
python>= 3.9.0

参考来源:LWN《What's new in systemd v259》、systemd NEWS(v259-rc1)、informatecdigital 中文摘要。

复制全文 生成海报 systemd Linux 运维

推荐文章

程序员茄子在线接单