# ADR-0012 以专用用户 agentsvc 运行服务 - 状态:Accepted · 日期:2026-10-23 · 取代 ADR-0009、ADR-0008 中"复用本人终端登录态"的部分 ## 背景 运行账号 jerry-remote 在 `docker`、`lxd` 组中,并且有免密 sudo,三者都等同 root。Agent 的命令以运行账号的身份执行,一旦某层沙箱出现漏洞,影响范围就是整台机器。2026-10-23 复查时就发现,文档转换沙箱里可以连通 LXD 的 API(见 06 §8)。 ## 决策 - 新建系统用户 `agentsvc`(不在 docker/lxd/sudo 组,shell 为 nologin,home 为 `/srv/agent-server/home`),由 systemd 以该用户运行服务(`deploy/agent-server.service`) - 目录权限:程序 `app/`、运行环境 `runtime/`、技能 `skills/` 由 root 所有,服务只读(Agent 无法篡改自身代码和环境);`home/ data/ workspaces/ logs/` 只有 agentsvc 可访问(0700);`knowledge/` 为 agentsvc 组可写,管理员加入该组后可以放资料 - 使用 Agent SDK 自带的 Claude Code 二进制(官方未修改,版本随 SDK 锁定),不再依赖个人 home 中的 CLI - 登录:管理员执行 `agent-claude`(以 agentsvc 身份运行该二进制)并输入 /login,用的仍是本人的 Claude 账号;登录态保存在 agentsvc 的 home 中,与个人终端互不影响 - 开发环境以本人身份运行(端口 8788,数据在仓库 `.dev-data/`),共享只读的 runtime 与 skills ## 后果 - 正式服务与开发环境的数据、登录态、会话历史完全分开 - 迁移前创建的会话,其 Claude 会话记录留在个人账号中,续聊时会自动以新上下文继续(03 §6) - systemd 额外屏蔽 docker/LXD socket 并禁止提权,作为纵深防御