核心用法
toolguard-daemon-control 是一套面向 macOS 的 launchd 服务管理工具集,用于将任意可执行程序转化为持久运行的后台服务。全套工具包含 5 个 Bash 脚本,覆盖从服务创建到生命周期管理的完整流程:
| 脚本 | 功能 |
|------|------|
| `install.sh` | 创建 plist 配置并启动服务,支持自定义工作目录和环境变量 |
| `uninstall.sh` | 停止并移除服务,保留日志供审计 |
| `status.sh` | 查询服务状态,无参数时列出所有 managed 服务 |
| `logs.sh` | 查看 stdout/stderr 日志,支持 tail -f 实时追踪 |
| `list.sh` | 列出所有已安装服务及其运行状态 |
服务安装为 ~/Library/LaunchAgents/ai.toolguard.<name>.plist,以当前用户身份运行,日志写入 ~/Library/Logs/toolguard/<name>/。
显著优点
1. 零权限门槛:纯用户级操作,无需 sudo 或系统完整性保护 (SIP) 例外
2. 原生集成:直接调用 launchd,享受 macOS 标准的进程监控、资源管理和自动重启机制
3. 隔离命名空间:强制 ai.toolguard. 前缀,避免与系统服务或其他用户服务冲突
4. 运维友好:结构化日志目录、支持环境变量注入和工作目录定制,适配复杂应用部署
潜在局限
- 平台锁定:仅适用于 macOS,Linux 用户需改用 systemd,Windows 需改用 Windows Service
- Go 开发限制:launchd 无法直接执行
go run,必须预编译二进制或包装 shell 脚本 - 非特权约束:用户级 launchd 无法绑定 1024 以下端口或执行需要 root 的操作
- 日志轮转缺失:工具未内置日志切割,长期运行需依赖外部方案(如
newsyslog)
适合人群
- macOS 开发者需要将开发服务器、代理工具或后台 worker 常驻运行
- 追求"自托管"工具链的用户,希望用原生机制替代 Docker Desktop 或第三方守护进程管理器
- 安全敏感场景,要求服务以最小权限(非 root)运行
常规风险
1. 命令注入:install.sh 直接将参数拼入 plist XML,若 service-name 或 command 包含特殊字符可能导致配置损坏或意外行为
2. 持久化后门风险:攻击者若获得用户 shell,可利用此工具建立隐蔽常驻服务
3. 资源泄漏:uninstall 不清理日志,长期累积可能占用磁盘;KeepAlive=true 的崩溃循环若未配置退避策略,可能引发 CPU/IO 风暴
4. 环境漂移:环境变量在 plist 中静态固化,后续 shell 配置变更不会同步到服务