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

Ubuntu 20.04 和 Ubuntu 24.04 在使用 systemd 运行服务时,基本的 systemd 配置语法和机制是兼容的,但两者之间确实存在一些潜在的区别,主要体现在以下几个方面:


✅ 1. systemd 版本不同

  • Ubuntu 20.04 (Focal Fossa):默认搭载的是 systemd 245(后期更新可能到 245~248)。
  • Ubuntu 24.04 (Noble Numbat):默认搭载的是 systemd 253 或更高版本

随着 systemd 的版本演进,引入了新特性、弃用旧选项,甚至修改了某些行为。

📌 影响示例

  • 新增的指令如 StateDirectoryMode, ConfigurationDirectory, LogsDirectory 等在较新版本中更完善。
  • 某些过时或不安全的配置选项可能被警告或拒绝加载。

✅ 2. 默认安全强化增强(更强的沙箱限制)

Ubuntu 24.04 中 systemd 默认启用了更严格的沙箱保护(sandboxing),例如:

# 在 24.04 中可能默认启用
NoNewPrivileges=yes
PrivateTmp=yes
ProtectSystem=strict
ProtectHome=read-only
RestrictSUIDSGID=yes
RestrictAddressFamilies=...

这些设置可能会导致原本在 20.04 上正常运行的服务在 24.04 上启动失败(例如访问 /tmp、写入设备、绑定特定 socket 类型等)。

🔧 解决方案:如果服务需要放宽限制,需显式在 .service 文件中覆盖这些设置。


✅ 3. 文件系统布局变化(影响路径)

Ubuntu 24.04 可能采用更新的文件系统结构或默认路径变更(虽然不大),比如:

  • 更多服务使用 usr/lib/systemd/system/ 而非 /lib/systemd/system/
  • 用户服务目录位置可能调整

但通常兼容性层会保留旧路径。


✅ 4. 依赖和服务启动顺序的细微差异

由于 systemd 版本升级,依赖解析逻辑、并行启动行为、超时处理等可能略有不同。例如:

  • After=network.target 不再保证网络完全就绪(推荐使用 network-online.target
  • 新增对 BindsTo=PartOf= 的更严格处理

✅ 5. 日志与 cgroups v2 默认启用

  • Ubuntu 24.04 默认使用 cgroups v2,而 20.04 使用 cgroups v1。
    • 多数服务无感,但涉及资源控制(CPU、内存限制)、容器化应用或自定义 cgroup 操作的服务可能受影响。
  • systemd-journald 行为可能更严格或日志截断策略不同。

✅ 6. 安全性默认值提升

Ubuntu 24.04 更强调安全,默认服务模板可能包含:

Hardening=true
# 或等价的一组 Protect* 指令

这相当于自动添加多个安全限制。如果你的手动服务未考虑这点,可能无法运行。


✅ 实际建议:迁移服务时注意

检查项 建议
.service 文件语法 使用 systemd-analyze verify your-service.service 验证
权限与路径访问 检查是否因 ProtectSystem / PrivateTmp 导致无法读写
日志输出 查看 journalctl -u your-service 是否有权限或拒绝错误
二进制依赖 确保可执行文件没有被 AppArmor/SELinux 拦截(Ubuntu 主要用 AppArmor)
自定义脚本 避免在 service 中调用需要交互或 GUI 的命令

✅ 示例:一个在 20.04 可运行但在 24.04 失败的服务

[Service]
ExecStart=/usr/local/bin/my-script.sh

若该脚本尝试写入 /tmp 或访问网络,在 24.04 的严格沙箱下可能失败。应改为:

[Service]
ExecStart=/usr/local/bin/my-script.sh
ReadWritePaths=/tmp
NetworkAccess=true

或者更精细地配置所需权限。


✅ 总结:是否有区别?

方面 是否有区别
核心语法 ❌ 基本一致,兼容
默认安全策略 ✅ 24.04 更严格
systemd 功能 ✅ 24.04 支持更多新特性
沙箱与隔离 ✅ 24.04 默认更强
cgroups ✅ v2 成为默认
服务兼容性 ⚠️ 多数服务可直接运行,但需测试

结论
systemd 配置格式上高度兼容,但 Ubuntu 24.04 安全性更强、限制更严,可能导致旧服务无法直接运行。
建议在迁移到 24.04 时,测试服务行为并根据日志调整 sandbox 配置


如你有具体的服务配置文件,我可以帮你分析是否需要调整以适应 24.04。

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