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 中文摘要。