综合 systemd v259 升级注意:run0 新增 --empower,networkd 只留 nftables,v260 将移除 SysV 脚本

2026-10-07 21:04:35

systemd v259 升级注意:run0 新增 --empower,networkd 只留 nftables,v260 将移除 SysV 脚本

systemd v259 于 2025-12-17 发布。发布说明与相关报道:

run0 新增 --empower

run0 增加了一个 --empower 开关。它会在不切换到 root 用户的前提下启动一个提权会话:

  • 设置完整的 ambient capabilities 掩码,其中包括 CAP_SYS_ADMIN,因此大多数特权系统调用会被放行;
  • 把会话进程加入新的 empower 系统组,polkit 会识别该组,从而允许访问大部分 polkit 动作。

这种方式对系统状态的侵入性更小:不会改变 $HOME,也不会改变 UID,因此不会在用户家目录里生成属主错误的文件。

需要注意 --empower 并非在所有场景下都有效——不少程序仍然纯粹根据 UID 做访问检查,Linux 进程 capabilities 或 polkit 策略对它们不起作用。

systemd-networkd 与 systemd-nspawn 只支持 nftables

从 v259 开始,systemd-networkd 和 systemd-nspawn 创建 NAT 规则时只支持 nftables,iptables 以及 libiptc API 的支持已被移除。

The legacy iptables support through libiptc will be removed in v259. Only nftables backend will be supported by systemd-networkd and systemd-nspawn since v259.

七个库改为 dlopen() 加载

XZ 后门事件之后,systemd 开始用 dlopen() 按需加载库。到 v259,共有七个库从常规动态链接改为 dlopen():

  • audit
  • PAM
  • libacl
  • libblkid
  • libseccomp
  • libselinux
  • libmount

现在 systemd 只直接链接 systemd 自身的共享库、GCC/glibc 库、libxcrypt(libcrypt)、OpenSSL(libcrypto)和 zlib。v260 计划把 libcrypt 和 libcrypto 也改为 dlopen() 依赖。这一改动的目的是缩小容器中的占用体积。

实验性 musl libc 支持

systemd 现在可以用 musl libc 编译,属于实验性支持,存在若干限制。最大的限制是缺少 NSS(Name Service Switch)支持,导致名称/组查询以及相当一部分 systemd 基础设施缺失或处于半可用状态。

journal 默认存储模式改为 persistent

journal 的默认存储模式由 auto 改为 persistent(对应 journald.conf 中的 Storage=)。行为变化:即便 /var/log/journal 尚不存在,日志也会持久化写入磁盘,而不是退回到 volatile。

其他变更

  • systemd-modules-load.service 现在并行加载内核模块。
  • cgroupfs 挂载时带上 memory_hugetlb_accounting,hugetlb 内存会计入 cgroup 的总内存用量。
  • systemd-boot 与 systemd-stub 移除 TPM 1.2 支持,仅支持 TPM 2.0。
  • systemd-boot 支持日志级别(log levels)。
  • systemd-udevd / systemd-repart 改用 BLKPG 增量重读分区表,取代 BLKRRPART。
  • systemd-sysext / systemd-confext 新增配置文件 /etc/systemd/systemd-sysext.conf 和 /etc/systemd/systemd-confext.conf。
  • systemd-nspawn 的 .nspawn 文件 [Network] 段新增 NamespacePath=。
  • systemd-vmspawn 新增 --bind-user= / --bind-user-shell=;systemd-vmspawn / systemd-nspawn 新增 --bind-user-group=。
  • run0 还支持在获取 root capabilities 的同时保留用户自身的 UID/GID。
  • 新增 OOMKills 和 ManagedOOMKills 属性。

v260 计划:移除 SysV 脚本、提高最低依赖版本

v260 将移除 System V service scripts,涉及:

  • systemd-rc-local-generator
  • systemd-sysv-generator
  • systemd-sysv-install

这些组件目前处于 deprecated 状态,相关服务需要迁移到原生 unit 文件。

v260 计划提高的最低依赖版本:

依赖最低版本
Linux kernel>= 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
libseccomp>= 2.4.0
python>= 3.9.0

升级注意

  • 使用 systemd-networkd 做 NAT,或在 systemd-nspawn 中依赖 iptables 的环境中,升级前确认 nftables 已可用;v259 之后 iptables 后端不再生效。
  • journal 变为默认 persistent 后,确认 /var/log/journal 所在分区的容量与轮转策略,避免日志写满磁盘。
  • 排查 /etc/rc.local、/etc/init.d/ 下的 SysV 脚本,在 v260 之前改写成原生 unit,否则随 systemd-sysv-generator / systemd-rc-local-generator 一起失效。
  • 仍在使用 TPM 1.2 的机器不要依赖 systemd-boot / systemd-stub 的 TPM 功能,v259 起只支持 TPM 2.0。
  • 在 musl 环境下部署需谨慎:缺少 NSS 会直接影响用户与组的名称解析。
  • 计划升级到 v260 的发行版与容器基础镜像,需核对上表中的内核、glibc、openssl 等版本是否满足要求。
复制全文 生成海报 systemd Linux 运维 nftables init

推荐文章

程序员茄子在线接单