0012-dedicated-service-user.md 1.7 KB

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 并禁止提权,作为纵深防御