systemd 服务单元安全审计
何时使用
- 上线前评审自研 / 第三方 .service 单元
- 安全 / 等保自查时盘点开机自启风险
- 入侵排查:找出 ExecStart 含远程拉取执行的可疑单元
输入
- 方式 A:一个
.service单元文件(做深度审计) - 方式 B:
systemctl list-unit-files的输出文本(概览已启用单元) - 方式 C:管道传入
用法
python scripts/audit.py assets/sample_risky.service.txt
python scripts/audit.py assets/sample_units.txt --format json
cat myapp.service | python scripts/audit.py -
判定级别
| 级别 | 典型项 |
|---|---|
| HIGH | ExecStart 含远程下载即执行(curl|bash 等) |
| MEDIUM | 无 Restart、以 root 运行、无资源限制 |
| LOW | forking 无 PIDFile、未配置 [Install]/WantedBy |
输出示例(节选,对 sample_risky.service.txt 跑出的问题)
[HIGH] ExecStart 含远程下载即执行(curl ... | bash),易被投毒或植入后门
[MEDIUM] Unit 以 root 用户运行(User=root),爆炸半径大
[MEDIUM] Restart 未配置,进程崩溃后不会自动拉起
[MEDIUM] 未设置 MemoryMax/CPUQuota/TasksMax,单服务可耗尽系统资源
健壮性
- 缺文件 / 空文件 / 坏输入:可读错误,退出码 1,不崩溃
- 字段缺失按"未配置"保守处理
- 支持
--format json输出结构化结果