速卖通素材
努力

运行服务时 Ubuntu 20.04 与 24.04 的 systemd 配置有区别吗?

服务器

在 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
  • 推荐新方式(使用 EnvironmentFileEnvironment + 更细粒度控制)

弃用或变更的选项:

  • 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 --userpodman generate systemd 输出的服务。
  • 更适合运行无守护进程的容器化服务。

✅ 总结:是否需要修改配置?

场景 是否需要调整
简单服务(ExecStart, Restart=on-failure) ❌ 通常不需要
自定义环境变量、WorkingDirectory ❌ 基本兼容
访问设备、网络、特殊文件系统 ✅ 可能需要添加 ReadWritePaths= 或放宽 Protect*
使用 PrivateDevices, CapabilityBoundingSet ✅ 检查是否被弃用或行为改变
使用动态用户 (DynamicUser) ✅ 推荐启用以提高安全性
依赖 cgroup v1 工具 ✅ 注意兼容性,可临时启用 v1

🔧 建议做法

  1. 测试迁移:将 unit 文件从 20.04 复制到 24.04,运行 systemctl daemon-reload

  2. 检查状态

    systemctl status your-service.service
    journalctl -u your-service.service
  3. 验证安全策略

    systemd-analyze security your-service.service

    这个命令在 24.04 上非常有用,可评估服务的安全评分并建议改进。

  4. 逐步启用 hardening,除非已有明确需求。


📚 参考文档

  • man systemd.service, man systemd.exec
  • systemd changelog
  • Ubuntu 官方发布说明:https://discourse.ubuntu.com/c/24-04/

如有具体服务配置问题,欢迎提供 .service 文件内容,我可以帮你分析兼容性。

未经允许不得转载:轻量云Cloud » 运行服务时 Ubuntu 20.04 与 24.04 的 systemd 配置有区别吗?