在 Ubuntu 20.04 和 Ubuntu 24.04 之间,systemd 的核心功能和基本配置语法保持高度兼容,大多数服务单元文件(.service)可以无缝迁移。但确实存在一些重要的差异和改进,尤其是在 systemd 版本升级、安全增强、默认行为变化以及与新系统特性的集成方面。
以下是主要的区别点:
✅ 1. systemd 版本不同
- Ubuntu 20.04 (Focal):
- 使用
systemd 245(发布于 2020 年初)
- 使用
- Ubuntu 24.04 LTS (Noble Numbat):
- 使用
systemd 253或更高(随发行版更新)
- 使用
新版本引入了新特性、弃用旧选项,并修复了许多 bug。
✅ 2. 新增或已废弃的配置选项
由于 systemd 升级,一些指令被标记为过时或移除,而新的更安全/更灵活的替代项被引入。
示例:环境变量管理
- 旧方式(仍支持,但不推荐):
Environment=KEY=value - 推荐新方式(使用
EnvironmentFile或Environment+ 更细粒度控制)
弃用或变更的选项:
SysVStartPriority:仅用于 SysV 兼容,影响减小。- 某些
DeviceAllow=、CapabilityBoundingSet=等安全相关设置的行为可能更严格。
✅ 3. 更强的安全默认值(Hardening 增强)
Ubuntu 24.04 更强调安全性,默认启用了更多 systemd 的 sandboxing 功能。
常见变化包括:
[Service]
NoNewPrivileges=yes
PrivateTmp=yes
ProtectSystem=strict
ProtectHome=read-only
RestrictSUIDSGID=yes
RestrictAddressFamilies=AF_UNIX AF_INET AF_INET6
DynamicUser=yes ; 可选启用动态用户
这些在 24.04 中更常见于官方服务单元文件,而在 20.04 上可能未启用或较宽松。
⚠️ 如果你自定义的服务依赖某些传统权限(如访问
/tmp、写入/etc、使用非标准 socket 类型),可能需要显式放宽限制。
✅ 4. 对 DynamicUser= 支持更好
- Ubuntu 24.04 更鼓励使用
DynamicUser=yes来提升安全性。 - 这会动态分配 UID/GID,避免创建永久系统用户。
- 需注意:不能与静态
User=同时使用;日志、文件路径需适配。
✅ 5. Socket 激活与总线激活更成熟
- D-Bus 服务激活、socket 激活机制在 24.04 更完善。
- 若你的服务是通过
.socket单元启动的,在新版中行为可能更符合预期。
✅ 6. 日志与 cgroup v2 默认启用
-
Ubuntu 24.04 默认使用 cgroup v2(统一层级),而 20.04 使用 cgroup v1。
- 影响资源监控工具(如
systemd-cgtop)、容器运行时(Docker/Podman)等。 - 大多数服务无需修改配置,但低层工具可能受影响。
- 影响资源监控工具(如
-
journald日志行为更精细,支持更多过滤和结构化字段。
✅ 7. 单位文件位置与覆盖机制
虽然目录结构一致(/etc/systemd/system, /lib/systemd/system),但:
- Ubuntu 24.04 更倾向于将服务模板化或拆分为片段。
- 推荐使用
systemctl edit myservice.service创建覆盖文件(位于/etc/systemd/system/myservice.service.d/override.conf),而不是直接复制整个 unit 文件。
✅ 8. 对容器和服务编排的更好支持
- systemd 在 24.04 中更好地支持
systemd --user、podman generate systemd输出的服务。 - 更适合运行无守护进程的容器化服务。
✅ 总结:是否需要修改配置?
| 场景 | 是否需要调整 |
|---|---|
| 简单服务(ExecStart, Restart=on-failure) | ❌ 通常不需要 |
| 自定义环境变量、WorkingDirectory | ❌ 基本兼容 |
| 访问设备、网络、特殊文件系统 | ✅ 可能需要添加 ReadWritePaths= 或放宽 Protect* |
使用 PrivateDevices, CapabilityBoundingSet 等 |
✅ 检查是否被弃用或行为改变 |
使用动态用户 (DynamicUser) |
✅ 推荐启用以提高安全性 |
| 依赖 cgroup v1 工具 | ✅ 注意兼容性,可临时启用 v1 |
🔧 建议做法
-
测试迁移:将 unit 文件从 20.04 复制到 24.04,运行
systemctl daemon-reload。 -
检查状态:
systemctl status your-service.service journalctl -u your-service.service -
验证安全策略:
systemd-analyze security your-service.service这个命令在 24.04 上非常有用,可评估服务的安全评分并建议改进。
-
逐步启用 hardening,除非已有明确需求。
📚 参考文档
man systemd.service,man systemd.exec- systemd changelog
- Ubuntu 官方发布说明:https://discourse.ubuntu.com/c/24-04/
如有具体服务配置问题,欢迎提供 .service 文件内容,我可以帮你分析兼容性。
轻量云Cloud