首页/安全/取证与溯源速查/自定义 systemd 服务单元核查
Linux 取证135 条

自定义 systemd 服务单元核查

自定义 unit 指向任意可执行文件,是持久化的常见载体;排查 /etc/systemd/system/ 下的新增或近期修改单元及其 ExecStart 目标。

取证与溯源速查安全更新于 2026-10-13

自定义 systemd 单元核查

自定义 systemd 单元指向任意可执行文件,是持久化里最常见、也最容易被忽略的载体:一个 .service 文件加上 ExecStart 就能在开机或触发时运行指定程序,而且管理方式与系统服务完全一致,混在正常单元里很难一眼看出问题。排查重点是 /etc/systemd/system/ 下新增或近期被修改的单元,以及它们的 ExecStart、Restart、User 三个字段。

基本信息

目录/etc/systemd/system/(系统级)、~/.config/systemd/user/(用户级)
关键字段ExecStart、ExecStartPre、Restart、User、WantedBy
覆盖机制同名单元以 /etc 为准,systemd-delta 可列出覆盖与扩展项
状态查询systemctl is-enabled 看开机自启,is-active 看当前是否运行
生效步骤改动后需 systemctl daemon-reload,再 enable 或 restart

典型使用场景

  • 排查服务与 cron 之外的第三类常见持久化载体
  • 定位某个不明进程由哪个单元启动、在何时被拉起
  • 核对单元文件的创建与修改时间是否落在入侵窗口内
  • 检查 ExecStart 指向程序的路径、属主与哈希是否可疑
  • 处理反复重启的异常单元,弄清为何清理后仍会运行

核查与确认

核查与确认
ls -lt --time-style=long-iso /etc/systemd/system/ | head -20   # 近期新增或修改的单元
systemd-delta --type=overridden | head -20                    # 被覆盖、被扩展的系统单元
systemctl cat custom.service                                  # 单元内容与文件来源
systemctl show custom.service -p ExecStart -p User -p Restart -p WantedBy   # 关键字段
systemctl is-enabled custom.service; systemctl is-active custom.service     # 自启与运行状态

关键字段读法

字段含义异常参考
ExecStart实际执行的命令与参数指向临时目录、用户家目录或带解释器包装
Restart进程退出后的重启策略always 会让清理不彻底,禁用要连策略一起改
User以哪个账号运行普通业务单元使用 root 需重点确认
WantedBy被哪个 target 拉起multi-user.target 表示开机即启动
Condition 与 Path附加触发条件状态变化即触发,排查时容易忽视
systemd-delta 会列出被覆盖(overridden)、被扩充(extended)的单元,可快速发现发行版原生单元被改写的情况,比逐个目录人工比对省时且不易漏项。
改动或删除单元后必须执行 systemctl daemon-reload 才生效;只删文件而未重载、未停止服务,运行中的进程仍按内存中的定义继续执行,此时复扫结果会与实际状态不一致。

易错点

  • 只在 /usr/lib 下核对单元,漏查 /etc 中覆盖同名单元的文件
  • 删除单元文件但未重载也未停止服务,造成服务已清理的假象
  • 忽略用户级单元目录,~/.config/systemd/user/ 下的内容完全看不到
  • 只看 ExecStart 路径不核对文件哈希与属主,被替换的合法程序逃过检查

数据来源与参考

  • systemd 官方文档(systemd.unit(5))
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌