跳到主要内容

安全最佳实践

Open Terminal 赋予 AI 运行命令和管理文件的真实能力。以下是确保这种能力被安全使用的方法。


使用 Docker

始终使用 Docker,除非你明确需要直接访问你的机器。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 标志可防止失控进程消耗你机器的全部资源。

不使用 Docker 运行

不使用 Docker(裸机模式)时,AI 可以使用你用户账户的权限运行任何命令——包括删除文件、安装软件,或访问你账户能访问的任何内容。裸机模式仅用于你自己的个人机器上的个人项目。


始终设置密码

没有 API Key 时,任何能访问该端口的人都拥有完整权限——他们可以运行命令、读取文件并控制终端。

-e OPEN_TERMINAL_API_KEY=a-strong-password-here

在生产环境中,请使用配置文件Docker secrets,而不是在命令行中明文传入密钥。


使用管理员连接(而非用户连接)

连接到 Open WebUI 时,优先使用管理员配置方式:

管理员配置用户配置
API Key 可见性保存在服务端,不对用户暴露存储在用户浏览器中
请求经过Open WebUI 后端直接从浏览器发出
终端网络访问来源仅 Open WebUI 服务器每位用户的计算机

管理员配置的连接可防止 API Key 进入用户浏览器,并让你控制谁有访问权限。


限制资源

防止失控脚本消耗所有可用的 CPU 和内存:

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

如果进程超出这些限制,Docker 会对其进行限流(CPU)或终止(内存)。你的服务器保持健康运行。


网络隔离

对于最安全的配置,将 Open Terminal 放置在只有 Open WebUI 能访问的私有 Docker 网络中:

services:
  open-webui:
    image: ghcr.io/open-webui/open-webui:latest
    ports:
      - "3000:8080"
    networks:
      - public
      - internal

  open-terminal:
    image: ghcr.io/open-webui/open-terminal
    # Notice: no ports exposed to the outside
    networks:
      - internal

networks:
  public:
  internal:
    internal: true   # No internet access from this network

这意味着:

  • Open WebUI 可以通过 http://open-terminal:8000 访问 Open Terminal
  • Open Terminal 无法从互联网直接访问
  • Open Terminal 无法发出出站互联网请求

出站流量过滤

如果 Open Terminal 需要一定的互联网访问权限(例如安装软件包),你可以将其限制在特定域名:

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

只有这些域名可以访问。其他所有域名均被阻止。这可以防止:

  • 未经授权的数据离开容器
  • 下载意外的软件
  • 访问你未预期的内部服务

Docker socket 警告

Docker 容器可以选择性地访问宿主机的 Docker(让 AI 构建镜像、运行容器等):

-v /var/run/docker.sock:/var/run/docker.sock
仅限可信环境

挂载 Docker socket 等同于给予容器对你宿主机 Docker 的完全控制权。这实际上就是你这台机器上的 root 权限。任何拥有终端访问权限的人都可以:

  • 运行挂载你整个文件系统的容器
  • 访问你的宿主机网络
  • 管理你机器上的每一个容器

只有当你完全信任每一位拥有终端访问权限的人时,才可以这样做。


安全检查清单

建议
使用 Docker 而非裸机
设置强壮的 API Key
使用管理员配置的连接
设置内存和 CPU 限制
使用网络隔离(内部 Docker 网络)
在不需要互联网访问时启用出站过滤
除非必要,否则不要挂载 Docker socket
如果不需要运行时安装软件包,请使用 slimalpine 镜像

相关链接

本内容仅供参考,不构成任何保证、担保或合同承诺。Open WebUI 按“现状”提供。请参阅您的许可协议 以了解适用条款。