Agent越权执行风险,禁止Agent访问运维管理接口
Agent 越权执行风险,本质是自动化程序权限超出了它该有的边界。
很多团队给 Agent 配置了管理员权限,导致它可以触达 SSH、K8s API、云控制台这类运维管理接口。
一旦 Agent 被提示注入恶意外部指令,攻击者就能借它改防火墙、删数据库、甚至接管整台服务器。
要禁止 Agent 访问运维管理接口,不能只在代码里写死一个 IP 白名单,而要从身份、权限、网络三层同时下手。
下面这套步骤,零基础也能照着做。
先画清 Agent 到底碰了哪些接口
动手加固前,先梳理 Agent 当前能访问什么。
登录服务器执行下面的命令,查看 Agent 进程运行身份:
ps -ef | grep agent
假设 Agent 进程是 root 启动,那就说明越权风险已经存在。
接着用 ss -lntp 检查服务器上开放了哪些运维管理端口,常见的有 22(SSH)、2379(etcd)、6443(K8s API)、8888(宝塔面板)等。
把这些端口记录下来,后续都要限制 Agent 访问。
创建专用账号并收回管理员权限
给 Agent 单独建一个系统账号,不允许登录 Shell,只给它处理业务文件的最小权限:
useradd -r -s /usr/sbin/nologin agent-run
mkdir -p /opt/agent-data
chown agent-run:agent-run /opt/agent-data
注意:不要给 agent-run 添加 sudo 规则,更不要设置免密 sudo。
如果 Agent 启动脚本里写死了 root 密码,立即改成从密钥管理服务读取,或者至少用环境变量注入。
原来以 root 启动的 Agent,先停掉,再切换到新账号启动,用 id agent-run 确认它没有附加管理员组。
在 Nginx 层给运维后台加一道拦截
如果你的运维管理接口是通过域名或公网 IP 访问的,建议在前面加一层 Nginx,通过位置匹配和访问控制过滤 Agent 的请求。
下面是一段配置示例:
location ^~ /admin/ {
deny 192.168.1.100; # 替换成 Agent 服务器的出口 IP
allow all;
proxy_pass http://127.0.0.1:8888;
}
把 Agent 出口 IP 写进 deny,其他来源正常访问。
注意,不要只依赖 IP 限制,因为 Agent 可能走代理或换出口 IP。
配合认证模块,比如 Basic Auth 或 JWT 校验,才能拦住非授权请求。
改完配置后执行 nginx -t 测试语法,再 systemctl reload nginx。
用防火墙和安全组做最后一道防线
网络层兜底能防止 Agent 内部横向移动。
在 Agent 服务器上使用 firewalld 封禁目标运维端口:
firewall-cmd --permanent --add-rich-rule='rule family=ipv4 source address=代理自身IP port port=6443 protocol=tcp reject'
firewall-cmd --reload
如果你用的是云服务器,更要进入安全组控制台,删除或拒绝 Agent 服务器到运维管理端口(如 22、6443)的入站规则。
二者叠加,即使 Agent 进程被攻破,也无法直连这些敏感接口。
验证:用 Agent 身份主动测试访问
改完配置后,重启 Agent 服务,然后用 Agent 所在机器的出口 IP 模拟一次访问:
curl -I http://你的管理域名/admin/
curl -I https://管理接口:6443/version
预期结果:第一个请求返回 403 Forbidden,第二个请求超时或 connection refused。
同时,查看审计日志:
journalctl -u agent-service -n 50
tail -f /var/log/nginx/access.log | grep " 403"
如果日志里没有来自 Agent 的 403 记录,说明 Agent 根本没有发出这些请求;
如果日志频繁出现 403,说明拦截正在生效。
避坑:这几个做法容易让加固失效
- 给 Agent 挂载 Docker socket:很多自动化工具会用到
/var/run/docker.sock,但这个文件等价于 root 权限,务必用--read-only或 rootless 模式。 - 只限制公网却忽略内网:运维管理接口通常在内网互通。安全组和防火墙必须同时覆盖内网网卡,不能只拦公网。
- 缺少 Agent 调用链审计:建议把 Agent 的每次命令执行都记录到独立日志,并定期检查是否有访问运维接口的异常记录。
完成以上四步后,Agent 即便被诱导执行恶意指令,能触碰的也仅限于业务数据目录,无法越过边界去操作运维管理接口。
后续如果业务调整,需要临时放开某个接口,务必先改权限组,再改防火墙规则,并保留变更记录。