systemd v258 升级运维笔记:tty 默认不可写、runlevel 消失、内核基线抬到 5.4
发布说明:
行为分析:
tty/pts 设备节点默认权限从 0620 改为 0600
这是升级后体感最直接的一条。原来 tty/pts 节点是 0620,属组 tty 可写,别的用户能直接往你的终端里写消息;现在默认 0600,相当于 mesg y 变成 mesg n。
影响范围:wall、write 这类往其他用户终端投递消息的操作会失败,跨用户广播的脚本、部分机房通知手段会直接踩到。
要保留旧行为,只能在构建时用 meson 选项回退:
meson setup build -Dtty-mode=0620
发行版若不改这个默认值,升级后就得靠应用侧绕开。
logind 把无 TTY 的系统用户会话归为 *-light 类
systemd-logind 对 PAM 会话的自动分类改了:
| 原分类 | 原持有者 | v258 分类 |
|---|---|---|
background | root / 系统账户 | background-light |
user | 非 root 系统用户 | user-light |
落在 *-light 意味着这类会话默认不再拉起 per-user service manager。典型命中对象是没有 TTY、非图形界面的 cron 任务和 FTP 会话(且以系统用户身份运行)。直接后果是脚本里调 systemctl --user 拿不到用户实例。
要恢复原分类,可以给 pam_systemd.so 传 class= 参数,或者设置 XDG_SESSION_CLASS 环境变量。图形会话和普通用户的会话不受影响。
System V 相关机制整块移除
v258 里下面这些东西已经不存在了:
/dev/initctlinitctl、runlevel、telinit命令- 通过
init命令切换系统状态 runlevel[0-6].target- runlevel 这个概念本身
传统 SysV 服务脚本本身在 v258 标记为废弃,v259 移除。有遗留脚本的机器,升级前要先把它们翻成原生 unit,别指望还能用兼容层跑。
/forcefsck、/fastboot、/forcequotacheck 文件方式失效
systemd-fsck 不再读取 /forcefsck 和 /fastboot,改用内核命令行选项或 credential:
fsck.mode=force
systemd-quotacheck 同理,/forcequotacheck 不再生效,改用:
quotacheck.mode=force
维护脚本、PXE 引导参数里靠 touch /forcefsck 触发检查的那套逻辑,升级后需要一并替换。
journalctl --follow 的退出码变了
journalctl --follow 在收到 SIGTERM、SIGINT,或者它写入的管道被断开时,现在以成功码退出。以前这些情况会返回非零,包在脚本里当守护进程拉起、靠退出码判断异常的逻辑要重新对一下。
内核基线抬到 5.4,推荐 5.7
最低内核版本从原来的基线升到 v5.4,推荐 v5.7。v259 计划再抬到内核 >= 5.10,推荐 >= 5.14。长期不升级内核的发行版和老旧虚拟化平台,升级 systemd 之前先把这层确认掉。
其他移除与变更
- cgroup v1 支持移除,只挂载 cgroup v2(一笔带过,但老容器环境要先确认)。
systemd-stubv258 要求ukifyv257.9 或 v258 及以上。- OpenSSL 成为
systemd-resolved和systemd-importd唯一支持的 TLS 后端,GnuTLS 与 libgcrypt 后端被移除。 - v259 移除 libiptc 形式的旧 iptables 支持,只保留 nftables 后端。
- v259 移除遗留的
/run/lock/;v260 移除systemd-repart的 FactoryReset EFI 变量。
v258 新增项里比较实用的有:PrivateUsers=full(映射整个 32 位 UID 范围)、ProtectHostname=private、Slice 单元的 ConcurrencySoftMax= / ConcurrencyHardMax=、按单元的目录配额(StateDirectoryQuota= 等,支持 xfs/ext4,不支持 btrfs)、systemd-factory-reset 工具,以及 /etc/hostname 中用 ? 占位符生成动态主机名。
参考: