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-generatorsystemd-sysv-generatorsystemd-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 等版本是否满足要求。