Agent权限三分配置:用文件、工具、网络三层限制住执行范围

Agent权限三分配置的核心,是把“能碰哪些文件”“能调哪些工具”“能访问哪些网络地址”拆成三个独立维度,分别设好允许范围和默认拒绝策略。
只在一个地方写一句“允许执行”,等于没有配置;
三个维度分开管,越权时才能定位到底是哪一层放行过宽。

这套做法适用于给自动化运行、会调用工具、会读写本地文件的 Agent 收权限的场景。
下面按配置文件结构、逐层配置、越权排查和上线验证展开。

三层权限分别管什么

先把边界划清楚,避免三层混在一起:

  • 文件层:Agent 能读、能写哪些目录。重点是写权限,读权限可以适当放宽,但敏感目录必须单独拒绝。
  • 工具层:Agent 能调用哪些工具或命令,每个工具允许哪些参数范围。重点是禁止通配符式放行。
  • 网络层:Agent 能访问哪些域名和端口。重点是默认拒绝,只放行明确需要的出口。

三层之间的关系是“与”,不是“或”:一次操作必须同时通过三层检查才允许执行。
任何一层拒绝,整体就拒绝。

配置前需要准备的信息

动手写配置前,先把下面几项列清楚,否则配出来要么过宽要么跑不通:

  • Agent 的运行用户和进程启动方式,例如是否以 agent 用户运行、工作目录在哪里。
  • Agent 实际需要读写的目录清单,区分只读和可写。
  • 需要调用的工具清单,以及每个工具的必要参数。
  • 需要访问的外部服务域名和端口。
  • 拒绝时的处理方式:是直接报错终止,还是记录日志后跳过。

建议先用一份最小清单跑通,再逐步加权限,而不是一开始就把常用目录全放开。

文件层:只给必要目录,写权限单独收紧

文件层配置建议写成白名单结构,未列出的路径一律拒绝。
下面是一个 YAML 示例,字段名可按你的 Agent 框架调整,逻辑不变:

filesystem:
  default: deny
  allow:
    - path: /srv/agent/workspace
      mode: read_write
    - path: /srv/agent/input
      mode: read_only
  deny:
    - path: /etc
    - path: /root
    - path: /home
    - path: /srv/agent/workspace/.env

几个容易踩的点:

  • deny 的优先级要高于 allow,否则白名单里的父目录会把敏感子路径带进来。
  • 写权限尽量只给一个工作目录,输入目录保持只读。
  • 路径要写绝对路径,避免 Agent 用 .. 跳出工作目录。
  • 配置文件、密钥文件、.env 这类路径即使在工作目录内,也要显式拒绝。

配置完成后,用运行 Agent 的同一个用户手动验证一次:

sudo -u agent test -w /srv/agent/workspace && echo writable
sudo -u agent test -r /etc/shadow || echo denied

如果第一条输出 writable、第二条输出 denied,说明文件层基本生效。

工具层:按工具名放行,参数也要限制

工具层最常见的问题是只限制了工具名,没限制参数。
比如允许调用 shell,却不管它能执行什么命令,等于没限制。

配置思路是:工具名白名单加参数约束。

tools:
  default: deny
  allow:
    - name: read_file
      args:
        path_prefix: /srv/agent/workspace
    - name: http_get
      args:
        host_allow: [api.internal.example.net]
    - name: shell
      args:
        command_allow: [git status, ls, cat]
        timeout_seconds: 30

注意两点:

  • command_allow 用完整命令前缀匹配,不要用正则通配,避免 cat /etc/shadow 这类拼接绕过。
  • 给工具设超时,防止长时间挂起占用资源。

如果 Agent 框架支持工具级审批,对写操作类工具开启二次确认会更稳。

网络层:默认拒绝,只放行明确出口

网络层建议在 Agent 进程所在环境做出口控制,而不是只依赖 Agent 自身配置。
常见做法是通过防火墙或代理白名单限制目标域名和端口。

以 iptables 为例,先默认拒绝出站,再按需放行:

sudo iptables -P OUTPUT DROP
sudo iptables -A OUTPUT -o lo -j ACCEPT
sudo iptables -A OUTPUT -d 10.0.0.20 -p tcp --dport 443 -j ACCEPT

执行前务必确认你有带外登录方式,默认拒绝出站可能把 SSH 会话之外的更新、监控一起断掉。
改完用下面命令检查规则是否生效:

sudo iptables -L OUTPUT -n -v

如果不想动系统防火墙,也可以在 Agent 配置里限制允许访问的域名,但这种方式依赖 Agent 自身遵守配置,安全性弱于网络层控制。

越权报错怎么定位

Agent 报权限错误时,先看错误发生在哪一层,不要一上来就放宽配置:

  • 报 permission denied 且带文件路径,查文件层白名单和 deny 规则。
  • 报工具未授权或参数非法,查工具层工具名和参数约束。
  • 报连接超时、域名解析失败,查网络层出口规则和 DNS 配置。

定位时可以临时把 default 改成允许,确认是配置问题还是代码问题,但验证完要立刻改回拒绝。

上线前做一次三层的联合验证

配置完成后,用真实任务跑一遍,重点确认三件事:

  1. 正常任务能完整跑通,说明白名单范围够用。
  2. 故意访问一个未授权目录、调用一个未授权工具、访问一个未放行域名,都应被拒绝并留下日志。
  3. 拒绝日志里能看出是哪一层拦截的,方便后续排查。

三层都验证通过,再逐步按需加权限。
权限配置不是一次写完就结束,每次给 Agent 加新工具或新目录,都要回头检查这三层是否仍然闭合。

常见疑问

只配文件层够不够? 不够。
文件层管不住工具参数和网络出口,三层缺一层,越权就有绕过口子。

白名单和黑名单怎么选? 优先白名单加默认拒绝。
黑名单需要穷举所有危险路径和命令,维护成本高且容易漏。

权限收紧后任务跑不通怎么办? 先看拒绝日志定位是哪一层拦截,再补最小必要权限,不要直接改成全部允许。

分享到:
上一篇
Agent恶意插件防范要盯住哪几个入口
下一篇
给Agent做数据分类分级时怎么让规则真正生效
1
系统公告

关于香港云优质服务器IP地址更换的通知

尊敬的客户: 因原IP运营商大幅涨价,为避免成本转嫁至用户,我司决定更换IP服务商。本次更换后,您的续费价格将保持不变,且新IP网络质量与服务标准不受影响。新IP已分配至后台,即刻生效(更换的新IP都是香港原生IPv4)。 涉及 IP 段: 45.192.x.x 旧 IP 停用时间: 2026 年 12 月 1 日
服务中心
客服
在线客服
24小时为您服务
咨询
联系我们
联系我们,为您的业务提供专属服务。
24/7 技术支持
如果您遇到寻求进一步的帮助,请过工单与我们进行联系。
24/7 即时支持
泽御云
售前客服
泽御云
泽御云
售后客服
泽御云
技术支持
评价
您对当前页面的整体感受是否满意?
😞
非常不满意
😕
不满意
😐
一般
🙂
满意
😊
非常满意