跳到主要内容

安全最佳实践

Open Terminal 赋予 AI 真实的命令执行和文件管理能力,因此部署方式必须慎重。

优先使用 Docker

除非你明确需要让 AI 直接操作宿主机,否则始终优先使用 Docker。这样 Open Terminal 会被隔离在自己的容器内,只能访问你明确暴露出来的内容。

docker run -d --name open-terminal -p 8000:8000 \
  --memory 2g --cpus 2 \
  -v open-terminal:/home/user \
  -e OPEN_TERMINAL_API_KEY=your-secret-key \
  ghcr.io/open-webui/open-terminal

--memory 2g--cpus 2 可以防止 runaway 进程吃光整台机器资源。

裸机运行的风险

如果不用 Docker,AI 就拥有你当前用户账号能做的一切操作能力,包括删文件、装软件、访问本机可达资源。裸机模式只建议用于你自己的个人机器。

一定要设置密码

如果没有 API key,任何能打到该端口的人都可以运行命令、读文件、接管 terminal。

-e OPEN_TERMINAL_API_KEY=a-strong-password-here

生产环境更推荐配合 配置文件Docker secrets 使用。

优先使用管理员侧连接,而不是用户侧连接

管理员配置用户个人配置
API key 存放位置服务器端浏览器端
请求经过OPL 数据空间 backend用户浏览器直连
哪些机器需要能连通 terminal只要 OPL 数据空间服务器每个用户自己的电脑

管理员侧连接更安全,也更容易统一控权。

限制资源

避免单个脚本把 CPU / 内存全部吃光:

deploy:
  resources:
    limits:
      memory: 2G
      cpus: "2.0"

网络隔离

最安全的方式之一,是把 Open Terminal 放在仅 OPL 数据空间可访问的私有 Docker 网络中:

services:
  open-webui:
    networks:
      - public
      - internal

  open-terminal:
    networks:
      - internal

networks:
  public:
  internal:
    internal: true

这意味着:

  • OPL 数据空间可以访问 http://open-terminal:8000
  • 公网不能直接访问 Open Terminal
  • Open Terminal 默认也不能主动访问外网

出站过滤

如果 Open Terminal 需要有限的外网访问,例如安装包,可以进一步限制它只允许访问特定域名:

-e OPEN_TERMINAL_ALLOWED_DOMAINS="pypi.org,github.com,*.npmjs.org"

这样可以减少数据外传和下载未知程序的风险。

Docker socket 风险

可选地,你也可以把宿主机 Docker socket 挂进容器:

-v /var/run/docker.sock:/var/run/docker.sock
仅用于完全信任环境

挂载 Docker socket 基本等同于给容器 root 级 Docker 控制权,也就几乎等同于把宿主机交给它。拥有 terminal 访问权的人可以借此访问主机文件系统、网络,以及管理其他所有容器。

安全检查清单

建议
优先 Docker,不用裸机
设置强 API key
走管理员侧连接
配 CPU / 内存限制
使用内部网络隔离
需要时开启出站过滤
除非必要,不挂 Docker socket
如果不需要运行时装包,可考虑 slimalpine 镜像

相关页面