agent-server.service 1.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546
  1. # AgentServer systemd 服务(docs/design/06-security.md §5,ADR-0012)
  2. # 以专用用户 agentsvc 运行:该用户不在 docker/lxd/sudo 组,Agent 失控时的影响上限是它自己的数据
  3. [Unit]
  4. Description=AgentServer
  5. After=network-online.target
  6. Wants=network-online.target
  7. [Service]
  8. Type=simple
  9. User=agentsvc
  10. Group=agentsvc
  11. WorkingDirectory=/srv/agent-server/app/server
  12. Environment=NODE_ENV=production
  13. Environment=HOME=/srv/agent-server/home
  14. Environment=AGENT_SERVER_DATA_DIR=/srv/agent-server
  15. Environment=AGENT_SERVER_ADMIN_DIST=/srv/agent-server/app/admin
  16. # 监听所有网卡(局域网可访问);前面加反向代理后改回 127.0.0.1 并设置 AGENT_SERVER_TRUST_PROXY=true
  17. Environment=AGENT_SERVER_HOST=0.0.0.0
  18. ExecStart=/usr/local/bin/node dist/main.js
  19. Restart=on-failure
  20. RestartSec=3
  21. # 文件系统:整盘只读,home 不可见,只有服务数据可写;程序与运行环境由 root 所有、只读
  22. ProtectSystem=strict
  23. ProtectHome=yes
  24. ReadWritePaths=/srv/agent-server/home /srv/agent-server/data /srv/agent-server/workspaces /srv/agent-server/logs /srv/agent-server/knowledge
  25. PrivateTmp=yes
  26. UMask=0077
  27. # 纵深防御:即使权限配置出错,也看不到这些高权限 socket
  28. InaccessiblePaths=-/var/run/docker.sock -/run/docker.sock -/var/snap/lxd/common/lxd/unix.socket
  29. # 内核与提权
  30. NoNewPrivileges=yes
  31. ProtectKernelTunables=yes
  32. ProtectKernelModules=yes
  33. ProtectControlGroups=yes
  34. LockPersonality=yes
  35. # 不能开启 RestrictNamespaces:bubblewrap 沙箱需要 user/mount/net namespace
  36. # 资源上限
  37. MemoryMax=8G
  38. CPUQuota=600%
  39. TasksMax=1024
  40. [Install]
  41. WantedBy=multi-user.target